From: Jonathan Nieder <jrnieder@gmail.com>
To: David Barr <david.barr@cordelta.com>
Cc: Git Mailing List <git@vger.kernel.org>,
Ramkumar Ramachandra <artagnon@gmail.com>,
Sverre Rabbelier <srabbelier@gmail.com>,
Gabriel Filion <lelutin@gmail.com>,
Johannes Sixt <j.sixt@viscovery.net>
Subject: Re: [PATCH] fast-import: Allow filemodify to set the root
Date: Mon, 11 Oct 2010 01:34:29 -0500 [thread overview]
Message-ID: <20101011063429.GA32034@burratino> (raw)
In-Reply-To: <1286681415-1831-1-git-send-email-david.barr@cordelta.com>
David Barr wrote:
> --- a/Documentation/git-fast-import.txt
> +++ b/Documentation/git-fast-import.txt
> @@ -524,6 +524,9 @@ start with double quote (`"`).
> If an `LF` or double quote must be encoded into `<path>` shell-style
> quoting should be used, e.g. `"path/with\n and \" in it"`.
>
> +Additionally, in `040000` mode, `<path>` may also be an empty string
> +(`""`) to specify the root of the tree.
> +
Ideally this would be not so much "Additionally" as "For example".
Maybe just:
An empty path ("") refers to the toplevel directory of
the tracked tree.
> --- a/fast-import.c
> +++ b/fast-import.c
> @@ -1454,6 +1454,15 @@ static int tree_content_set(
> n = slash1 - p;
> else
> n = strlen(p);
> + if (!slash1 && !n) {
> + if (!S_ISDIR(mode))
> + die("Root cannot be a non-directory");
> + hashcpy(root->versions[1].sha1, sha1);
> + if (root->tree)
> + release_tree_content_recursive(root->tree);
> + root->tree = subtree;
> + return 1;
> + }
> if (!n)
> die("Empty path component found in input");
Background for the curious: tree_content_set() is a recursive function
to modify a tree-in-the-making by changing the entry at path p to
refer to some specified content with a given mode. The recursion
works as one might expect:
tree_content_set(root, "foo/bar/baz", ...) ->
tree_content_set(root:foo, "bar/baz", ...) ->
et c
The "if (!n)" check introduced in v1.5.1.3~11^2~1 (Don't allow empty
pathnames in fast-import, 2007-04-28) ensures fast-import doesn't
end up creating a subdirectory corresponding to an empty path
component in a pathname like "foo//bar/baz".
With this patch, an empty path component is allowed again, but only
as the last path component. It is used to modify directories. So,
for example,
tree_content_set(root, "foo/bar/", sha1, S_IFDIR)
becomes an almost-synonym for
tree_content_set(root, "foo/bar", sha1, S_IFDIR)
and
tree_content_set(root, "foo/bar/", sha1, S_IFREG | 0644)
is rejected.
Why do I say almost-synonym? Because as Ram pointed out, you are not
invalidating the parent tree hash, because there may not even _be_ a
parent tree.
In other words, with this patch, I worry that a
M 040000 ...sha1... "foo/bar/"
line would be sometimes ignored and sometimes not. Confusing.
Would it make sense to just handle the empty-path case in the callers
(file_change_m(), file_change_cr()) to avoid this?
next prev parent reply other threads:[~2010-10-11 6:37 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-07 10:55 [PATCH] fast-import: Allow filemodify to set the root David Barr
2010-10-07 13:58 ` Sverre Rabbelier
2010-10-07 20:28 ` Jonathan Nieder
2010-10-07 20:35 ` Sverre Rabbelier
2010-10-07 23:45 ` David Barr
2010-10-07 23:46 ` David Barr
2010-10-07 23:55 ` Sverre Rabbelier
2010-10-08 6:50 ` Johannes Sixt
2010-10-08 7:05 ` Jonathan Nieder
2010-10-08 7:23 ` Johannes Sixt
2010-10-08 8:00 ` Jonathan Nieder
2010-10-08 8:15 ` Ramkumar Ramachandra
2010-10-08 8:33 ` Gabriel Filion
2010-10-08 8:58 ` David Michael Barr
2010-10-08 16:34 ` Sverre Rabbelier
2010-10-08 17:09 ` Jonathan Nieder
2010-10-09 22:11 ` David Michael Barr
2010-10-09 22:12 ` Sverre Rabbelier
2010-10-10 3:30 ` David Barr
2010-10-11 6:34 ` Jonathan Nieder [this message]
2010-10-18 1:00 ` [PATCH 0/2] " Jonathan Nieder
2010-10-18 1:03 ` [PATCH 1/2] fast-import: filemodify after M 040000 <tree> "" crashes Jonathan Nieder
2010-10-18 1:13 ` Sverre Rabbelier
2010-10-18 1:44 ` Jonathan Nieder
2010-10-20 20:25 ` [PATCH] fast-import: do not clear notes in do_change_note_fanout() Jonathan Nieder
2010-10-18 1:08 ` [PATCH 2/2] fast-import: tighten M 040000 syntax Jonathan Nieder
2011-01-16 2:22 ` [PATCH] Documentation/fast-import: put explanation of M 040000 <dataref> "" in context Jonathan Nieder
2011-01-18 15:04 ` Junio C Hamano
2011-01-18 21:16 ` Jonathan Nieder
2011-01-18 21:43 ` Junio C Hamano
2011-01-18 22:02 ` Jonathan Nieder
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=20101011063429.GA32034@burratino \
--to=jrnieder@gmail.com \
--cc=artagnon@gmail.com \
--cc=david.barr@cordelta.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
--cc=lelutin@gmail.com \
--cc=srabbelier@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.