summaryrefslogtreecommitdiff
path: root/builtin/rebase.c
diff options
context:
space:
mode:
authorLibravatar Pratik Karki <predatoramigo@gmail.com>2018-09-04 14:27:20 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2018-09-06 11:55:43 -0700
commitd4c569f8f4c67e3846303f772e1b6bdbabf98297 (patch)
tree55a38fcb5a815d7033adbefa9c9bf30e8061222b /builtin/rebase.c
parentbuiltin rebase: start a new rebase only if none is in progress (diff)
downloadtgif-d4c569f8f4c67e3846303f772e1b6bdbabf98297.tar.xz
builtin rebase: only store fully-qualified refs in `options.head_name`
When running a rebase on a detached HEAD, we currently store the string "detached HEAD" in options.head_name. That is a faithful translation of the shell script version, and we still kind of need it for the purposes of the scripted backends. It is poor style for C, though, where we would really only want a valid, fully-qualified ref name as value, and NULL for detached HEADs, using "detached HEAD" for display only. Make it so. Signed-off-by: Pratik Karki <predatoramigo@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/rebase.c')
-rw-r--r--builtin/rebase.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/builtin/rebase.c b/builtin/rebase.c
index d45f8f9008..afc75fe731 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -169,7 +169,8 @@ static int run_specific_rebase(struct rebase_options *opts)
add_var(&script_snippet, "upstream_name", opts->upstream_name);
add_var(&script_snippet, "upstream",
oid_to_hex(&opts->upstream->object.oid));
- add_var(&script_snippet, "head_name", opts->head_name);
+ add_var(&script_snippet, "head_name",
+ opts->head_name ? opts->head_name : "detached HEAD");
add_var(&script_snippet, "orig_head", oid_to_hex(&opts->orig_head));
add_var(&script_snippet, "onto", oid_to_hex(&opts->onto->object.oid));
add_var(&script_snippet, "onto_name", opts->onto_name);
@@ -251,6 +252,9 @@ static int reset_head(struct object_id *oid, const char *action,
*old_orig = NULL, oid_old_orig;
int ret = 0;
+ if (switch_to_branch && !starts_with(switch_to_branch, "refs/"))
+ BUG("Not a fully qualified branch: '%s'", switch_to_branch);
+
if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
return -1;
@@ -558,7 +562,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
* branch_name -- branch/commit being rebased, or
* HEAD (already detached)
* orig_head -- commit object name of tip of the branch before rebasing
- * head_name -- refs/heads/<that-branch> or "detached HEAD"
+ * head_name -- refs/heads/<that-branch> or NULL (detached HEAD)
*/
if (argc > 0)
die("TODO: handle switch_to");
@@ -575,7 +579,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
branch_name = options.head_name;
} else {
- options.head_name = xstrdup("detached HEAD");
+ free(options.head_name);
+ options.head_name = NULL;
branch_name = "HEAD";
}
if (get_oid("HEAD", &options.orig_head))