From: Pete Wyckoff <pw@padd.com>
To: git@vger.kernel.org
Cc: Matthew Korich <matthew@korich.net>
Subject: [PATCH 5/5] git p4: make branch detection work with --use-client-spec
Date: Sat, 11 Aug 2012 12:55:04 -0400 [thread overview]
Message-ID: <1344704104-17727-5-git-send-email-pw@padd.com> (raw)
In-Reply-To: <20120811165143.GA2004@padd.com>
The bug report in http://stackoverflow.com/questions/11893688
observes that files are mapped into the wrong locations in
git when both --use-client-spec and --branch-detection are enabled.
Fix this by changing the relative path prefix to match discovered
branches when using a client spec.
The problem was likely introduced with ecb7cf9 (git-p4: rewrite view
handling, 2012-01-02).
Signed-off-by: Pete Wyckoff <pw@padd.com>
---
git-p4.py | 37 +++++++++++++++++++++++++++++++------
t/t9801-git-p4-branch.sh | 2 +-
2 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index e20ff5d..aed1a2d 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1818,21 +1818,41 @@ class P4Sync(Command, P4UserMap):
return files
def stripRepoPath(self, path, prefixes):
+ """When streaming files, this is called to map a p4 depot path
+ to where it should go in git. The prefixes are either
+ self.depotPaths, or self.branchPrefixes in the case of
+ branch detection."""
+
if self.useClientSpec:
+ # branch detection moves files up a level (the branch name)
+ # from what client spec interpretation gives
path = self.clientSpecDirs.map_in_client(path)
+ if self.detectBranches:
+ for b in self.knownBranches:
+ if path.startswith(b + "/"):
+ path = path[len(b)+1:]
+
+ elif self.keepRepoPath:
+ # Preserve everything in relative path name except leading
+ # //depot/; just look at first prefix as they all should
+ # be in the same depot.
+ depot = re.sub("^(//[^/]+/).*", r'\1', prefixes[0])
+ if p4PathStartsWith(path, depot):
+ path = path[len(depot):]
else:
- if self.keepRepoPath:
- prefixes = [re.sub("^(//[^/]+/).*", r'\1', prefixes[0])]
-
for p in prefixes:
if p4PathStartsWith(path, p):
path = path[len(p):]
+ break
path = wildcard_decode(path)
return path
def splitFilesIntoBranches(self, commit):
+ """Look at each depotFile in the commit to figure out to what
+ branch it belongs."""
+
branches = {}
fnum = 0
while commit.has_key("depotFile%s" % fnum):
@@ -1850,11 +1870,16 @@ class P4Sync(Command, P4UserMap):
file["type"] = commit["type%s" % fnum]
fnum = fnum + 1
- relPath = self.stripRepoPath(path, self.depotPaths)
+ # start with the full relative path where this file would
+ # go in a p4 client
+ if self.useClientSpec:
+ relPath = self.clientSpecDirs.map_in_client(path)
+ else:
+ relPath = self.stripRepoPath(path, self.depotPaths)
for branch in self.knownBranches.keys():
-
- # add a trailing slash so that a commit into qt/4.2foo doesn't end up in qt/4.2
+ # add a trailing slash so that a commit into qt/4.2foo
+ # doesn't end up in qt/4.2, e.g.
if relPath.startswith(branch + "/"):
if branch not in branches:
branches[branch] = []
diff --git a/t/t9801-git-p4-branch.sh b/t/t9801-git-p4-branch.sh
index ca3a7f9..c5f0977 100755
--- a/t/t9801-git-p4-branch.sh
+++ b/t/t9801-git-p4-branch.sh
@@ -438,7 +438,7 @@ test_expect_success 'use-client-spec detect-branches setup' '
)
'
-test_expect_failure 'use-client-spec detect-branches files in top-level' '
+test_expect_success 'use-client-spec detect-branches files in top-level' '
test_when_finished cleanup_git &&
test_create_repo "$git" &&
(
--
1.7.12.rc2.24.gc304662
next prev parent reply other threads:[~2012-08-11 16:56 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-10 19:14 git-p4 migrates perforce “main” branch into git branches as subdirectories (doubled code in git branches) Matthew Korich
2012-08-11 16:51 ` [PATCH 0/5] git p4: fix branch detection with --use-client-spec Pete Wyckoff
2012-08-11 16:55 ` [PATCH 1/5] git p4 test: move client_view() function to library Pete Wyckoff
2012-08-11 16:55 ` [PATCH 2/5] git p4 test: add broken --use-client-spec --detect-branches tests Pete Wyckoff
2012-08-11 16:55 ` [PATCH 3/5] git p4: set self.branchPrefixes in initialization Pete Wyckoff
2012-08-11 16:55 ` [PATCH 4/5] git p4: do wildcard decoding in stripRepoPath Pete Wyckoff
2012-08-11 16:55 ` Pete Wyckoff [this message]
2012-08-12 4:41 ` [PATCH 0/5] git p4: fix branch detection with --use-client-spec Junio C Hamano
2012-08-12 14:04 ` Pete Wyckoff
2012-08-12 19:30 ` Junio C Hamano
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=1344704104-17727-5-git-send-email-pw@padd.com \
--to=pw@padd.com \
--cc=git@vger.kernel.org \
--cc=matthew@korich.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).