The drop command deletes the given branch reference, allowing fast-import to actively ignore it in the final checks. Signed-off-by: Vitor Antunes <vitor.hda@xxxxxxxxx> --- fast-import.c | 35 ++++++++++++++++++++++++++++++++++- 1 files changed, 34 insertions(+), 1 deletions(-) diff --git a/fast-import.c b/fast-import.c index 742e7da..906bbf4 100644 --- a/fast-import.c +++ b/fast-import.c @@ -743,6 +743,29 @@ static struct branch *new_branch(const char *name) return b; } +static void release_tree_entry(struct tree_entry *e); +static void drop_branch(const char *name) +{ + unsigned int hc = hc_str(name, strlen(name)) % branch_table_sz; + struct branch *b_prev = NULL, *b = NULL; + struct ref_lock *lock; + unsigned char old_sha1[20]; + + for (b = branch_table[hc]; b; b = b->table_next_branch) { + if (!strcmp(name, b->name)) { + release_tree_entry(&b->branch_tree); + if (b_prev) + b_prev->table_next_branch = b->table_next_branch; + branch_table[hc] = NULL; + branch_count--; + } + b_prev = b; + } + + if (!read_ref(name, old_sha1)) + delete_ref(name, old_sha1, 0) +} + static unsigned int hc_entries(unsigned int cnt) { cnt = cnt & 7 ? (cnt / 8) + 1 : cnt / 8; @@ -776,7 +799,6 @@ static struct tree_content *new_tree_content(unsigned int cnt) return t; } -static void release_tree_entry(struct tree_entry *e); static void release_tree_content(struct tree_content *t) { struct avail_tree_content *f = (struct avail_tree_content*)t; @@ -2793,6 +2815,15 @@ static void parse_reset_branch(void) unread_command_buf = 1; } +static void parse_drop_branch(void) +{ + char *sp; + + /* Obtain the branch name from the rest of our command */ + sp = strchr(command_buf.buf, ' ') + 1; + drop_branch(sp); +} + static void cat_blob_write(const char *buf, unsigned long size) { if (write_in_full(cat_blob_fd, buf, size) != size) @@ -3332,6 +3363,8 @@ int main(int argc, const char **argv) parse_new_tag(); else if (!prefixcmp(command_buf.buf, "reset ")) parse_reset_branch(); + else if (!prefixcmp(command_buf.buf, "drop ")) + parse_drop_branch(); else if (!strcmp("checkpoint", command_buf.buf)) parse_checkpoint(); else if (!strcmp("done", command_buf.buf)) -- 1.7.7.rc2.11.g4aecf.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html