Skip to content

Commit d4c569f

Browse files
prertikgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent c54dacb commit d4c569f

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

builtin/rebase.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ static int run_specific_rebase(struct rebase_options *opts)
169169
add_var(&script_snippet, "upstream_name", opts->upstream_name);
170170
add_var(&script_snippet, "upstream",
171171
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");
173174
add_var(&script_snippet, "orig_head", oid_to_hex(&opts->orig_head));
174175
add_var(&script_snippet, "onto", oid_to_hex(&opts->onto->object.oid));
175176
add_var(&script_snippet, "onto_name", opts->onto_name);
@@ -251,6 +252,9 @@ static int reset_head(struct object_id *oid, const char *action,
251252
*old_orig = NULL, oid_old_orig;
252253
int ret = 0;
253254

255+
if (switch_to_branch && !starts_with(switch_to_branch, "refs/"))
256+
BUG("Not a fully qualified branch: '%s'", switch_to_branch);
257+
254258
if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
255259
return -1;
256260

@@ -558,7 +562,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
558562
* branch_name -- branch/commit being rebased, or
559563
* HEAD (already detached)
560564
* 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)
562566
*/
563567
if (argc > 0)
564568
die("TODO: handle switch_to");
@@ -575,7 +579,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
575579
branch_name = options.head_name;
576580

577581
} else {
578-
options.head_name = xstrdup("detached HEAD");
582+
free(options.head_name);
583+
options.head_name = NULL;
579584
branch_name = "HEAD";
580585
}
581586
if (get_oid("HEAD", &options.orig_head))

0 commit comments

Comments
 (0)