From: Matthias Lederhofer <matled@gmx.net>
To: Junio C Hamano <junkio@cox.net>, git@vger.kernel.org
Subject: [PATCH 5/5] git-init: set core.worktree when GIT_WORK_TREE is specified
Date: Sat, 17 Mar 2007 15:45:31 +0100 [thread overview]
Message-ID: <20070317144531.GE26290@moooo.ath.cx> (raw)
In-Reply-To: <20070317143452.GA21140@moooo.ath.cx>
git init will die with an error message before doing anything if the
value of GIT_WORK_TREE is no valid directory. GIT_WORK_TREE is also
expanded to an absolute path for the config file.
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
---
builtin-init-db.c | 31 ++++++++++++++++++++++++++++++-
t/t1501-worktree.sh | 15 +++++++++++++++
2 files changed, 45 insertions(+), 1 deletions(-)
diff --git a/builtin-init-db.c b/builtin-init-db.c
index 4df9fd0..4ea8c1f 100644
--- a/builtin-init-db.c
+++ b/builtin-init-db.c
@@ -182,6 +182,7 @@ static int create_default_files(const char *git_dir, const char *template_path)
char repo_version_string[10];
int reinit;
int filemode;
+ const char *git_work_tree = getenv(GIT_WORKING_TREE_ENVIRONMENT);
if (len > sizeof(path)-50)
die("insane git directory %s", git_dir);
@@ -252,7 +253,7 @@ static int create_default_files(const char *git_dir, const char *template_path)
}
git_config_set("core.filemode", filemode ? "true" : "false");
- if (is_bare_repository()) {
+ if (is_bare_repository() && !git_work_tree) {
git_config_set("core.bare", "true");
}
else {
@@ -260,6 +261,8 @@ static int create_default_files(const char *git_dir, const char *template_path)
/* allow template config file to override the default */
if (log_all_ref_updates == -1)
git_config_set("core.logallrefupdates", "true");
+ if (git_work_tree)
+ git_config_set("core.worktree", git_work_tree);
}
return reinit;
}
@@ -276,6 +279,7 @@ static const char init_db_usage[] =
int cmd_init_db(int argc, const char **argv, const char *prefix)
{
const char *git_dir;
+ const char *git_work_tree;
const char *sha1_dir;
const char *template_dir = NULL;
char *path;
@@ -294,6 +298,31 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
}
/*
+ * check value of $GIT_WORK_TREE
+ * if it is set it has to be a valid directory
+ */
+ git_work_tree = getenv(GIT_WORKING_TREE_ENVIRONMENT);
+ if (git_work_tree) {
+ char cwd[PATH_MAX];
+
+ if (!getcwd(cwd, sizeof(cwd)) || cwd[0] != '/')
+ die("Unable to read current working directory");
+ if (chdir(git_work_tree))
+ die("chdir to specified working tree '%s' failed",
+ git_work_tree);
+ /* get absolute path */
+ if (git_work_tree[0] != '/') {
+ char worktree[PATH_MAX];
+ if (!getcwd(worktree, sizeof(worktree)) ||
+ worktree[0] != '/')
+ die("Unable to read current working directory");
+ setenv(GIT_WORKING_TREE_ENVIRONMENT, worktree, 1);
+ }
+ if (chdir(cwd))
+ die("Cannot come back to cwd");
+ }
+
+ /*
* Set up the default .git directory contents
*/
git_dir = getenv(GIT_DIR_ENVIRONMENT);
diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh
index bc08994..4db4b6a 100755
--- a/t/t1501-worktree.sh
+++ b/t/t1501-worktree.sh
@@ -88,4 +88,19 @@ test_expect_success 'repository/worktree: --is-bare-repository' \
test_expect_success 'repository/worktree: --is-inside-git-dir' \
'test "false" = "$(git rev-parse --is-inside-git-dir)"'
+# git init
+cd "$top" || exit 1
+export GIT_DIR=$(pwd)/repository2
+test_expect_failure 'git --work-tree non-existent init' \
+ 'git --work-tree non-existent init'
+test_expect_success 'git --work-tree working/tree init' \
+ 'git --work-tree working/tree init'
+test_expect_success 'config knows core.worktree' \
+ 'git config core.worktree'
+git config --unset core.worktree || exit 1
+test_expect_success 'git --work-tree `pwd`/working init' \
+ 'git --work-tree "$(pwd)"/working init'
+test_expect_success 'config knows core.worktree' \
+ 'git config core.worktree'
+
test_done
--
1.5.0.4.414.g32da9
next prev parent reply other threads:[~2007-03-17 14:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-17 1:58 [PATCH] git-init: set core.workdir when GIT_WORK_DIR is specified Matthias Lederhofer
2007-03-17 7:29 ` Junio C Hamano
2007-03-17 11:01 ` Matthias Lederhofer
2007-03-17 14:34 ` Matthias Lederhofer
2007-03-17 14:42 ` [PATCH 1/5] rev-parse: --is-bare-repository option Matthias Lederhofer
2007-03-17 14:43 ` [PATCH 2/5] test git-rev-parse Matthias Lederhofer
2007-03-27 22:07 ` [PATCH(amend)] " Matthias Lederhofer
2007-03-17 14:44 ` [PATCH 3/5] introduce GIT_WORK_TREE environment variable Matthias Lederhofer
2007-03-18 19:43 ` Matthias Lederhofer
2007-03-18 20:12 ` Matthias Lederhofer
2007-03-18 20:23 ` Matthias Lederhofer
2007-03-18 20:28 ` Junio C Hamano
2007-03-17 14:44 ` [PATCH 4/5] test GIT_WORK_TREE Matthias Lederhofer
2007-03-17 14:45 ` Matthias Lederhofer [this message]
2007-03-18 8:47 ` [PATCH] git-init: set core.workdir when GIT_WORK_DIR is specified Junio C Hamano
2007-03-18 11:18 ` Matthias Lederhofer
2007-03-18 21:18 ` Matthias Lederhofer
[not found] ` <7vk5xensjn.fsf@assigned-by-dhcp.cox.net>
2007-03-19 14:24 ` Johannes Schindelin
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=20070317144531.GE26290@moooo.ath.cx \
--to=matled@gmx.net \
--cc=git@vger.kernel.org \
--cc=junkio@cox.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).