From: "Adam Brewster" <adambrewster@gmail.com>
To: "Johannes Schindelin" <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org, "Mark Levedahl" <mdl123@verizon.net>,
"Junio C Hamano" <gitster@pobox.com>,
"Jakub Narebski" <jnareb@gmail.com>
Subject: Re: [PATCH/v2] git-basis, a script to manage bases for git-bundle
Date: Thu, 3 Jul 2008 22:04:10 -0400 [thread overview]
Message-ID: <c376da900807031904y6309a179u5525f147ebc4cd53@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.1.00.0807040237580.2849@eeepc-johanness>
>>
>> How does everybody feel about the following:
>>
>> - Leave git-basis as a small perl script.
>
> I'd rather not.
>
I'm not exactly sure what your objection is here, but I guess it's
either you don't want a separate tool called git-basis that does all
of the things I've described, or you don't like my choice of perl to
do the work.
If the former, I suggest that my approach is consistent with the
philosophy of doing one thing and doing it well. I acknowledge that
it could do it's one job better (see potential improvements in my last
email), but that doesn't seem to be your complaint.
If the latter, I wonder what practical advantage comes from redoing
what I've already done in C. It would be slightly faster, but I'm not
worried about saving a few milliseconds in a process that takes at
least a couple of minutes (considering of course the time it takes to
walk to whatever remote system).
>> - Add a -b/--basis option in git-bundle that calls git-basis. Any
>> objects mentioned in the output would be excluded from the bundle.
>> Multiple --basis options will call git-basis once with several
>> arguments to generate the intersection of specified bases.
>
> So the only function of -b would be to fork() && exec() a _shell_ script?
> I don't like that at all.
>
Not quite. It would be more like a shortcut for
git-basis --show basis | git-bundle create bundle -all --stdin or
git-bundle create bundle --all <( git-basis --show basis )
(the latter of which of course wouldn't work because git-basis doesn't
take filenames.
The bundle creation is still done by git-bundle. git-basis is just
deciding what should (not) be included in the bundle.
It seems like similar architectures have been accepted to support the
-i/--interactive options or git-add and git-rebase.
>> - (maybe) Add an option "--update-bases" to automatically call git-basis
>> --update after the bundle is created successfully.
>
> Rather, have it as a feature to auto-detect if there is a ".basis" file of
> the same basename (or, rather ".state", a I find "basis" less than
> descriptive), and rewrite it if it was there.
>
> It could be forced by a to-be-introduced "--state" option to git-bundle.
>
Just because I'm creating a bundle, doesn't guarantee that the bundle
will be installed on any particular remote system, so I think that
updating the basis without being told to do so by the user is a bad
idea. For example, when creating a bundle, I find it's best to
exclude objects that I know exist on ALL of my systems, so that I can
pull from it anywhere, but usually I only end up sending it to one
system.
With regard to the use of the word basis, it comes from the
documentation of git-bundle. It's been a while since I took linear
algebra, but if I remember correctly, a basis is a set of vectors that
describe a vector space, such that a combination of those vectors
yields any point in the space. The analogy isn't perfect, but I think
it's pretty close. The word state seems very generic, as the state of
a repository includes much more than a list of objects that are known
to be available.
>> There's still plenty of potential for improvements, like a --gc mode
>> to clean up basis files,
>
> umm, why? "rm" is not simple enough?
>
rm leaves the files a little cleaner than I'd like. A basis is really
a list of objects. --gc should make sure that the objects in the list
actually exist, and aren't redundant (if I know that a remote system
has a given commit, I also know that it has all of the ancestors, so I
could delete them from the basis file without losing (much)
information.
>> a --rewind option to undo an incorrect --update,
>
> Rather hard, would you not think? The information is either not there, or
> you store loads of cruft in the .state file.
>
There's some information that you might describe as cruft. It is
specifically engineered to enable this operation, and the purpose of
--gc is to reduce the volume of that cruft.
>> or improvements in the way it calculates intersections,
>
> Umm. How so?
>
In a tree with three commits, where A (the root) is a parent of X and
Y, if only ommit X is in basisX and only commit Y is in basisY, then
the intersection of basisX and basisY should include A. Currently
git-basis will return nothing, because it doesn't care about ancestry.
I don't consider this a serious flaw, because it results in extra
information being included in the bundle, but should never cause
broken bundles that are missing information.
>> but I think that with these changes the system is as simple as possible
>> while maximizing flexibility, utility, and usability.
>
> I am not convinced. This sort of feature belongs into git-bundle. It
> certainly does not deserve being blessed by yet-another git-* command,
> when we are constantly being bashed for having _way_ too many _already_.
>
I disagree. I think the --basis option seems like a logical addition
to git-bundle, but I don't think git-bundle is the right interface to
update the basis files.
In other news, it seems, the change to make git-bundle accept --stdin
is less controversial, so I'll submit that as a small patch.
> Ciao,
> Dscho
>
>
Adam Brewster
next prev parent reply other threads:[~2008-07-04 2:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1214272713-7808-1-git-send-email-adambrewster@gmail.com>
2008-06-30 22:49 ` [PATCH/v2] git-basis, a script to manage bases for git-bundle Adam Brewster
2008-07-01 9:51 ` Jeff King
2008-07-02 1:36 ` Adam Brewster
2008-07-02 2:10 ` Jay Soffian
2008-07-02 2:16 ` Adam Brewster
2008-07-02 2:21 ` Jay Soffian
2008-07-02 3:21 ` Jeff King
2008-07-02 9:44 ` Jakub Narebski
2008-07-03 19:59 ` Jeff King
2008-07-03 23:38 ` Adam Brewster
2008-07-04 0:44 ` Johannes Schindelin
2008-07-04 2:04 ` Adam Brewster [this message]
2008-07-04 16:47 ` Mark Levedahl
2008-07-04 20:55 ` Jakub Narebski
2008-07-04 19:51 ` Jeff King
2008-07-01 23:55 ` Junio C Hamano
2008-07-02 0:16 ` Mark Levedahl
2008-07-03 23:13 ` Adam Brewster
2008-07-04 13:14 ` Mark Levedahl
2008-07-04 13:22 ` Johannes Schindelin
2008-07-04 13:49 ` Mark Levedahl
2008-07-02 2:12 ` Adam Brewster
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=c376da900807031904y6309a179u5525f147ebc4cd53@mail.gmail.com \
--to=adambrewster@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=mdl123@verizon.net \
/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).