diff options
author | Gary Gibbons <ggibbons@perforce.com> | 2012-01-02 18:05:52 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-01-03 14:10:03 -0800 |
commit | e3e68643b5c2adec097ba26230e0fcb641febacb (patch) | |
tree | c4cb11e7afc2861f99c586304b9502cdb21f5920 | |
parent | df5ed9077f18985a73f00fe2bacc2961598f73dc (diff) | |
download | git-e3e68643b5c2adec097ba26230e0fcb641febacb.tar.gz |
git-p4: support single file p4 client view maps
Perforce client views can map individual files,
mapping one //depot file path to one //client file path.
These mappings contain no meta/masking characters.
This patch add support for these file maps to
the currently supported '...' view mappings.
[pw: one test now suceeds]
Signed-off-by: Gary Gibbons <ggibbons@perforce.com>
Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | contrib/fast-import/git-p4 | 29 | ||||
-rwxr-xr-x | t/t9809-git-p4-client-view.sh | 2 |
2 files changed, 21 insertions, 10 deletions
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4 index 2fd4d3b2a6..8f28e0a6fb 100755 --- a/contrib/fast-import/git-p4 +++ b/contrib/fast-import/git-p4 @@ -1217,6 +1217,7 @@ class P4Sync(Command, P4UserMap): self.cloneExclude = [] self.useClientSpec = False self.clientSpecDirs = [] + self.haveSingleFileClientViews = False if gitConfig("git-p4.syncFromOrigin") == "false": self.syncWithOrigin = False @@ -1274,6 +1275,16 @@ class P4Sync(Command, P4UserMap): # will end up putting all foo/branch files into # branch/foo/ for val in self.clientSpecDirs: + if self.haveSingleFileClientViews and len(path) == abs(val[1][0]) and path == val[0]: + # since 'path' is a depot file path, if it matches the LeftMap, + # then the View is a single file mapping, so use the entire rightMap + # first two tests above avoid the last == test for common cases + path = val[1][1] + # now strip out the client (//client/...) + path = re.sub("^(//[^/]+/)", '', path) + # the rest is local client path + return path + if path.startswith(val[0]): # replace the depot path with the client path path = path.replace(val[0], val[1][1]) @@ -1905,19 +1916,19 @@ class P4Sync(Command, P4UserMap): # save the "client view"; i.e the RHS of the view # line that tells the client where to put the # files for this view. - cv = v[index+3:].strip() # +3 to remove previous '...' - # if the client view doesn't end with a - # ... wildcard, then we're going to mess up the - # output directory, so fail gracefully. - if not cv.endswith('...'): - print 'Sorry, client view in "%s" needs to end with wildcard' % (k) - sys.exit(1) - cv=cv[:-3] + # check for individual file mappings - those which have no '...' + if index < 0 : + v,cv = v.strip().split() + v = v[start:] + self.haveSingleFileClientViews = True + else: + cv = v[index+3:].strip() # +3 to remove previous '...' + cv=cv[:-3] + v = v[start:index] # now save the view; +index means included, -index # means it should be filtered out. - v = v[start:index] if v.startswith("-"): v = v[1:] include = -len(v) diff --git a/t/t9809-git-p4-client-view.sh b/t/t9809-git-p4-client-view.sh index 06652cbf4f..1cc83c56c0 100755 --- a/t/t9809-git-p4-client-view.sh +++ b/t/t9809-git-p4-client-view.sh @@ -191,7 +191,7 @@ test_expect_success 'exclusion wildcard, client rhs different (normal)' ' git_verify $files ' -test_expect_failure 'exclusion single file' ' +test_expect_success 'exclusion single file' ' client_view "//depot/... //client/..." \ "-//depot/dir2/file22 //client/file22" && files="dir1/file11 dir1/file12 dir2/file21" && |