History

change!: `fetch::Ref::unpack()` returns `Option<oid>`. (#450)

That way the caller has to be aware of the possibility of an unborn branch (probably the only unborn branch) on the remote.

Sebastian Thiel committed 4 years ago

Commit cd867ad1 parent 70861012 files · +7 −8Browse files

Unified · Split

2 files
  1. git-protocol/src/fetch/refs/mod.rs +4 −7
  2. git-protocol/tests/fetch/mod.rs +3 −1
git-protocol/src/fetch/refs/mod.rs+4−7
@@ -89,21 +89,18 @@ impl Ref { · 88 unmodified lines
8989 /// In case of peeled refs, the tag object itself is returned as it is what the ref directly refers to, and target of the tag is returned
9090 /// as `peeled`.
9191 /// If `unborn`, the first object id will be the null oid.
92− pub fn unpack(&self) -> (&BStr, &git_hash::oid, Option<&git_hash::oid>) {
92+ pub fn unpack(&self) -> (&BStr, Option<&git_hash::oid>, Option<&git_hash::oid>) {
9393 match self {
9494 Ref::Direct { full_ref_name, object }
9595 | Ref::Symbolic {
9696 full_ref_name, object, ..
97− } => (full_ref_name.as_ref(), object, None),
97+ } => (full_ref_name.as_ref(), Some(object), None),
9898 Ref::Peeled {
9999 full_ref_name,
100100 tag: object,
101101 object: peeled,
102− } => (full_ref_name.as_ref(), object, Some(peeled)),
103− Ref::Unborn { target: _ } => {
104− static NULL: git_hash::ObjectId = git_hash::ObjectId::null(git_hash::Kind::Sha1);
105− ("HEAD".into(), &NULL, None)
106− }
102+ } => (full_ref_name.as_ref(), Some(object), Some(peeled)),
103+ Ref::Unborn { target: _ } => ("HEAD".into(), None, None),
107104 }
108105 }
109106 }
git-protocol/tests/fetch/mod.rs+3−1
@@ -41,7 +41,9 @@ impl fetch::DelegateBlocking for CloneDelegate { · 40 unmodified lines
4141 _previous_response: Option<&Response>,
4242 ) -> io::Result<Action> {
4343 for r in refs {
44− arguments.want(r.unpack().1);
44+ if let Some(id) = r.unpack().1 {
45+ arguments.want(id);
46+ }
4547 }
4648 Ok(Action::Cancel)
4749 }