[PATCH] builtin-remote: make rm operation safer in mirrored repository
- From
Jay Soffian <jaysoffian@gmail.com>
- Date
- Feb 1, 2009, 15:48 UTC
- Message-ID
- <1233503309-40144-1-git-send-email-jaysoffian@gmail.com>
- In-Reply-To
- <76718490902010652w7a332550w5e0658a390c7dea9@mail.gmail.com>
"git remote rm <repo>" is happy to remove non-remote branches (and their reflogs). This may be okay if the repository truely is a mirror, but if the user had done "git remote add --mirror <repo>" by accident and was just undoing their mistake, then they are left in a situation that is difficult to recover from.
After this commit, "git remote rm" skips over non-remote branches and instead advises the user on how to remove such branches using "git branch -d", which itself has nice safety checks wrt to branch removal lacking from "git remote rm".
Signed-off-by: Jay Soffian <jaysoffian@gmail.com> --- On Sun, Feb 1, 2009 at 9:52 AM, Jay Soffian <jaysoffian@gmail.com> wrote:
Show 5 quoted lines
> Anyway, it would seem to me it should be harder to remove local refs. > This one was somewhat painful to recover from. Not sure what better > behavior would be: should it be harder to do "remote add --mirror" on > a repository with content, should "remote rm" on mirrored repository > require a --force switch with a stern warning first, or...?
Perhaps something like this?
builtin-remote.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/builtin-remote.c b/builtin-remote.c index abc8dd8..2629bc5 100644 --- a/builtin-remote.c +++ b/builtin-remote.c @@ -310,6 +310,13 @@ static int add_branch_for_removal(const char *refname, struct string_list_item *item; struct known_remote *kr; + /* don't delete non-remote branches */ + if (prefixcmp(refname, "refs/remotes")) { + warning("not removing non-remote branch; use git branch -d %s to remove", + abbrev_branch(refname)); + return 0; + } + memset(&refspec, 0, sizeof(refspec)); refspec.dst = (char *)refname; if (remote_find_tracking(branches->remote, &refspec))
-- 1.6.1.224.gb56c