From: Sascha Cunz <Sascha-ML@babbelbox.org>
To: git@vger.kernel.org
Subject: [RFC/PATCH] Use work tree to determine if it supports symlinks
Date: Fri, 27 Jul 2012 23:39:41 +0200 [thread overview]
Message-ID: <17699041.7b2cBoDgE0@mephista> (raw)
>From 3f449e719b924929f1f8ca9b5eff83f17bc64c60 Mon Sep 17 00:00:00 2001
From: Sascha Cunz <Sascha@BabbelBox.org>
Date: Fri, 27 Jul 2012 22:54:56 +0200
Subject: [PATCH] Use work tree to determine if it supports symlinks
When creating a new repository, we check some capabilities of the
underlying file system(s). We check the file system for its case
sensitivity and the ability to create symbolic links.
Before this patch the .git-dir was used for this check, while the
comments in code clearly state to test on the work tree.
This patch teaches the tests for symbolic links and utf8 precomposion
to use the work tree instead of the .git directory.
Signed-off-by: Sascha Cunz <Sascha@BabbelBox.org>
---
builtin/init-db.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
In recent discussion[1] on libgit2, we found this little inconsistency
and it's not exactly clear, whether the git implementation or documentation
should be followed.
I left out to change the case-insensitive check. If you think, this patch
is useful at all (I actually have a hard time to find a real world use
case), i would reroll it with that change included. I think in this case,
the probe_utf8_pathname_composition might be refactored: We don't have a
file in the work tree yet => we must create one, test its accessibility
with a different name and finally unlink it. That's more or less what
probe_utf8_pathname_composition does.
SaCu
[1] https://github.com/libgit2/libgit2/pull/844#issuecomment-7311677
diff --git a/builtin/init-db.c b/builtin/init-db.c
index 244fb7f..2f988ad 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -273,6 +273,23 @@ static int create_default_files(const char *template_path)
}
if (!reinit) {
+ const char *work_tree = get_git_work_tree();
+
+ /* Check if the filesystem is case-insensitive */
+ path[len] = 0;
+ strcpy(path + len, "CoNfIg");
+ if (!access(path, F_OK))
+ git_config_set("core.ignorecase", "true");
+
+ /* Point 'path' to the work tree */
+ len = strlen(work_tree);
+ if (len > sizeof(path)-8)
+ die(_("insane working directory %s"), work_tree);
+
+ memcpy(path, work_tree, len);
+ if (len && path[len-1] != '/')
+ path[len++] = '/';
+
/* Check if symlink is supported in the work tree */
path[len] = 0;
strcpy(path + len, "tXXXXXX");
@@ -285,11 +302,6 @@ static int create_default_files(const char *template_path)
else
git_config_set("core.symlinks", "false");
- /* Check if the filesystem is case-insensitive */
- path[len] = 0;
- strcpy(path + len, "CoNfIg");
- if (!access(path, F_OK))
- git_config_set("core.ignorecase", "true");
probe_utf8_pathname_composition(path, len);
}
--
1.7.12.rc0.23.g3f449e7
next reply other threads:[~2012-07-27 21:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-27 21:39 Sascha Cunz [this message]
2012-07-27 21:55 ` [RFC/PATCH] Use work tree to determine if it supports symlinks Junio C Hamano
2012-07-27 22:40 ` Sascha Cunz
2012-07-27 22:58 ` Junio C Hamano
2012-07-27 23:51 ` Sascha Cunz
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=17699041.7b2cBoDgE0@mephista \
--to=sascha-ml@babbelbox.org \
--cc=git@vger.kernel.org \
/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).