diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2014-04-20 20:59:27 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-04-21 20:47:34 +0200 |
commit | 4ee1b225b99f155cc9372397b5e120c2c0eee2bf (patch) | |
tree | 215db73aa6d92f9a2f10ccb69e986e1c039e5586 /fast-import.c | |
parent | transport-helper: add support to push symbolic refs (diff) | |
download | git-4ee1b225b99f155cc9372397b5e120c2c0eee2bf.tar.xz git-4ee1b225b99f155cc9372397b5e120c2c0eee2bf.zip |
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.c | 13 |
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); |