summaryrefslogtreecommitdiff
path: root/fast-import.c
diff options
context:
space:
mode:
authorFelipe Contreras <felipe.contreras@gmail.com>2014-04-20 13:59:27 -0500
committerJunio C Hamano <gitster@pobox.com>2014-04-21 11:47:34 -0700
commit4ee1b225b99f155cc9372397b5e120c2c0eee2bf (patch)
tree215db73aa6d92f9a2f10ccb69e986e1c039e5586 /fast-import.c
parent9193f742350d1b97e32b0687d1577dc2b2a0d713 (diff)
downloadgit-4ee1b225b99f155cc9372397b5e120c2c0eee2bf.tar.gz
fast-import: add support to delete refs
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'fast-import.c')
-rw-r--r--fast-import.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fast-import.c b/fast-import.c
index fb4738d373..6707a66471 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -248,6 +248,7 @@ struct branch {
uintmax_t last_commit;
uintmax_t num_notes;
unsigned active : 1;
+ unsigned delete : 1;
unsigned pack_id : PACK_ID_BITS;
unsigned char sha1[20];
};
@@ -1681,10 +1682,13 @@ static int update_branch(struct branch *b)
struct ref_lock *lock;
unsigned char old_sha1[20];
- if (is_null_sha1(b->sha1))
- return 0;
if (read_ref(b->name, old_sha1))
hashclr(old_sha1);
+ if (is_null_sha1(b->sha1)) {
+ if (b->delete)
+ delete_ref(b->name, old_sha1, 0);
+ return 0;
+ }
lock = lock_any_ref_for_update(b->name, old_sha1, 0, NULL);
if (!lock)
return error("Unable to lock %s", b->name);
@@ -2611,8 +2615,11 @@ static int parse_from(struct branch *b)
free(buf);
} else
parse_from_existing(b);
- } else if (!get_sha1(from, b->sha1))
+ } else if (!get_sha1(from, b->sha1)) {
parse_from_existing(b);
+ if (is_null_sha1(b->sha1))
+ b->delete = 1;
+ }
else
die("Invalid ref name or SHA1 expression: %s", from);