Skip to content

Commit f6276b7

Browse files
committed
Merge branch 'js/maint-fetch-update-head' into maint
* js/maint-fetch-update-head: pull: allow "git pull origin $something:$current_branch" into an unborn branch Fix fetch/pull when run without --update-head-ok
2 parents 86e67a0 + b0ad11e commit f6276b7

File tree

7 files changed

+44
-5
lines changed

7 files changed

+44
-5
lines changed

builtin-fetch.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,19 @@ static void find_non_local_tags(struct transport *transport,
534534
string_list_clear(&new_refs, 0);
535535
}
536536

537+
static void check_not_current_branch(struct ref *ref_map)
538+
{
539+
struct branch *current_branch = branch_get(NULL);
540+
541+
if (is_bare_repository() || !current_branch)
542+
return;
543+
544+
for (; ref_map; ref_map = ref_map->next)
545+
if (ref_map->peer_ref && !strcmp(current_branch->refname,
546+
ref_map->peer_ref->name))
547+
die("Refusing to fetch into current branch");
548+
}
549+
537550
static int do_fetch(struct transport *transport,
538551
struct refspec *refs, int ref_count)
539552
{
@@ -558,6 +571,8 @@ static int do_fetch(struct transport *transport,
558571
}
559572

560573
ref_map = get_ref_map(transport, refs, ref_count, tags, &autotags);
574+
if (!update_head_ok)
575+
check_not_current_branch(ref_map);
561576

562577
for (rm = ref_map; rm; rm = rm->next) {
563578
if (rm->peer_ref)

git-pull.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ orig_head=$(git rev-parse --verify HEAD 2>/dev/null)
124124
git fetch --update-head-ok "$@" || exit 1
125125

126126
curr_head=$(git rev-parse --verify HEAD 2>/dev/null)
127-
if test "$curr_head" != "$orig_head"
127+
if test -n "$orig_head" && test "$curr_head" != "$orig_head"
128128
then
129129
# The fetch involved updating the current branch.
130130

@@ -172,7 +172,7 @@ esac
172172

173173
if test -z "$orig_head"
174174
then
175-
git update-ref -m "initial pull" HEAD $merge_head "" &&
175+
git update-ref -m "initial pull" HEAD $merge_head "$curr_head" &&
176176
git read-tree --reset -u HEAD || exit 1
177177
exit
178178
fi

t/t5405-send-pack-rewind.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ test_expect_success setup '
1212
mkdir another && (
1313
cd another &&
1414
git init &&
15-
git fetch .. master:master
15+
git fetch --update-head-ok .. master:master
1616
) &&
1717
1818
>file2 && git add file2 && test_tick &&

t/t5505-remote.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ test_expect_success 'prune --dry-run' '
188188
test_expect_success 'add --mirror && prune' '
189189
(mkdir mirror &&
190190
cd mirror &&
191-
git init &&
191+
git init --bare &&
192192
git remote add --mirror -f origin ../one) &&
193193
(cd one &&
194194
git branch -m side2 side) &&

t/t5510-fetch.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,4 +303,16 @@ test_expect_success 'pushing nonexistent branch by mistake should not segv' '
303303
304304
'
305305

306+
test_expect_success 'refuse to fetch into the current branch' '
307+
308+
test_must_fail git fetch . side:master
309+
310+
'
311+
312+
test_expect_success 'fetch into the current branch with --update-head-ok' '
313+
314+
git fetch --update-head-ok . side:master
315+
316+
'
317+
306318
test_done

t/t5520-pull.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ test_expect_success 'checking the results' '
2929
diff file cloned/file
3030
'
3131

32+
test_expect_success 'pulling into void using master:master' '
33+
mkdir cloned-uho &&
34+
(
35+
cd cloned-uho &&
36+
git init &&
37+
git pull .. master:master
38+
) &&
39+
test -f file &&
40+
test -f cloned-uho/file &&
41+
test_cmp file cloned-uho/file
42+
'
43+
3244
test_expect_success 'test . as a remote' '
3345
3446
git branch copy master &&

t/t9300-fast-import.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ test_expect_success \
983983
git checkout subuse1 &&
984984
rm -rf sub && mkdir sub && cd sub &&
985985
git init &&
986-
git fetch .. refs/heads/sub:refs/heads/master &&
986+
git fetch --update-head-ok .. refs/heads/sub:refs/heads/master &&
987987
git checkout master &&
988988
cd .. &&
989989
git submodule init &&

0 commit comments

Comments
 (0)