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
List information: http://vger.kernel.org/majordomo-info.html
* 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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).