It makes possible to undo accidental tag deletion and overwriting. Signed-off-by: Zoltán Füzesi <zfuzesi@xxxxxxxxx> --- This patch was created in response to this feature request: http://article.gmane.org/gmane.comp.version-control.git/135016 I named it "RFC" because of the overwriting part. v3: works when tag object is created (I should slow down...) builtin-tag.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/builtin-tag.c b/builtin-tag.c index c479018..1404a0e 100644 --- a/builtin-tag.c +++ b/builtin-tag.c @@ -140,7 +140,7 @@ static int delete_tag(const char *name, const char *ref, { if (delete_ref(ref, sha1, 0)) return 1; - printf("Deleted tag '%s'\n", name); + printf("Deleted tag '%s' %s\n", name, sha1_to_hex(sha1)); return 0; } @@ -363,7 +363,7 @@ static int parse_msg_arg(const struct option *opt, const char *arg, int unset) int cmd_tag(int argc, const char **argv, const char *prefix) { struct strbuf buf = STRBUF_INIT; - unsigned char object[20], prev[20]; + unsigned char object[20], prev[20], tag_object[20]; char ref[PATH_MAX]; const char *object_ref, *tag; struct ref_lock *lock; @@ -472,13 +472,15 @@ int cmd_tag(int argc, const char **argv, const char *prefix) if (annotate) create_tag(object, tag, &buf, msg.given || msgfile, - sign, prev, object); + sign, prev, tag_object); lock = lock_any_ref_for_update(ref, prev, 0); if (!lock) die("%s: cannot lock the ref", ref); - if (write_ref_sha1(lock, object, NULL) < 0) + if (write_ref_sha1(lock, annotate ? tag_object : object, NULL) < 0) die("%s: cannot update the ref", ref); + else if (force && hashcmp(object, prev)) + printf("Overwritten tag '%s' (%s)\n", ref, sha1_to_hex(prev)); strbuf_release(&buf); return 0; -- 1.6.6.rc2 -- 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