History

[clone] When unpacking peeled refs, use the object that refers to the tag…

…and not the one that refers to the (usually) commit the tags points to. When declaring wants, it really wants to see tips first, it appears. Quite tricky

Sebastian Thiel committed 6 years ago

Commit fe8bb391 parent 7c8ecb73 files · +6 −4Browse files

Showing the changes to git-protocol (2 of 3 files). Show all

Unified · Split

2 files
  1. git-protocol/src/fetch/refs.rs +4 −2
  2. git-protocol/tests/fetch/mod.rs +1 −1
git-protocol/src/fetch/refs.rs+4−2
@@ -54,10 +54,12 @@ pub enum Ref { · 53 unmodified lines
54}54}
55 55
56impl Ref {56impl Ref {
57 pub fn unpack_common(&self) -> (&BString, &owned::Id) {57 /// Provide shared fields referring to the ref itself. In case of peeled refs, the tag object itself is returned as it is what
58 /// the path refers to.
59 pub fn unpack(&self) -> (&BString, &owned::Id) {
58 match self {60 match self {
59 Ref::Direct { path, object, .. }61 Ref::Direct { path, object, .. }
60 | Ref::Peeled { path, object, .. }62 | Ref::Peeled { path, tag: object, .. } // the tag acts as reference
61 | Ref::Symbolic { path, object, .. } => (path, object),63 | Ref::Symbolic { path, object, .. } => (path, object),
62 }64 }
63 }65 }
git-protocol/tests/fetch/mod.rs+1−1
@@ -16,7 +16,7 @@ struct CloneDelegate { · 15 unmodified lines
16impl fetch::Delegate for CloneDelegate {16impl fetch::Delegate for CloneDelegate {
17 fn negotiate(&mut self, refs: &[Ref], arguments: &mut Arguments, _previous_result: Option<&Response>) -> Action {17 fn negotiate(&mut self, refs: &[Ref], arguments: &mut Arguments, _previous_result: Option<&Response>) -> Action {
18 for r in refs {18 for r in refs {
19 arguments.want(r.unpack_common().1.to_borrowed());19 arguments.want(r.unpack().1.to_borrowed());
20 }20 }
21 Action::Close21 Action::Close
22 }22 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t