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>
This commit is contained in:
parent
9193f74235
commit
4ee1b225b9
@ -483,6 +483,9 @@ Marks must be declared (via `mark`) before they can be used.
|
|||||||
* Any valid Git SHA-1 expression that resolves to a commit. See
|
* Any valid Git SHA-1 expression that resolves to a commit. See
|
||||||
``SPECIFYING REVISIONS'' in linkgit:gitrevisions[7] for details.
|
``SPECIFYING REVISIONS'' in linkgit:gitrevisions[7] for details.
|
||||||
|
|
||||||
|
* The special null SHA-1 (40 zeros) specifies that the branch is to be
|
||||||
|
removed.
|
||||||
|
|
||||||
The special case of restarting an incremental import from the
|
The special case of restarting an incremental import from the
|
||||||
current branch value should be written as:
|
current branch value should be written as:
|
||||||
----
|
----
|
||||||
|
@ -248,6 +248,7 @@ struct branch {
|
|||||||
uintmax_t last_commit;
|
uintmax_t last_commit;
|
||||||
uintmax_t num_notes;
|
uintmax_t num_notes;
|
||||||
unsigned active : 1;
|
unsigned active : 1;
|
||||||
|
unsigned delete : 1;
|
||||||
unsigned pack_id : PACK_ID_BITS;
|
unsigned pack_id : PACK_ID_BITS;
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
};
|
};
|
||||||
@ -1681,10 +1682,13 @@ static int update_branch(struct branch *b)
|
|||||||
struct ref_lock *lock;
|
struct ref_lock *lock;
|
||||||
unsigned char old_sha1[20];
|
unsigned char old_sha1[20];
|
||||||
|
|
||||||
if (is_null_sha1(b->sha1))
|
|
||||||
return 0;
|
|
||||||
if (read_ref(b->name, old_sha1))
|
if (read_ref(b->name, old_sha1))
|
||||||
hashclr(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);
|
lock = lock_any_ref_for_update(b->name, old_sha1, 0, NULL);
|
||||||
if (!lock)
|
if (!lock)
|
||||||
return error("Unable to lock %s", b->name);
|
return error("Unable to lock %s", b->name);
|
||||||
@ -2611,8 +2615,11 @@ static int parse_from(struct branch *b)
|
|||||||
free(buf);
|
free(buf);
|
||||||
} else
|
} else
|
||||||
parse_from_existing(b);
|
parse_from_existing(b);
|
||||||
} else if (!get_sha1(from, b->sha1))
|
} else if (!get_sha1(from, b->sha1)) {
|
||||||
parse_from_existing(b);
|
parse_from_existing(b);
|
||||||
|
if (is_null_sha1(b->sha1))
|
||||||
|
b->delete = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
die("Invalid ref name or SHA1 expression: %s", from);
|
die("Invalid ref name or SHA1 expression: %s", from);
|
||||||
|
|
||||||
|
@ -2999,4 +2999,22 @@ test_expect_success 'T: ls root tree' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'T: delete branch' '
|
||||||
|
git branch to-delete &&
|
||||||
|
git fast-import <<-EOF &&
|
||||||
|
reset refs/heads/to-delete
|
||||||
|
from 0000000000000000000000000000000000000000
|
||||||
|
EOF
|
||||||
|
test_must_fail git rev-parse --verify refs/heads/to-delete
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'T: empty reset doesnt delete branch' '
|
||||||
|
git branch not-to-delete &&
|
||||||
|
git fast-import <<-EOF &&
|
||||||
|
reset refs/heads/not-to-delete
|
||||||
|
EOF
|
||||||
|
git show-ref &&
|
||||||
|
git rev-parse --verify refs/heads/not-to-delete
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user