Skip to content

Commit

Permalink
git-p4: set useClientSpec variable on initial clone
Browse files Browse the repository at this point in the history
If --use-client-spec was given, set the matching configuration
variable.  This is necessary to ensure that future submits
work properly.

The alternatives of requiring the user to set it, or providing
a command-line option on every submit, are error prone.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Pete Wyckoff authored and Junio C Hamano committed Feb 27, 2012
1 parent 07f050c commit a93d33e
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 4 deletions.
10 changes: 7 additions & 3 deletions Documentation/git-p4.txt
Original file line number Diff line number Diff line change
Expand Up @@ -303,9 +303,13 @@ CLIENT SPEC
-----------
The p4 client specification is maintained with the 'p4 client' command
and contains among other fields, a View that specifies how the depot
is mapped into the client repository. Git-p4 can consult the client
spec when given the '--use-client-spec' option or useClientSpec
variable.
is mapped into the client repository. The 'clone' and 'sync' commands
can consult the client spec when given the '--use-client-spec' option or
when the useClientSpec variable is true. After 'git p4 clone', the
useClientSpec variable is automatically set in the repository
configuration file. This allows future 'git p4 submit' commands to
work properly; the submit command looks only at the variable and does
not have a command-line option.

The full syntax for a p4 view is documented in 'p4 help views'. Git-p4
knows only a subset of the view syntax. It understands multi-line
Expand Down
11 changes: 10 additions & 1 deletion contrib/fast-import/git-p4
Original file line number Diff line number Diff line change
Expand Up @@ -1428,6 +1428,7 @@ class P4Sync(Command, P4UserMap):
self.p4BranchesInGit = []
self.cloneExclude = []
self.useClientSpec = False
self.useClientSpec_from_options = False
self.clientSpecDirs = None

if gitConfig("git-p4.syncFromOrigin") == "false":
Expand Down Expand Up @@ -2136,7 +2137,11 @@ class P4Sync(Command, P4UserMap):
if not gitBranchExists(self.refPrefix + "HEAD") and self.importIntoRemotes and gitBranchExists(self.branch):
system("git symbolic-ref %sHEAD %s" % (self.refPrefix, self.branch))

if not self.useClientSpec:
# accept either the command-line option, or the configuration variable
if self.useClientSpec:
# will use this after clone to set the variable
self.useClientSpec_from_options = True
else:
if gitConfig("git-p4.useclientspec", "--bool") == "true":
self.useClientSpec = True
if self.useClientSpec:
Expand Down Expand Up @@ -2455,6 +2460,10 @@ class P4Clone(P4Sync):
else:
print "Could not detect main branch. No checkout/master branch created."

# auto-set this variable if invoked with --use-client-spec
if self.useClientSpec_from_options:
system("git config --bool git-p4.useclientspec true")

return True

class P4Branches(Command):
Expand Down
17 changes: 17 additions & 0 deletions t/t9809-git-p4-client-view.sh
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,23 @@ test_expect_success 'quotes on rhs only' '
git_verify "cdir 1/file11" "cdir 1/file12"
'

#
# Submit tests
#

# clone sets variable
test_expect_success 'clone --use-client-spec sets useClientSpec' '
client_view "//depot/... //client/..." &&
test_when_finished cleanup_git &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
(
cd "$git" &&
git config --bool git-p4.useClientSpec >actual &&
echo true >true &&
test_cmp actual true
)
'

#
# Rename directories to test quoting in depot-side mappings
# //depot
Expand Down

0 comments on commit a93d33e

Please sign in to comment.