summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/git-p4.txt5
-rwxr-xr-xcontrib/fast-import/git-p46
-rwxr-xr-xt/t9806-git-p4-options.sh46
3 files changed, 55 insertions, 2 deletions
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
index 9930829139..9a7cdea0f1 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.txt
@@ -232,7 +232,10 @@ git repository:
Use a client spec to find the list of interesting files in p4.
The client spec is discovered using 'p4 client -o' which checks
the 'P4CLIENT' environment variable and returns a mapping of
- depot files to workspace files.
+ depot files to workspace files. Note that a depot path is
+ still required, but files found in the path that match in
+ the client spec view will be laid out according to the client
+ spec.
Clone options
~~~~~~~~~~~~~
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index d0a9b0d877..5420bf1368 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -1951,7 +1951,10 @@ 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 self.useClientSpec or gitConfig("git-p4.useclientspec") == "true":
+ if not self.useClientSpec:
+ if gitConfig("git-p4.useclientspec", "--bool") == "true":
+ self.useClientSpec = True
+ if self.useClientSpec:
self.getClientSpec()
# TODO: should always look at previous commits,
@@ -2380,6 +2383,7 @@ def main():
if not cmd.run(args):
parser.print_help()
+ sys.exit(2)
if __name__ == '__main__':
diff --git a/t/t9806-git-p4-options.sh b/t/t9806-git-p4-options.sh
index 6b288acbd7..1f1952a657 100755
--- a/t/t9806-git-p4-options.sh
+++ b/t/t9806-git-p4-options.sh
@@ -117,6 +117,52 @@ test_expect_success 'clone --keep-path' '
)
'
+# clone --use-client-spec must still specify a depot path
+# if given, it should rearrange files according to client spec
+# when it has view lines that match the depot path
+# XXX: should clone/sync just use the client spec exactly, rather
+# than needing depot paths?
+test_expect_success 'clone --use-client-spec' '
+ (
+ # big usage message
+ exec >/dev/null &&
+ test_must_fail "$GITP4" clone --dest="$git" --use-client-spec
+ ) &&
+ cli2="$TRASH_DIRECTORY/cli2" &&
+ mkdir -p "$cli2" &&
+ test_when_finished "rmdir \"$cli2\"" &&
+ (
+ cd "$cli2" &&
+ p4 client -i <<-EOF
+ Client: client2
+ Description: client2
+ Root: $cli2
+ View: //depot/sub/... //client2/bus/...
+ EOF
+ ) &&
+ P4CLIENT=client2 &&
+ test_when_finished cleanup_git &&
+ "$GITP4" clone --dest="$git" --use-client-spec //depot/... &&
+ (
+ cd "$git" &&
+ test_path_is_file bus/dir/f4 &&
+ test_path_is_file file1
+ ) &&
+ cleanup_git &&
+
+ # same thing again, this time with variable instead of option
+ mkdir "$git" &&
+ (
+ cd "$git" &&
+ git init &&
+ git config git-p4.useClientSpec true &&
+ "$GITP4" sync //depot/... &&
+ git checkout -b master p4/master &&
+ test_path_is_file bus/dir/f4 &&
+ test_path_is_file file1
+ )
+'
+
test_expect_success 'kill p4d' '
kill_p4d
'