From: Luke Diamand <luke@diamand.org>
To: git@vger.kernel.org
Cc: viniciusalexandre@gmail.com,
Lars Schneider <larsxschneider@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Luke Diamand <luke@diamand.org>
Subject: [PATCHv2] git-p4: support git worktrees
Date: Sat, 10 Dec 2016 21:57:34 +0000 [thread overview]
Message-ID: <20161210215734.7468-2-luke@diamand.org> (raw)
In-Reply-To: <20161210215734.7468-1-luke@diamand.org>
git-p4 would attempt to find the git directory using
its own specific code, which did not know about git
worktrees. This caused git operations to fail needlessly.
Rework it to use "git rev-parse --git-dir" instead, which
knows about worktrees.
Signed-off-by: Luke Diamand <luke@diamand.org>
---
git-p4.py | 47 ++++++++++++++++++++++++++---------------------
t/t9800-git-p4-basic.sh | 20 ++++++++++++++++++++
2 files changed, 46 insertions(+), 21 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index fd5ca52..6aa8957 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -49,6 +49,13 @@ defaultLabelRegexp = r'[a-zA-Z0-9_\-.]+$'
# Grab changes in blocks of this many revisions, unless otherwise requested
defaultBlockSize = 512
+def gitdir():
+ d = read_pipe("git rev-parse --git-dir").strip()
+ if not d or len(d) == 0:
+ return None
+ else:
+ return d
+
def p4_build_cmd(cmd):
"""Build a suitable p4 command line.
@@ -562,12 +569,6 @@ def currentGitBranch():
else:
return read_pipe(["git", "name-rev", "HEAD"]).split(" ")[1].strip()
-def isValidGitDir(path):
- if (os.path.exists(path + "/HEAD")
- and os.path.exists(path + "/refs") and os.path.exists(path + "/objects")):
- return True;
- return False
-
def parseRevision(ref):
return read_pipe("git rev-parse %s" % ref).strip()
@@ -3462,7 +3463,7 @@ class P4Sync(Command, P4UserMap):
if self.tempBranches != []:
for branch in self.tempBranches:
read_pipe("git update-ref -d %s" % branch)
- os.rmdir(os.path.join(os.environ.get("GIT_DIR", ".git"), self.tempBranchLocation))
+ os.rmdir(os.path.join(gitdir(), self.tempBranchLocation))
# Create a symbolic ref p4/HEAD pointing to p4/<branch> to allow
# a convenient shortcut refname "p4".
@@ -3678,23 +3679,27 @@ def main():
(cmd, args) = parser.parse_args(sys.argv[2:], cmd);
global verbose
verbose = cmd.verbose
+
if cmd.needsGit:
- if cmd.gitdir == None:
- cmd.gitdir = os.path.abspath(".git")
- if not isValidGitDir(cmd.gitdir):
- cmd.gitdir = read_pipe("git rev-parse --git-dir").strip()
- if os.path.exists(cmd.gitdir):
- cdup = read_pipe("git rev-parse --show-cdup").strip()
- if len(cdup) > 0:
- chdir(cdup);
-
- if not isValidGitDir(cmd.gitdir):
- if isValidGitDir(cmd.gitdir + "/.git"):
- cmd.gitdir += "/.git"
- else:
+ if cmd.gitdir:
+ os.environ["GIT_DIR"] = cmd.gitdir
+
+ # did we get a valid git dir on the command line or via $GIT_DIR?
+ if not gitdir():
die("fatal: cannot locate git repository at %s" % cmd.gitdir)
- os.environ["GIT_DIR"] = cmd.gitdir
+ else:
+ # already in a git directory?
+ if not gitdir():
+ die("fatal: not in a valid git repository")
+
+ cdup = read_pipe("git rev-parse --show-cdup").strip()
+ if len(cdup) > 0:
+ chdir(cdup);
+
+ # ensure subshells spawned in the p4 repo directory
+ # get the correct GIT_DIR
+ os.environ["GIT_DIR"] = os.path.abspath(gitdir())
if not cmd.run(args):
parser.print_help()
diff --git a/t/t9800-git-p4-basic.sh b/t/t9800-git-p4-basic.sh
index 0730f18..093e9bd 100755
--- a/t/t9800-git-p4-basic.sh
+++ b/t/t9800-git-p4-basic.sh
@@ -257,6 +257,26 @@ test_expect_success 'submit from detached head' '
)
'
+test_expect_success 'submit from worktree' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ git worktree add ../worktree-test
+ ) &&
+ (
+ cd "$git/../worktree-test" &&
+ test_commit "worktree-commit" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit
+ ) &&
+ (
+ cd "$cli" &&
+ p4 sync &&
+ test_path_is_file worktree-commit.t
+ )
+'
+
test_expect_success 'kill p4d' '
kill_p4d
'
--
2.8.2.703.g78b384c.dirty
next prev parent reply other threads:[~2016-12-10 21:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-10 21:57 [PATCHv2] git-p4 worktree support Luke Diamand
2016-12-10 21:57 ` Luke Diamand [this message]
2016-12-11 7:19 ` [PATCHv2] git-p4: support git worktrees Luke Diamand
2016-12-13 11:17 ` Duy Nguyen
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=20161210215734.7468-2-luke@diamand.org \
--to=luke@diamand.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=larsxschneider@gmail.com \
--cc=viniciusalexandre@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 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).