git-p4: honor --changesfile option and test
When an explicit list of changes is given, it makes no sense to use @all or @3,5 or any of the other p4 revision specifiers. Make the code notice when this happens, instead of just ignoring --changesfile. Test it. Signed-off-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1471c6b155
commit
58c8bc7c1a
@ -2024,6 +2024,17 @@ class P4Sync(Command, P4UserMap):
|
||||
revision = ""
|
||||
self.users = {}
|
||||
|
||||
# Make sure no revision specifiers are used when --changesfile
|
||||
# is specified.
|
||||
bad_changesfile = False
|
||||
if len(self.changesFile) > 0:
|
||||
for p in self.depotPaths:
|
||||
if p.find("@") >= 0 or p.find("#") >= 0:
|
||||
bad_changesfile = True
|
||||
break
|
||||
if bad_changesfile:
|
||||
die("Option --changesfile is incompatible with revision specifiers")
|
||||
|
||||
newPaths = []
|
||||
for p in self.depotPaths:
|
||||
if p.find("@") != -1:
|
||||
@ -2040,7 +2051,10 @@ class P4Sync(Command, P4UserMap):
|
||||
revision = p[hashIdx:]
|
||||
p = p[:hashIdx]
|
||||
elif self.previousDepotPaths == []:
|
||||
revision = "#head"
|
||||
# pay attention to changesfile, if given, else import
|
||||
# the entire p4 tree at the head revision
|
||||
if len(self.changesFile) == 0:
|
||||
revision = "#head"
|
||||
|
||||
p = re.sub ("\.\.\.$", "", p)
|
||||
if not p.endswith("/"):
|
||||
|
@ -38,6 +38,29 @@ test_expect_success 'clone --branch' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'clone --changesfile' '
|
||||
cf="$TRASH_DIRECTORY/cf" &&
|
||||
test_when_finished "rm \"$cf\"" &&
|
||||
printf "1\n3\n" >"$cf" &&
|
||||
"$GITP4" clone --changesfile="$cf" --dest="$git" //depot &&
|
||||
test_when_finished cleanup_git &&
|
||||
(
|
||||
cd "$git" &&
|
||||
git log --oneline p4/master >lines &&
|
||||
test_line_count = 2 lines
|
||||
test_path_is_file file1 &&
|
||||
test_path_is_missing file2 &&
|
||||
test_path_is_file file3
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'clone --changesfile, @all' '
|
||||
cf="$TRASH_DIRECTORY/cf" &&
|
||||
test_when_finished "rm \"$cf\"" &&
|
||||
printf "1\n3\n" >"$cf" &&
|
||||
test_must_fail "$GITP4" clone --changesfile="$cf" --dest="$git" //depot@all
|
||||
'
|
||||
|
||||
test_expect_success 'kill p4d' '
|
||||
kill_p4d
|
||||
'
|
||||
|
Loading…
Reference in New Issue
Block a user