Merge branch 'js/advise-when-skipping-cherry-picked'
"git rebase" by default skips changes that are equivalent to commits that are already in the history the branch is rebased onto; give messages when this happens to let the users be aware of skipped commits, and also teach them how to tell "rebase" to keep duplicated changes. * js/advise-when-skipping-cherry-picked: sequencer: advise if skipping cherry-picked commit
This commit is contained in:
22
sequencer.c
22
sequencer.c
@ -5110,6 +5110,7 @@ static int make_script_with_merges(struct pretty_print_context *pp,
|
||||
int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
|
||||
int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
|
||||
int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
|
||||
int skipped_commit = 0;
|
||||
struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
|
||||
struct strbuf label = STRBUF_INIT;
|
||||
struct commit_list *commits = NULL, **tail = &commits, *iter;
|
||||
@ -5160,8 +5161,13 @@ static int make_script_with_merges(struct pretty_print_context *pp,
|
||||
oidset_insert(&interesting, &commit->object.oid);
|
||||
|
||||
is_empty = is_original_commit_empty(commit);
|
||||
if (!is_empty && (commit->object.flags & PATCHSAME))
|
||||
if (!is_empty && (commit->object.flags & PATCHSAME)) {
|
||||
if (flags & TODO_LIST_WARN_SKIPPED_CHERRY_PICKS)
|
||||
warning(_("skipped previously applied commit %s"),
|
||||
short_commit_name(commit));
|
||||
skipped_commit = 1;
|
||||
continue;
|
||||
}
|
||||
if (is_empty && !keep_empty)
|
||||
continue;
|
||||
|
||||
@ -5225,6 +5231,9 @@ static int make_script_with_merges(struct pretty_print_context *pp,
|
||||
oidcpy(&entry->entry.oid, &commit->object.oid);
|
||||
oidmap_put(&commit2todo, entry);
|
||||
}
|
||||
if (skipped_commit)
|
||||
advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS,
|
||||
_("use --reapply-cherry-picks to include skipped commits"));
|
||||
|
||||
/*
|
||||
* Second phase:
|
||||
@ -5345,6 +5354,7 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
|
||||
const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
|
||||
int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
|
||||
int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS;
|
||||
int skipped_commit = 0;
|
||||
|
||||
repo_init_revisions(r, &revs, NULL);
|
||||
revs.verbose_header = 1;
|
||||
@ -5380,8 +5390,13 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
|
||||
while ((commit = get_revision(&revs))) {
|
||||
int is_empty = is_original_commit_empty(commit);
|
||||
|
||||
if (!is_empty && (commit->object.flags & PATCHSAME))
|
||||
if (!is_empty && (commit->object.flags & PATCHSAME)) {
|
||||
if (flags & TODO_LIST_WARN_SKIPPED_CHERRY_PICKS)
|
||||
warning(_("skipped previously applied commit %s"),
|
||||
short_commit_name(commit));
|
||||
skipped_commit = 1;
|
||||
continue;
|
||||
}
|
||||
if (is_empty && !keep_empty)
|
||||
continue;
|
||||
strbuf_addf(out, "%s %s ", insn,
|
||||
@ -5391,6 +5406,9 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
|
||||
strbuf_addf(out, " %c empty", comment_line_char);
|
||||
strbuf_addch(out, '\n');
|
||||
}
|
||||
if (skipped_commit)
|
||||
advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS,
|
||||
_("use --reapply-cherry-picks to include skipped commits"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user