git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
Cc: Neal Kreitzinger <neal@rsss.com>, git@vger.kernel.org
Subject: Re: git-archive and tar options
Date: Thu, 14 Jul 2011 14:18:58 -0400	[thread overview]
Message-ID: <20110714181858.GA25172@sigill.intra.peff.net> (raw)
In-Reply-To: <4E1F2B23.1020908@lsrfire.ath.cx>

On Thu, Jul 14, 2011 at 07:45:07PM +0200, René Scharfe wrote:

> > We didn't when git-archive was written, but these days we have
> > get_sha1_with_context to remember incidental things about an object we
> > look up. It should perhaps remember the commit (if any) we used to reach
> > a treeish, and then the above command line could still insert the pax
> > header.
> 
> That's a good idea to increase consistency, as there shouldn't really be
> a difference in output between the two subdirectory syntaxes.

The patch to do this is pretty tiny. See below.

There are a few issues, though:

  1. I think this is probably the right thing to do, and most people
     will be happy about it. But I guess I can see an argument that the
     commit-id should not be there, as the subtree does not represent
     that commit.

     IOW, if you assume the commit-id in the output means
     "by the way, this came from commit X", this change is a good thing.
     If you assume it means "this is the tree from commit X", then it's
     not.  I have no idea how people use it. I never have, but I always
     assumed the use case was "I have this random tarball. Where did it
     come from?".

  2. The object_context already has the sha1 we want, but it is under
     the name "tree", which is not an accurate name. It's actually
     "whatever is on the left side of the :". Which should be a
     tree-ish, but could be a commit or a tree.

  3. It looks like we fill in object_context whenever we see something
     like "tree-ish:path". But we should perhaps also do so when peeling
     something like "tree-ish^{tree}".

> I always wondered, however, if the embedded commit ID has really been
> used to identify the corresponding version of an archive that somehow
> lost its filename (due to being piped?).

I dunno. I've never used it.

-- >8 --
Subject: [PATCH] archive: look harder for commit id

When "git archive" is given a commit, the output will
contain the commit sha1 (either as a pax header for tar
format, or in a file comment for zip).

When it's given a name that resolves to a tree, like:

  git archive git-1.7.0:Documentation

then the archive code never sees the commit, and no
commit-id is output. We can use get_sha1_with_context to
remember the commit that led us to that tree (if any).

Signed-off-by: Jeff King <peff@peff.net>
---
 archive.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/archive.c b/archive.c
index 42f2d2f..d0ba7fb 100644
--- a/archive.c
+++ b/archive.c
@@ -256,11 +256,14 @@ static void parse_treeish_arg(const char **argv,
 	struct tree *tree;
 	const struct commit *commit;
 	unsigned char sha1[20];
+	struct object_context oc;
 
-	if (get_sha1(name, sha1))
+	if (get_sha1_with_context(name, sha1, &oc))
 		die("Not a valid object name");
 
 	commit = lookup_commit_reference_gently(sha1, 1);
+	if (!commit)
+		commit = lookup_commit_reference_gently(oc.tree, 1);
 	if (commit) {
 		commit_sha1 = commit->object.sha1;
 		archive_time = commit->date;
-- 
1.7.6.38.ge5b33

  reply	other threads:[~2011-07-14 18:19 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-13 23:34 git-archive and tar options Neal Kreitzinger
2011-07-14  1:56 ` Jeff King
2011-07-14 17:16   ` René Scharfe
2011-07-14 17:27     ` Jeff King
2011-07-14 17:45       ` René Scharfe
2011-07-14 18:18         ` Jeff King [this message]
2011-07-14 19:12           ` Jakub Narebski
2011-07-14 21:23       ` Junio C Hamano
2011-07-14 21:25         ` Jeff King
2011-07-14 23:30           ` Junio C Hamano
2011-07-15 20:59             ` René Scharfe
2011-07-18 19:31               ` Neal Kreitzinger
2011-07-18 20:50                 ` René Scharfe
2011-07-14 21:38         ` Jakub Narebski
2011-07-18 18:13       ` Neal Kreitzinger
2011-07-18 20:50         ` René Scharfe
2011-07-19  0:12           ` Neal Kreitzinger
2011-07-19 17:56             ` René Scharfe
2011-07-21  2:13               ` Neal Kreitzinger
2011-07-21 16:59                 ` Neal Kreitzinger
2011-07-14 17:48   ` Andreas Schwab
2011-07-19 20:10     ` Sylvain Rabot

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=20110714181858.GA25172@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=neal@rsss.com \
    --cc=rene.scharfe@lsrfire.ath.cx \
    /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).