Skip to content

Commit f635b8d

Browse files
committed
Merge branch 'jt/submodule-pull-recurse-rebase'
"git pull -recurse-submodules --rebase", when the submodule repository's history did not have anything common between ours and the upstream's, failed to execute. We need to fetch from them to continue even in such a case. * jt/submodule-pull-recurse-rebase: submodule: do not pass null OID to setup_revisions
2 parents c2c7d17 + 4d36f88 commit f635b8d

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

submodule.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,8 +1169,10 @@ int submodule_touches_in_range(struct object_id *excl_oid,
11691169

11701170
argv_array_push(&args, "--"); /* args[0] program name */
11711171
argv_array_push(&args, oid_to_hex(incl_oid));
1172-
argv_array_push(&args, "--not");
1173-
argv_array_push(&args, oid_to_hex(excl_oid));
1172+
if (!is_null_oid(excl_oid)) {
1173+
argv_array_push(&args, "--not");
1174+
argv_array_push(&args, oid_to_hex(excl_oid));
1175+
}
11741176

11751177
collect_changed_submodules(&subs, &args);
11761178
ret = subs.nr;

submodule.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ extern int bad_to_remove_submodule(const char *path, unsigned flags);
9292

9393
int add_submodule_odb(const char *path);
9494

95-
/* Checks if there are submodule changes in a..b. */
95+
/*
96+
* Checks if there are submodule changes in a..b. If a is the null OID,
97+
* checks b and all its ancestors instead.
98+
*/
9699
extern int submodule_touches_in_range(struct object_id *a,
97100
struct object_id *b);
98101
extern int find_unpushed_submodules(struct oid_array *commits,

t/t5572-pull-submodule.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,25 @@ test_expect_success 'pull rebase recursing fails with conflicts' '
132132
test_i18ngrep "locally recorded submodule modifications" err
133133
'
134134

135+
test_expect_success 'branch has no merge base with remote-tracking counterpart' '
136+
rm -rf parent child &&
137+
138+
test_create_repo a-submodule &&
139+
test_commit -C a-submodule foo &&
140+
141+
test_create_repo parent &&
142+
git -C parent submodule add "$(pwd)/a-submodule" &&
143+
git -C parent commit -m foo &&
144+
145+
git clone parent child &&
146+
147+
# Reset master so that it has no merge base with
148+
# refs/remotes/origin/master.
149+
OTHER=$(git -C child commit-tree -m bar \
150+
$(git -C child rev-parse HEAD^{tree})) &&
151+
git -C child reset --hard "$OTHER" &&
152+
153+
git -C child pull --recurse-submodules --rebase
154+
'
155+
135156
test_done

0 commit comments

Comments
 (0)