From: Jakub Narebski <jnareb@gmail.com>
To: wmpalmer@gmail.com
Cc: Jonathan Nieder <jrnieder@gmail.com>,
Clemens Buchacher <drizzd@aon.at>,
git@vger.kernel.org, Nicolas Sebrecht <nicolas.s.dev@gmx.fr>,
Nanako Shiraishi <nanako3@lavabit.com>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: Question about 'branch -d' safety
Date: Mon, 19 Jul 2010 13:01:20 +0200 [thread overview]
Message-ID: <201007191301.22287.jnareb@gmail.com> (raw)
In-Reply-To: <1279523523.3077.8.camel@dreddbeard>
On Mon, 19 Jul 2010, Will Palmer wrote:
> On Mon, 2010-07-19 at 01:19 +0200, Jakub Narebski wrote:
> > On Sun, 18 Jul 2010, Will Palmer wrote:
> > > On Sun, 2010-07-18 at 13:55 +0200, Jakub Narebski wrote:
> > > having any kind of suffix like refs~/heads~/bar is just asking for
> > > someone to delete a branch twice.
> >
> > I don't understand what you wanted to say here. Using the
> >
> > $GIT_DIR/logs/refs~/heads~/bar
> >
> > (and not $GIT_DIR/refs~/heads~/bar) as a reflog for a deleted branch
> > 'bar' is an implementation detail. You wouldn't see refs~/heads~/bar
> > when listing branches... well, perhaps 'git branch --list-deleted'
> > could be used to list deleted branches (by scanning for reflogs).
>
> git branch -d integration
> # git renames logs/refs/heads/integration to logs/refs~/heads~/integration
# git adds deletion event to logs/refs~/heads~/integration reflog
(similar to putting creation or rename event in reflog)
> git co -b integration sometopic
> # git creates refs/heads/integration, unrelated to the old one
> (do some work)
> (merge into the main branch)
> git branch -d integration
You touch interesting and important issue.
>
> Now what?
> git renames refs/heads/integration to ... what?
> - does the old refs~/heads~/integration get clobbered? If that's ever
> okay, why are we even having this discussion?
That's one solution. We give some safety net, but not too much of
safety net.
> - does the "old reflog" stuff get combined? If that's ever okay, why
> even have an extra reflog, instead of just using the reflog we
> already have?
That's another solution. We have deletion events in reflog to find
events for first 'integration', and distinguish them from events for
second (unrelated) 'integration' branch.
We can't just deal with reflogs of deleted branches by leaving them
as they are, not moved to logs/refs~/heads~/..., and combining them
because of possibility of D/F conflict (and yet another issue,
described below). The reflog for branch 'foo' would block creating
reflog for branch 'foo/bar'. Besides I think it's O.K. to require
more work to access reflogs for deleted branches, but not good to
force more work for reflogs for normal branches.
There is also a variant of the situation you described that makes
it harder for the 'concatenate reflogs of deleted branches' solution
to work well, namely:
$ git branch -d foo
$ git branch -m bar foo
$ git branch -d foo
where branch 'bar', renamed to 'foo' and then deleted has reflog from
before deletion of first 'foo' branch.
> - do we move everything else one step down, so refs~/heads~/integration
> becomes refs~2/heads~2/integration? (ie: 2-dimensional reflog, which
> sounds rather too fancy, to me)
This is yet another solution, although I think the better naming would
be to borrow concept of numbered backups, i.e. have
logs/refs~/heads~/integration~1~
logs/refs~/heads~/integration~2~
...
BTW., we can even make git branch ask (prompt for answer) whether to
delete old reflog of first 'integration' branch, or keep it in some
form... unless confiogured to always choose one solution.
Sigh... this makes eventual solution complicated, but the problem is
also complicated...
P.S. Wouldn't 'refs~' and 'foo~1~' filenames/pathnames be a problem
on MS Windows / on MS Windows filesystems: NTFS or FAT28^W FAT32?
Or on HFS+ on MacOS X?
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2010-07-19 11:01 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-29 21:54 Question about 'branch -d' safety Nanako Shiraishi
2009-12-29 22:31 ` Nicolas Sebrecht
2009-12-30 3:12 ` Nanako Shiraishi
2009-12-30 6:43 ` Junio C Hamano
2009-12-30 21:08 ` Nicolas Sebrecht
2010-07-10 6:55 ` Clemens Buchacher
2010-07-10 21:40 ` Jonathan Nieder
2010-07-10 21:57 ` Jakub Narebski
2010-07-10 22:17 ` Jonathan Nieder
2010-07-11 6:55 ` Clemens Buchacher
2010-07-11 7:16 ` Jakub Narebski
2010-07-11 8:48 ` Julian Phillips
2010-07-11 13:37 ` Clemens Buchacher
2010-07-11 18:41 ` Junio C Hamano
2010-07-11 19:05 ` Jakub Narebski
2010-07-11 22:02 ` Will Palmer
2010-07-12 18:47 ` Clemens Buchacher
2010-07-12 23:50 ` Junio C Hamano
2010-07-13 7:13 ` Clemens Buchacher
2010-07-13 8:00 ` Will Palmer
2010-07-13 8:30 ` Johannes Sixt
2010-07-13 9:00 ` Will Palmer
2010-07-13 22:21 ` Clemens Buchacher
2010-07-17 9:30 ` Clemens Buchacher
2010-07-18 0:43 ` Jonathan Nieder
2010-07-18 11:55 ` Jakub Narebski
2010-07-18 20:27 ` Will Palmer
2010-07-18 23:19 ` Jakub Narebski
2010-07-19 7:12 ` Will Palmer
2010-07-19 11:01 ` Jakub Narebski [this message]
2010-07-19 17:16 ` Joshua Jensen
2010-07-19 19:34 ` Clemens Buchacher
2010-07-19 19:45 ` Will Palmer
2010-07-19 20:40 ` Jakub Narebski
2010-07-20 3:05 ` Joshua Jensen
2010-07-20 6:31 ` Will Palmer
2010-07-19 20:36 ` Jakub Narebski
2010-07-19 18:06 ` Junio C Hamano
2010-07-19 19:22 ` Clemens Buchacher
2010-07-19 20:49 ` Jakub Narebski
2010-07-20 13:19 ` Ævar Arnfjörð Bjarmason
2010-07-20 13:34 ` Matthieu Moy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201007191301.22287.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=drizzd@aon.at \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=nanako3@lavabit.com \
--cc=nicolas.s.dev@gmx.fr \
--cc=wmpalmer@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).