aboutsummaryrefslogtreecommitdiff
path: root/builtin/checkout.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-12-19 16:05:50 -0800
committerJunio C Hamano <gitster@pobox.com>2011-12-19 16:05:50 -0800
commit2e05710a161e6287f239fae42b86b0cb46190834 (patch)
treea2dd4d1acc86d20f7888ee4f09f7d54d600ff33e /builtin/checkout.c
parentb8fc5abd73e2e81c396844c09e8003de320709e5 (diff)
parent8cad4744ee37ebec1d9491a1381ec1771a1ba795 (diff)
downloadgit-2e05710a161e6287f239fae42b86b0cb46190834.tar.gz
git-2e05710a161e6287f239fae42b86b0cb46190834.tar.xz
Merge branch 'nd/resolve-ref'
* nd/resolve-ref: Rename resolve_ref() to resolve_ref_unsafe() Convert resolve_ref+xstrdup to new resolve_refdup function revert: convert resolve_ref() to read_ref_full()
Diffstat (limited to 'builtin/checkout.c')
-rw-r--r--builtin/checkout.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c
index fdd2e0b9d..011c0561d 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -705,17 +705,14 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
{
int ret = 0;
struct branch_info old;
+ void *path_to_free;
unsigned char rev[20];
int flag;
memset(&old, 0, sizeof(old));
- old.path = resolve_ref("HEAD", rev, 0, &flag);
- if (old.path)
- old.path = xstrdup(old.path);
+ old.path = path_to_free = resolve_refdup("HEAD", rev, 0, &flag);
old.commit = lookup_commit_reference_gently(rev, 1);
- if (!(flag & REF_ISSYMREF)) {
- free((char *)old.path);
+ if (!(flag & REF_ISSYMREF))
old.path = NULL;
- }
if (old.path && !prefixcmp(old.path, "refs/heads/"))
old.name = old.path + strlen("refs/heads/");
@@ -729,8 +726,10 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
}
ret = merge_working_tree(opts, &old, new);
- if (ret)
+ if (ret) {
+ free(path_to_free);
return ret;
+ }
if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
orphaned_commit_warning(old.commit);
@@ -738,7 +737,7 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
update_refs_for_switch(opts, &old, new);
ret = post_checkout_hook(old.commit, new->commit, 1);
- free((char *)old.path);
+ free(path_to_free);
return ret || opts->writeout_error;
}