From: Jeff King <peff@github.com>
To: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
Cc: Junio C Hamano <gitster@pobox.com>,
"J.H." <warthog19@eaglescrag.net>,
git@vger.kernel.org, git-dev@github.com
Subject: Re: [PATCHv2 7/9] archive: implement configurable tar filters
Date: Wed, 22 Jun 2011 10:59:17 -0400 [thread overview]
Message-ID: <20110622145916.GA9266@sigill.intra.peff.net> (raw)
In-Reply-To: <4E01872F.8070503@lsrfire.ath.cx>
On Wed, Jun 22, 2011 at 08:09:51AM +0200, René Scharfe wrote:
> just a quick comment before I drop off the net for a few days. I like
> the series a lot, especially the refactorings in patches 1 to 6.
Thanks. I didn't know if I was going overboard, but the result looked
cleaner to me, so it is good to have a second opinion.
> > +tar.<format>.command::
>
> Would switching around format and "command" be better?
>
> [tar "command"]
> tar.gz = gzip -cn
> tar.xz = xz -c
That violates our usual convention that the first and final components
are static, and the middle part can contain everything. So doing:
git config tar.command.tar.gz "gzip -cn"
is going to end up as:
[tar "command.tar"]
gz = gzip -cn
Plus it doesn't leave room for any additional per-command config keys if
we want to add them in the future.
> > + ar = find_tar_filter(name, namelen);
> > + if (!ar) {
> > + ar = xcalloc(1, sizeof(*ar));
> > + ar->name = xmemdupz(name, namelen);
> > + ar->write_archive = write_tar_filter_archive;
> > + ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS;
> > + ALLOC_GROW(tar_filters, nr_tar_filters + 1, alloc_tar_filters);
> > + tar_filters[nr_tar_filters++] = ar;
> > + }
> > +
> > + if (!strcmp(type, "command")) {
> > + if (!value)
> > + return config_error_nonbool(var);
> > + free(ar->data);
> > + ar->data = xstrdup(value);
> > + return 0;
> > + }
>
> Why not register it right here instead of adding it to the intermediate
> list?
If it were just this patch, you could do that. But as soon as you add
more keys (e.g., a later patch adds tar.*.remote), then you run into the
situation of getting only part of the config at a time, and maybe not
getting the full config for a command at all. For example:
[tar "tar.gz"]
remote = true
would make an archiver with no "command" set. We would need to
special-case it everywhere to ignore it when we looked at the list, or
later just remove it. This patch takes the approach of having a
secondary list of all of the configured bits, and then only registering
those that are actually valid.
It also keeps the configured and builtin lists separate. Otherwise I
have to special-case:
[tar "zip"]
command = ...
to ignore the builtin zip archiver, which I think is not something we
want to be able to override in this way.
> And are duplicates handled properly, e.g. system has "gzip -cn"
> and local wants "gzip -c"?
Yes. We look up the archiver in the list of configured ones and
overwrite its command field (that's why the .tar.gz patch actually calls
the config parser as if you had those lines in your config file, instead
of registering static archiver structs).
I should probably include a test for that, though.
-Peff
next prev parent reply other threads:[~2011-06-22 14:59 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-14 18:17 [PATCH 1/2] archive: factor out write phase of tar format Jeff King
2011-06-14 18:18 ` [PATCH 2/2] archive: support gzipped tar files Jeff King
2011-06-14 19:25 ` J.H.
2011-06-14 19:30 ` Jeff King
2011-06-14 19:39 ` René Scharfe
2011-06-14 20:14 ` Jeff King
2011-06-14 20:45 ` Jeff King
2011-06-15 22:30 ` [RFC/PATCH 0/7] user-configurable git-archive output formats Jeff King
2011-06-15 22:31 ` [PATCH 1/7] archive: reorder option parsing and config reading Jeff King
2011-06-15 22:33 ` [PATCH 2/7] archive: add user-configurable tar-filter infrastructure Jeff King
2011-06-15 23:33 ` Junio C Hamano
2011-06-16 0:29 ` Jeff King
2011-06-15 22:33 ` [PATCH 3/7] archive: support user tar-filters via --format Jeff King
2011-06-15 22:33 ` [PATCH 4/7] archive: advertise user tar-filters in --list Jeff King
2011-06-15 22:34 ` [PATCH 5/7] archive: refactor format-guessing from filename Jeff King
2011-06-15 23:48 ` Junio C Hamano
2011-06-16 0:34 ` Jeff King
2011-06-15 22:34 ` [PATCH 6/7] archive: match extensions from user-configured formats Jeff King
2011-06-15 22:35 ` [PATCH 7/7] archive: provide builtin .tar.gz filter Jeff King
2011-06-15 23:55 ` Junio C Hamano
2011-06-15 23:57 ` Junio C Hamano
2011-06-16 0:38 ` Jeff King
2011-06-16 6:27 ` Junio C Hamano
2011-06-16 6:51 ` Jeff King
2011-06-16 7:56 ` Chris Webb
2011-06-16 17:46 ` Jeff King
2011-06-16 18:02 ` Junio C Hamano
2011-06-16 18:21 ` Jeff King
2011-06-16 18:27 ` John Szakmeister
2011-06-16 18:42 ` Junio C Hamano
2011-06-16 18:57 ` Jeff King
2011-06-18 14:52 ` [RFC/PATCH 0/7] user-configurable git-archive output formats René Scharfe
2011-06-18 15:28 ` Jakub Narebski
2011-06-20 15:58 ` Junio C Hamano
2011-06-22 1:19 ` [PATCHv2 0/9] configurable tar compressors Jeff King
2011-06-22 1:20 ` [PATCHv2 1/9] archive: reorder option parsing and config reading Jeff King
2011-06-22 1:22 ` [PATCHv2 2/9] archive-tar: don't reload default config options Jeff King
2011-06-22 1:23 ` [PATCHv2 3/9] archive: refactor list of archive formats Jeff King
2011-06-23 17:05 ` Thiago Farina
2011-06-23 17:30 ` Jeff King
2011-06-22 1:24 ` [PATCHv2 4/9] archive: pass archiver struct to write_archive callback Jeff King
2011-06-22 1:24 ` [PATCHv2 5/9] archive: move file extension format-guessing lower Jeff King
2011-06-22 1:25 ` [PATCHv2 6/9] archive: refactor file extension format-guessing Jeff King
2011-06-22 1:26 ` [PATCHv2 7/9] archive: implement configurable tar filters Jeff King
2011-06-22 1:45 ` Jeff King
2011-06-22 6:09 ` René Scharfe
2011-06-22 14:59 ` Jeff King [this message]
2011-06-22 1:27 ` [PATCHv2 8/9] archive: provide builtin .tar.gz filter Jeff King
2011-06-22 1:35 ` [PATCHv2 9/9] upload-archive: allow user to turn off filters Jeff King
2011-06-22 3:17 ` Jeff King
2011-06-21 16:01 ` [RFC/PATCH 0/7] user-configurable git-archive output formats Jeff King
2011-06-18 15:40 ` René Scharfe
2011-06-14 20:30 ` [PATCH 2/2] archive: support gzipped tar files Junio C Hamano
2011-06-14 20:49 ` Jeff King
2011-06-14 23:40 ` Miles Bader
2011-06-15 22:46 ` Jeff King
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=20110622145916.GA9266@sigill.intra.peff.net \
--to=peff@github.com \
--cc=git-dev@github.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=rene.scharfe@lsrfire.ath.cx \
--cc=warthog19@eaglescrag.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).