chiark / gitweb /
Merge commit 'refs/top-bases/fixes/ensure-worktree' into fixes/ensure-worktree
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 5 Mar 2009 11:16:23 +0000 (12:16 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 5 Mar 2009 11:16:23 +0000 (12:16 +0100)
.topdeps [new file with mode: 0644]
.topmsg [new file with mode: 0644]
tg.sh

diff --git a/.topdeps b/.topdeps
new file mode 100644 (file)
index 0000000..0459513
--- /dev/null
+++ b/.topdeps
@@ -0,0 +1 @@
+upstream
diff --git a/.topmsg b/.topmsg
new file mode 100644 (file)
index 0000000..e0237b6
--- /dev/null
+++ b/.topmsg
@@ -0,0 +1,15 @@
+From: martin f. krafft <madduck@debian.org>
+Subject: [TopGit PATCH] Ensure we are inside a Git worktree
+
+Bert Wesarg suggests to check that we are not inside the .git directory before
+setting up topgit. Because git rev-parse --git-dir only works in the top .git
+dir, not deeper (i.e. inside .git/refs) and will always return "."
+
+This patch thus causes topgit to die early on when it's called from outside of
+a Git repository, or from underneath .git and outputs error messages
+accordingly.
+
+This temporarily makes it even more impossible to call tg --help, but I expect
+to have that fixed soon too.
+
+Signed-off-by: martin f. krafft <madduck@debian.org>
diff --git a/tg.sh b/tg.sh
index 3af2cd8bbbfa78b0f7826192cffab929b4b54586..5765ead8af6f73dbbebd00a9be7d6cd354c16aea 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -18,6 +18,20 @@ die()
        exit 1
 }
 
+# Make sure we are in the worktree, not under .git; die otherwise
+ensure_git_repo_or_die()
+{
+       local is_inside_repo is_inside_git_dir
+       is_inside_repo=1
+       is_inside_git_dir=$(git rev-parse --is-inside-git-dir 2>/dev/null) ||
+               is_inside_repo=0
+
+       case "$is_inside_repo/$is_inside_git_dir" in
+       0*) die "Cannot run outside of a Git repository.";;
+       1/true) die "Cannot run from inside \`.git\` hierarchy, please switch to work-tree.";;
+       esac
+}
+
 # cat_file "topic:file"
 # Like `git cat-file blob $1`, but topics '(i)' and '(w)' means index and worktree
 cat_file()
@@ -324,6 +338,8 @@ setup_pager()
 [ -d "@cmddir@" ] ||
        die "No command directory: '@cmddir@'"
 
+ensure_git_repo_or_die
+
 ## Initial setup
 
 set -e