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>
Pratik Karki committed
Sep 4, 2018 at 14:27 UTC
d4c569f8f4c67e3846303f772e1b6bdbabf98297
1 file changed
+8
-3
builtin/rebase.c
+8
-3
@@ -169,7 +169,8 @@ static int run_specific_rebase(struct rebase_options *opts)
169
add_var(&script_snippet, "upstream_name", opts->upstream_name);
170
add_var(&script_snippet, "upstream",
171
oid_to_hex(&opts->upstream->object.oid));
172
- add_var(&script_snippet, "head_name", opts->head_name);
172
+ add_var(&script_snippet, "head_name",
173
+ opts->head_name ? opts->head_name : "detached HEAD");
174
add_var(&script_snippet, "orig_head", oid_to_hex(&opts->orig_head));
175
add_var(&script_snippet, "onto", oid_to_hex(&opts->onto->object.oid));
176
add_var(&script_snippet, "onto_name", opts->onto_name);
@@ -251,6 +252,9 @@ static int reset_head(struct object_id *oid, const char *action,
252
*old_orig = NULL, oid_old_orig;
253
int ret = 0;
254
255
+ if (switch_to_branch && !starts_with(switch_to_branch, "refs/"))
256
+ BUG("Not a fully qualified branch: '%s'", switch_to_branch);
257
+
258
if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
259
return -1;
260
@@ -558,7 +562,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
562
* branch_name -- branch/commit being rebased, or
563
* HEAD (already detached)
564
* orig_head -- commit object name of tip of the branch before rebasing
561
- * head_name -- refs/heads/<that-branch> or "detached HEAD"
565
+ * head_name -- refs/heads/<that-branch> or NULL (detached HEAD)
566
*/
567
if (argc > 0)
568
die("TODO: handle switch_to");
@@ -575,7 +579,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
579
branch_name = options.head_name;
580
581
} else {
578
- options.head_name = xstrdup("detached HEAD");
582
+ free(options.head_name);
583
+ options.head_name = NULL;
584
branch_name = "HEAD";
585
}
586
if (get_oid("HEAD", &options.orig_head))