Merge branch 'pw/git-p4-on-cygwin'
Improve "git p4" on Cygwin. * pw/git-p4-on-cygwin: (21 commits) git p4: introduce gitConfigBool git p4: avoid shell when calling git config git p4: avoid shell when invoking git config --get-all git p4: avoid shell when invoking git rev-list git p4: avoid shell when mapping users git p4: disable read-only attribute before deleting git p4 test: use test_chmod for cygwin git p4: cygwin p4 client does not mark read-only git p4 test: avoid wildcard * in windows git p4 test: use LineEnd unix in windows tests too git p4 test: newline handling git p4: scrub crlf for utf16 files on windows git p4: remove unreachable windows \r\n conversion code git p4 test: translate windows paths for cygwin git p4 test: start p4d inside its db dir git p4 test: use client_view in t9806 git p4 test: avoid loop in client_view git p4 test: use client_view to build the initial client git p4: generate better error message for bad depot path git p4: remove unused imports ...
This commit is contained in:
commit
9aea11dbc1
119
git-p4.py
119
git-p4.py
@ -7,16 +7,21 @@
|
|||||||
# 2007 Trolltech ASA
|
# 2007 Trolltech ASA
|
||||||
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
|
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
|
||||||
#
|
#
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
if sys.hexversion < 0x02040000:
|
if sys.hexversion < 0x02040000:
|
||||||
# The limiter is the subprocess module
|
# The limiter is the subprocess module
|
||||||
sys.stderr.write("git-p4: requires Python 2.4 or later.\n")
|
sys.stderr.write("git-p4: requires Python 2.4 or later.\n")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
import os
|
||||||
import optparse, os, marshal, subprocess, shelve
|
import optparse
|
||||||
import tempfile, getopt, os.path, time, platform
|
import marshal
|
||||||
import re, shutil
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
import time
|
||||||
|
import platform
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import stat
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from subprocess import CalledProcessError
|
from subprocess import CalledProcessError
|
||||||
@ -185,6 +190,22 @@ def p4_system(cmd):
|
|||||||
if retcode:
|
if retcode:
|
||||||
raise CalledProcessError(retcode, real_cmd)
|
raise CalledProcessError(retcode, real_cmd)
|
||||||
|
|
||||||
|
_p4_version_string = None
|
||||||
|
def p4_version_string():
|
||||||
|
"""Read the version string, showing just the last line, which
|
||||||
|
hopefully is the interesting version bit.
|
||||||
|
|
||||||
|
$ p4 -V
|
||||||
|
Perforce - The Fast Software Configuration Management System.
|
||||||
|
Copyright 1995-2011 Perforce Software. All rights reserved.
|
||||||
|
Rev. P4/NTX86/2011.1/393975 (2011/12/16).
|
||||||
|
"""
|
||||||
|
global _p4_version_string
|
||||||
|
if not _p4_version_string:
|
||||||
|
a = p4_read_pipe_lines(["-V"])
|
||||||
|
_p4_version_string = a[-1].rstrip()
|
||||||
|
return _p4_version_string
|
||||||
|
|
||||||
def p4_integrate(src, dest):
|
def p4_integrate(src, dest):
|
||||||
p4_system(["integrate", "-Dt", wildcard_encode(src), wildcard_encode(dest)])
|
p4_system(["integrate", "-Dt", wildcard_encode(src), wildcard_encode(dest)])
|
||||||
|
|
||||||
@ -558,18 +579,30 @@ def gitBranchExists(branch):
|
|||||||
return proc.wait() == 0;
|
return proc.wait() == 0;
|
||||||
|
|
||||||
_gitConfig = {}
|
_gitConfig = {}
|
||||||
def gitConfig(key, args = None): # set args to "--bool", for instance
|
|
||||||
|
def gitConfig(key):
|
||||||
if not _gitConfig.has_key(key):
|
if not _gitConfig.has_key(key):
|
||||||
argsFilter = ""
|
cmd = [ "git", "config", key ]
|
||||||
if args != None:
|
s = read_pipe(cmd, ignore_error=True)
|
||||||
argsFilter = "%s " % args
|
_gitConfig[key] = s.strip()
|
||||||
cmd = "git config %s%s" % (argsFilter, key)
|
return _gitConfig[key]
|
||||||
_gitConfig[key] = read_pipe(cmd, ignore_error=True).strip()
|
|
||||||
|
def gitConfigBool(key):
|
||||||
|
"""Return a bool, using git config --bool. It is True only if the
|
||||||
|
variable is set to true, and False if set to false or not present
|
||||||
|
in the config."""
|
||||||
|
|
||||||
|
if not _gitConfig.has_key(key):
|
||||||
|
cmd = [ "git", "config", "--bool", key ]
|
||||||
|
s = read_pipe(cmd, ignore_error=True)
|
||||||
|
v = s.strip()
|
||||||
|
_gitConfig[key] = v == "true"
|
||||||
return _gitConfig[key]
|
return _gitConfig[key]
|
||||||
|
|
||||||
def gitConfigList(key):
|
def gitConfigList(key):
|
||||||
if not _gitConfig.has_key(key):
|
if not _gitConfig.has_key(key):
|
||||||
_gitConfig[key] = read_pipe("git config --get-all %s" % key, ignore_error=True).strip().split(os.linesep)
|
s = read_pipe(["git", "config", "--get-all", key], ignore_error=True)
|
||||||
|
_gitConfig[key] = s.strip().split(os.linesep)
|
||||||
return _gitConfig[key]
|
return _gitConfig[key]
|
||||||
|
|
||||||
def p4BranchesInGit(branchesAreInRemotes=True):
|
def p4BranchesInGit(branchesAreInRemotes=True):
|
||||||
@ -716,8 +749,7 @@ def p4PathStartsWith(path, prefix):
|
|||||||
#
|
#
|
||||||
# we may or may not have a problem. If you have core.ignorecase=true,
|
# we may or may not have a problem. If you have core.ignorecase=true,
|
||||||
# we treat DirA and dira as the same directory
|
# we treat DirA and dira as the same directory
|
||||||
ignorecase = gitConfig("core.ignorecase", "--bool") == "true"
|
if gitConfigBool("core.ignorecase"):
|
||||||
if ignorecase:
|
|
||||||
return path.lower().startswith(prefix.lower())
|
return path.lower().startswith(prefix.lower())
|
||||||
return path.startswith(prefix)
|
return path.startswith(prefix)
|
||||||
|
|
||||||
@ -954,7 +986,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
self.usage += " [name of git branch to submit into perforce depot]"
|
self.usage += " [name of git branch to submit into perforce depot]"
|
||||||
self.origin = ""
|
self.origin = ""
|
||||||
self.detectRenames = False
|
self.detectRenames = False
|
||||||
self.preserveUser = gitConfig("git-p4.preserveUser").lower() == "true"
|
self.preserveUser = gitConfigBool("git-p4.preserveUser")
|
||||||
self.dry_run = False
|
self.dry_run = False
|
||||||
self.prepare_p4_only = False
|
self.prepare_p4_only = False
|
||||||
self.conflict_behavior = None
|
self.conflict_behavior = None
|
||||||
@ -1049,7 +1081,8 @@ class P4Submit(Command, P4UserMap):
|
|||||||
def p4UserForCommit(self,id):
|
def p4UserForCommit(self,id):
|
||||||
# Return the tuple (perforce user,git email) for a given git commit id
|
# Return the tuple (perforce user,git email) for a given git commit id
|
||||||
self.getUserMapFromPerforceServer()
|
self.getUserMapFromPerforceServer()
|
||||||
gitEmail = read_pipe("git log --max-count=1 --format='%%ae' %s" % id)
|
gitEmail = read_pipe(["git", "log", "--max-count=1",
|
||||||
|
"--format=%ae", id])
|
||||||
gitEmail = gitEmail.strip()
|
gitEmail = gitEmail.strip()
|
||||||
if not self.emails.has_key(gitEmail):
|
if not self.emails.has_key(gitEmail):
|
||||||
return (None,gitEmail)
|
return (None,gitEmail)
|
||||||
@ -1062,7 +1095,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
(user,email) = self.p4UserForCommit(id)
|
(user,email) = self.p4UserForCommit(id)
|
||||||
if not user:
|
if not user:
|
||||||
msg = "Cannot find p4 user for email %s in commit %s." % (email, id)
|
msg = "Cannot find p4 user for email %s in commit %s." % (email, id)
|
||||||
if gitConfig('git-p4.allowMissingP4Users').lower() == "true":
|
if gitConfigBool("git-p4.allowMissingP4Users"):
|
||||||
print "%s" % msg
|
print "%s" % msg
|
||||||
else:
|
else:
|
||||||
die("Error: %s\nSet git-p4.allowMissingP4Users to true to allow this." % msg)
|
die("Error: %s\nSet git-p4.allowMissingP4Users to true to allow this." % msg)
|
||||||
@ -1157,7 +1190,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
message. Return true if okay to continue with the submit."""
|
message. Return true if okay to continue with the submit."""
|
||||||
|
|
||||||
# if configured to skip the editing part, just submit
|
# if configured to skip the editing part, just submit
|
||||||
if gitConfig("git-p4.skipSubmitEdit") == "true":
|
if gitConfigBool("git-p4.skipSubmitEdit"):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# look at the modification time, to check later if the user saved
|
# look at the modification time, to check later if the user saved
|
||||||
@ -1173,7 +1206,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
|
|
||||||
# If the file was not saved, prompt to see if this patch should
|
# If the file was not saved, prompt to see if this patch should
|
||||||
# be skipped. But skip this verification step if configured so.
|
# be skipped. But skip this verification step if configured so.
|
||||||
if gitConfig("git-p4.skipSubmitEditCheck") == "true":
|
if gitConfigBool("git-p4.skipSubmitEditCheck"):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# modification time updated means user saved the file
|
# modification time updated means user saved the file
|
||||||
@ -1231,6 +1264,9 @@ class P4Submit(Command, P4UserMap):
|
|||||||
p4_edit(dest)
|
p4_edit(dest)
|
||||||
pureRenameCopy.discard(dest)
|
pureRenameCopy.discard(dest)
|
||||||
filesToChangeExecBit[dest] = diff['dst_mode']
|
filesToChangeExecBit[dest] = diff['dst_mode']
|
||||||
|
if self.isWindows:
|
||||||
|
# turn off read-only attribute
|
||||||
|
os.chmod(dest, stat.S_IWRITE)
|
||||||
os.unlink(dest)
|
os.unlink(dest)
|
||||||
editedFiles.add(dest)
|
editedFiles.add(dest)
|
||||||
elif modifier == "R":
|
elif modifier == "R":
|
||||||
@ -1249,6 +1285,8 @@ class P4Submit(Command, P4UserMap):
|
|||||||
p4_edit(dest) # with move: already open, writable
|
p4_edit(dest) # with move: already open, writable
|
||||||
filesToChangeExecBit[dest] = diff['dst_mode']
|
filesToChangeExecBit[dest] = diff['dst_mode']
|
||||||
if not self.p4HasMoveCommand:
|
if not self.p4HasMoveCommand:
|
||||||
|
if self.isWindows:
|
||||||
|
os.chmod(dest, stat.S_IWRITE)
|
||||||
os.unlink(dest)
|
os.unlink(dest)
|
||||||
filesToDelete.add(src)
|
filesToDelete.add(src)
|
||||||
editedFiles.add(dest)
|
editedFiles.add(dest)
|
||||||
@ -1268,7 +1306,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
|
|
||||||
# Patch failed, maybe it's just RCS keyword woes. Look through
|
# Patch failed, maybe it's just RCS keyword woes. Look through
|
||||||
# the patch to see if that's possible.
|
# the patch to see if that's possible.
|
||||||
if gitConfig("git-p4.attemptRCSCleanup","--bool") == "true":
|
if gitConfigBool("git-p4.attemptRCSCleanup"):
|
||||||
file = None
|
file = None
|
||||||
pattern = None
|
pattern = None
|
||||||
kwfiles = {}
|
kwfiles = {}
|
||||||
@ -1289,6 +1327,10 @@ class P4Submit(Command, P4UserMap):
|
|||||||
for file in kwfiles:
|
for file in kwfiles:
|
||||||
if verbose:
|
if verbose:
|
||||||
print "zapping %s with %s" % (line,pattern)
|
print "zapping %s with %s" % (line,pattern)
|
||||||
|
# File is being deleted, so not open in p4. Must
|
||||||
|
# disable the read-only bit on windows.
|
||||||
|
if self.isWindows and file not in editedFiles:
|
||||||
|
os.chmod(file, stat.S_IWRITE)
|
||||||
self.patchRCSKeywords(file, kwfiles[file])
|
self.patchRCSKeywords(file, kwfiles[file])
|
||||||
fixed_rcs_keywords = True
|
fixed_rcs_keywords = True
|
||||||
|
|
||||||
@ -1559,7 +1601,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
sys.exit(128)
|
sys.exit(128)
|
||||||
|
|
||||||
self.useClientSpec = False
|
self.useClientSpec = False
|
||||||
if gitConfig("git-p4.useclientspec", "--bool") == "true":
|
if gitConfigBool("git-p4.useclientspec"):
|
||||||
self.useClientSpec = True
|
self.useClientSpec = True
|
||||||
if self.useClientSpec:
|
if self.useClientSpec:
|
||||||
self.clientSpecDirs = getClientSpec()
|
self.clientSpecDirs = getClientSpec()
|
||||||
@ -1595,11 +1637,11 @@ class P4Submit(Command, P4UserMap):
|
|||||||
self.check()
|
self.check()
|
||||||
|
|
||||||
commits = []
|
commits = []
|
||||||
for line in read_pipe_lines("git rev-list --no-merges %s..%s" % (self.origin, self.master)):
|
for line in read_pipe_lines(["git", "rev-list", "--no-merges", "%s..%s" % (self.origin, self.master)]):
|
||||||
commits.append(line.strip())
|
commits.append(line.strip())
|
||||||
commits.reverse()
|
commits.reverse()
|
||||||
|
|
||||||
if self.preserveUser or (gitConfig("git-p4.skipUserNameCheck") == "true"):
|
if self.preserveUser or gitConfigBool("git-p4.skipUserNameCheck"):
|
||||||
self.checkAuthorship = False
|
self.checkAuthorship = False
|
||||||
else:
|
else:
|
||||||
self.checkAuthorship = True
|
self.checkAuthorship = True
|
||||||
@ -1635,7 +1677,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
else:
|
else:
|
||||||
self.diffOpts += " -C%s" % detectCopies
|
self.diffOpts += " -C%s" % detectCopies
|
||||||
|
|
||||||
if gitConfig("git-p4.detectCopiesHarder", "--bool") == "true":
|
if gitConfigBool("git-p4.detectCopiesHarder"):
|
||||||
self.diffOpts += " --find-copies-harder"
|
self.diffOpts += " --find-copies-harder"
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1719,7 +1761,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
"--format=format:%h %s", c])
|
"--format=format:%h %s", c])
|
||||||
print "You will have to do 'git p4 sync' and rebase."
|
print "You will have to do 'git p4 sync' and rebase."
|
||||||
|
|
||||||
if gitConfig("git-p4.exportLabels", "--bool") == "true":
|
if gitConfigBool("git-p4.exportLabels"):
|
||||||
self.exportLabels = True
|
self.exportLabels = True
|
||||||
|
|
||||||
if self.exportLabels:
|
if self.exportLabels:
|
||||||
@ -1989,7 +2031,6 @@ class P4Sync(Command, P4UserMap):
|
|||||||
self.syncWithOrigin = True
|
self.syncWithOrigin = True
|
||||||
self.importIntoRemotes = True
|
self.importIntoRemotes = True
|
||||||
self.maxChanges = ""
|
self.maxChanges = ""
|
||||||
self.isWindows = (platform.system() == "Windows")
|
|
||||||
self.keepRepoPath = False
|
self.keepRepoPath = False
|
||||||
self.depotPaths = None
|
self.depotPaths = None
|
||||||
self.p4BranchesInGit = []
|
self.p4BranchesInGit = []
|
||||||
@ -2134,7 +2175,14 @@ class P4Sync(Command, P4UserMap):
|
|||||||
# operations. utf16 is converted to ascii or utf8, perhaps.
|
# operations. utf16 is converted to ascii or utf8, perhaps.
|
||||||
# But ascii text saved as -t utf16 is completely mangled.
|
# But ascii text saved as -t utf16 is completely mangled.
|
||||||
# Invoke print -o to get the real contents.
|
# Invoke print -o to get the real contents.
|
||||||
|
#
|
||||||
|
# On windows, the newlines will always be mangled by print, so put
|
||||||
|
# them back too. This is not needed to the cygwin windows version,
|
||||||
|
# just the native "NT" type.
|
||||||
|
#
|
||||||
text = p4_read_pipe(['print', '-q', '-o', '-', file['depotFile']])
|
text = p4_read_pipe(['print', '-q', '-o', '-', file['depotFile']])
|
||||||
|
if p4_version_string().find("/NT") >= 0:
|
||||||
|
text = text.replace("\r\n", "\n")
|
||||||
contents = [ text ]
|
contents = [ text ]
|
||||||
|
|
||||||
if type_base == "apple":
|
if type_base == "apple":
|
||||||
@ -2150,15 +2198,6 @@ class P4Sync(Command, P4UserMap):
|
|||||||
print "\nIgnoring apple filetype file %s" % file['depotFile']
|
print "\nIgnoring apple filetype file %s" % file['depotFile']
|
||||||
return
|
return
|
||||||
|
|
||||||
# Perhaps windows wants unicode, utf16 newlines translated too;
|
|
||||||
# but this is not doing it.
|
|
||||||
if self.isWindows and type_base == "text":
|
|
||||||
mangled = []
|
|
||||||
for data in contents:
|
|
||||||
data = data.replace("\r\n", "\n")
|
|
||||||
mangled.append(data)
|
|
||||||
contents = mangled
|
|
||||||
|
|
||||||
# Note that we do not try to de-mangle keywords on utf16 files,
|
# Note that we do not try to de-mangle keywords on utf16 files,
|
||||||
# even though in theory somebody may want that.
|
# even though in theory somebody may want that.
|
||||||
pattern = p4_keywords_regexp_for_type(type_base, type_mods)
|
pattern = p4_keywords_regexp_for_type(type_base, type_mods)
|
||||||
@ -2636,7 +2675,8 @@ class P4Sync(Command, P4UserMap):
|
|||||||
|
|
||||||
def searchParent(self, parent, branch, target):
|
def searchParent(self, parent, branch, target):
|
||||||
parentFound = False
|
parentFound = False
|
||||||
for blob in read_pipe_lines(["git", "rev-list", "--reverse", "--no-merges", parent]):
|
for blob in read_pipe_lines(["git", "rev-list", "--reverse",
|
||||||
|
"--no-merges", parent]):
|
||||||
blob = blob.strip()
|
blob = blob.strip()
|
||||||
if len(read_pipe(["git", "diff-tree", blob, target])) == 0:
|
if len(read_pipe(["git", "diff-tree", blob, target])) == 0:
|
||||||
parentFound = True
|
parentFound = True
|
||||||
@ -2707,7 +2747,7 @@ class P4Sync(Command, P4UserMap):
|
|||||||
|
|
||||||
blob = None
|
blob = None
|
||||||
if len(parent) > 0:
|
if len(parent) > 0:
|
||||||
tempBranch = os.path.join(self.tempBranchLocation, "%d" % (change))
|
tempBranch = "%s/%d" % (self.tempBranchLocation, change)
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print "Creating temporary branch: " + tempBranch
|
print "Creating temporary branch: " + tempBranch
|
||||||
self.commit(description, filesForCommit, tempBranch)
|
self.commit(description, filesForCommit, tempBranch)
|
||||||
@ -2821,7 +2861,7 @@ class P4Sync(Command, P4UserMap):
|
|||||||
# will use this after clone to set the variable
|
# will use this after clone to set the variable
|
||||||
self.useClientSpec_from_options = True
|
self.useClientSpec_from_options = True
|
||||||
else:
|
else:
|
||||||
if gitConfig("git-p4.useclientspec", "--bool") == "true":
|
if gitConfigBool("git-p4.useclientspec"):
|
||||||
self.useClientSpec = True
|
self.useClientSpec = True
|
||||||
if self.useClientSpec:
|
if self.useClientSpec:
|
||||||
self.clientSpecDirs = getClientSpec()
|
self.clientSpecDirs = getClientSpec()
|
||||||
@ -3061,7 +3101,7 @@ class P4Sync(Command, P4UserMap):
|
|||||||
sys.stdout.write("%s " % b)
|
sys.stdout.write("%s " % b)
|
||||||
sys.stdout.write("\n")
|
sys.stdout.write("\n")
|
||||||
|
|
||||||
if gitConfig("git-p4.importLabels", "--bool") == "true":
|
if gitConfigBool("git-p4.importLabels"):
|
||||||
self.importLabels = True
|
self.importLabels = True
|
||||||
|
|
||||||
if self.importLabels:
|
if self.importLabels:
|
||||||
@ -3179,6 +3219,7 @@ class P4Clone(P4Sync):
|
|||||||
self.cloneExclude = ["/"+p for p in self.cloneExclude]
|
self.cloneExclude = ["/"+p for p in self.cloneExclude]
|
||||||
for p in depotPaths:
|
for p in depotPaths:
|
||||||
if not p.startswith("//"):
|
if not p.startswith("//"):
|
||||||
|
sys.stderr.write('Depot paths must start with "//": %s\n' % p)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not self.cloneDestination:
|
if not self.cloneDestination:
|
||||||
|
@ -8,7 +8,8 @@ TEST_NO_CREATE_REPO=NoThanks
|
|||||||
|
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
if ! test_have_prereq PYTHON; then
|
if ! test_have_prereq PYTHON
|
||||||
|
then
|
||||||
skip_all='skipping git p4 tests; python not available'
|
skip_all='skipping git p4 tests; python not available'
|
||||||
test_done
|
test_done
|
||||||
fi
|
fi
|
||||||
@ -17,6 +18,24 @@ fi
|
|||||||
test_done
|
test_done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# On cygwin, the NT version of Perforce can be used. When giving
|
||||||
|
# it paths, either on the command-line or in client specifications,
|
||||||
|
# be sure to use the native windows form.
|
||||||
|
#
|
||||||
|
# Older versions of perforce were available compiled natively for
|
||||||
|
# cygwin. Those do not accept native windows paths, so make sure
|
||||||
|
# not to convert for them.
|
||||||
|
native_path() {
|
||||||
|
path="$1" &&
|
||||||
|
if test_have_prereq CYGWIN && ! p4 -V | grep -q CYGWIN
|
||||||
|
then
|
||||||
|
path=$(cygpath --windows "$path")
|
||||||
|
else
|
||||||
|
path=$(test-path-utils real_path "$path")
|
||||||
|
fi &&
|
||||||
|
echo "$path"
|
||||||
|
}
|
||||||
|
|
||||||
# Try to pick a unique port: guess a large number, then hope
|
# Try to pick a unique port: guess a large number, then hope
|
||||||
# no more than one of each test is running.
|
# no more than one of each test is running.
|
||||||
#
|
#
|
||||||
@ -32,7 +51,7 @@ P4EDITOR=:
|
|||||||
export P4PORT P4CLIENT P4EDITOR
|
export P4PORT P4CLIENT P4EDITOR
|
||||||
|
|
||||||
db="$TRASH_DIRECTORY/db"
|
db="$TRASH_DIRECTORY/db"
|
||||||
cli=$(test-path-utils real_path "$TRASH_DIRECTORY/cli")
|
cli="$TRASH_DIRECTORY/cli"
|
||||||
git="$TRASH_DIRECTORY/git"
|
git="$TRASH_DIRECTORY/git"
|
||||||
pidfile="$TRASH_DIRECTORY/p4d.pid"
|
pidfile="$TRASH_DIRECTORY/p4d.pid"
|
||||||
|
|
||||||
@ -40,8 +59,11 @@ start_p4d() {
|
|||||||
mkdir -p "$db" "$cli" "$git" &&
|
mkdir -p "$db" "$cli" "$git" &&
|
||||||
rm -f "$pidfile" &&
|
rm -f "$pidfile" &&
|
||||||
(
|
(
|
||||||
p4d -q -r "$db" -p $P4DPORT &
|
cd "$db" &&
|
||||||
echo $! >"$pidfile"
|
{
|
||||||
|
p4d -q -p $P4DPORT &
|
||||||
|
echo $! >"$pidfile"
|
||||||
|
}
|
||||||
) &&
|
) &&
|
||||||
|
|
||||||
# This gives p4d a long time to start up, as it can be
|
# This gives p4d a long time to start up, as it can be
|
||||||
@ -74,15 +96,8 @@ start_p4d() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# build a client
|
# build a client
|
||||||
(
|
client_view "//depot/... //client/..." &&
|
||||||
cd "$cli" &&
|
|
||||||
p4 client -i <<-EOF
|
|
||||||
Client: client
|
|
||||||
Description: client
|
|
||||||
Root: $cli
|
|
||||||
View: //depot/... //client/...
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,13 +138,26 @@ marshal_dump() {
|
|||||||
client_view() {
|
client_view() {
|
||||||
(
|
(
|
||||||
cat <<-EOF &&
|
cat <<-EOF &&
|
||||||
Client: client
|
Client: $P4CLIENT
|
||||||
Description: client
|
Description: $P4CLIENT
|
||||||
Root: $cli
|
Root: $cli
|
||||||
|
AltRoots: $(native_path "$cli")
|
||||||
|
LineEnd: unix
|
||||||
View:
|
View:
|
||||||
EOF
|
EOF
|
||||||
for arg ; do
|
printf "\t%s\n" "$@"
|
||||||
printf "\t$arg\n"
|
|
||||||
done
|
|
||||||
) | p4 client -i
|
) | p4 client -i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_cli_file_writeable() {
|
||||||
|
# cygwin version of p4 does not set read-only attr,
|
||||||
|
# will be marked 444 but -w is true
|
||||||
|
file="$1" &&
|
||||||
|
if test_have_prereq CYGWIN && p4 -V | grep -q CYGWIN
|
||||||
|
then
|
||||||
|
stat=$(stat --format=%a "$file") &&
|
||||||
|
test $stat = 644
|
||||||
|
else
|
||||||
|
test -w "$file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
@ -30,6 +30,11 @@ test_expect_success 'basic git p4 clone' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'depot typo error' '
|
||||||
|
test_must_fail git p4 clone --dest="$git" /depot 2>errs &&
|
||||||
|
grep "Depot paths must start with" errs
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'git p4 clone @all' '
|
test_expect_success 'git p4 clone @all' '
|
||||||
git p4 clone --dest="$git" //depot@all &&
|
git p4 clone --dest="$git" //depot@all &&
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
|
@ -8,6 +8,123 @@ test_expect_success 'start p4d' '
|
|||||||
start_p4d
|
start_p4d
|
||||||
'
|
'
|
||||||
|
|
||||||
|
#
|
||||||
|
# This series of tests checks newline handling Both p4 and
|
||||||
|
# git store newlines as \n, and have options to choose how
|
||||||
|
# newlines appear in checked-out files.
|
||||||
|
#
|
||||||
|
test_expect_success 'p4 client newlines, unix' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
|
||||||
|
printf "unix\ncrlf\n" >f-unix &&
|
||||||
|
printf "unix\r\ncrlf\r\n" >f-unix-as-crlf &&
|
||||||
|
p4 add -t text f-unix &&
|
||||||
|
p4 submit -d f-unix &&
|
||||||
|
|
||||||
|
# LineEnd: unix; should be no change after sync
|
||||||
|
cp f-unix f-unix-orig &&
|
||||||
|
p4 sync -f &&
|
||||||
|
test_cmp f-unix-orig f-unix &&
|
||||||
|
|
||||||
|
# make sure stored in repo as unix newlines
|
||||||
|
# use sed to eat python-appened newline
|
||||||
|
p4 -G print //depot/f-unix | marshal_dump data 2 |\
|
||||||
|
sed \$d >f-unix-p4-print &&
|
||||||
|
test_cmp f-unix-orig f-unix-p4-print &&
|
||||||
|
|
||||||
|
# switch to win, make sure lf -> crlf
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:win/" | p4 client -i &&
|
||||||
|
p4 sync -f &&
|
||||||
|
test_cmp f-unix-as-crlf f-unix
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'p4 client newlines, win' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:win/" | p4 client -i &&
|
||||||
|
printf "win\r\ncrlf\r\n" >f-win &&
|
||||||
|
printf "win\ncrlf\n" >f-win-as-lf &&
|
||||||
|
p4 add -t text f-win &&
|
||||||
|
p4 submit -d f-win &&
|
||||||
|
|
||||||
|
# LineEnd: win; should be no change after sync
|
||||||
|
cp f-win f-win-orig &&
|
||||||
|
p4 sync -f &&
|
||||||
|
test_cmp f-win-orig f-win &&
|
||||||
|
|
||||||
|
# make sure stored in repo as unix newlines
|
||||||
|
# use sed to eat python-appened newline
|
||||||
|
p4 -G print //depot/f-win | marshal_dump data 2 |\
|
||||||
|
sed \$d >f-win-p4-print &&
|
||||||
|
test_cmp f-win-as-lf f-win-p4-print &&
|
||||||
|
|
||||||
|
# switch to unix, make sure lf -> crlf
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
|
||||||
|
p4 sync -f &&
|
||||||
|
test_cmp f-win-as-lf f-win
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'ensure blobs store only lf newlines' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git init &&
|
||||||
|
git p4 sync //depot@all &&
|
||||||
|
|
||||||
|
# verify the files in .git are stored only with newlines
|
||||||
|
o=$(git ls-tree p4/master -- f-unix | cut -f1 | cut -d\ -f3) &&
|
||||||
|
git cat-file blob $o >f-unix-blob &&
|
||||||
|
test_cmp "$cli"/f-unix-orig f-unix-blob &&
|
||||||
|
|
||||||
|
o=$(git ls-tree p4/master -- f-win | cut -f1 | cut -d\ -f3) &&
|
||||||
|
git cat-file blob $o >f-win-blob &&
|
||||||
|
test_cmp "$cli"/f-win-as-lf f-win-blob &&
|
||||||
|
|
||||||
|
rm f-unix-blob f-win-blob
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'gitattributes setting eol=lf produces lf newlines' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
# checkout the files and make sure core.eol works as planned
|
||||||
|
cd "$git" &&
|
||||||
|
git init &&
|
||||||
|
echo "* eol=lf" >.gitattributes &&
|
||||||
|
git p4 sync //depot@all &&
|
||||||
|
git checkout master &&
|
||||||
|
test_cmp "$cli"/f-unix-orig f-unix &&
|
||||||
|
test_cmp "$cli"/f-win-as-lf f-win
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'gitattributes setting eol=crlf produces crlf newlines' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
# checkout the files and make sure core.eol works as planned
|
||||||
|
cd "$git" &&
|
||||||
|
git init &&
|
||||||
|
echo "* eol=crlf" >.gitattributes &&
|
||||||
|
git p4 sync //depot@all &&
|
||||||
|
git checkout master &&
|
||||||
|
test_cmp "$cli"/f-unix-as-crlf f-unix &&
|
||||||
|
test_cmp "$cli"/f-win-orig f-win
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'crlf cleanup' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
rm f-unix-orig f-unix-as-crlf &&
|
||||||
|
rm f-win-orig f-win-as-lf &&
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
|
||||||
|
p4 sync -f
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'utf-16 file create' '
|
test_expect_success 'utf-16 file create' '
|
||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
|
@ -214,40 +214,33 @@ test_expect_success 'clone --use-client-spec' '
|
|||||||
exec >/dev/null &&
|
exec >/dev/null &&
|
||||||
test_must_fail git p4 clone --dest="$git" --use-client-spec
|
test_must_fail git p4 clone --dest="$git" --use-client-spec
|
||||||
) &&
|
) &&
|
||||||
cli2=$(test-path-utils real_path "$TRASH_DIRECTORY/cli2") &&
|
# build a different client
|
||||||
|
cli2="$TRASH_DIRECTORY/cli2" &&
|
||||||
mkdir -p "$cli2" &&
|
mkdir -p "$cli2" &&
|
||||||
test_when_finished "rmdir \"$cli2\"" &&
|
test_when_finished "rmdir \"$cli2\"" &&
|
||||||
(
|
|
||||||
cd "$cli2" &&
|
|
||||||
p4 client -i <<-EOF
|
|
||||||
Client: client2
|
|
||||||
Description: client2
|
|
||||||
Root: $cli2
|
|
||||||
View: //depot/sub/... //client2/bus/...
|
|
||||||
EOF
|
|
||||||
) &&
|
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
(
|
(
|
||||||
|
# group P4CLIENT and cli changes in a sub-shell
|
||||||
P4CLIENT=client2 &&
|
P4CLIENT=client2 &&
|
||||||
git p4 clone --dest="$git" --use-client-spec //depot/...
|
cli="$cli2" &&
|
||||||
) &&
|
client_view "//depot/sub/... //client2/bus/..." &&
|
||||||
(
|
git p4 clone --dest="$git" --use-client-spec //depot/... &&
|
||||||
cd "$git" &&
|
(
|
||||||
test_path_is_file bus/dir/f4 &&
|
cd "$git" &&
|
||||||
test_path_is_missing file1
|
test_path_is_file bus/dir/f4 &&
|
||||||
) &&
|
test_path_is_missing file1
|
||||||
cleanup_git &&
|
) &&
|
||||||
|
cleanup_git &&
|
||||||
# same thing again, this time with variable instead of option
|
# same thing again, this time with variable instead of option
|
||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
git init &&
|
git init &&
|
||||||
git config git-p4.useClientSpec true &&
|
git config git-p4.useClientSpec true &&
|
||||||
P4CLIENT=client2 &&
|
git p4 sync //depot/... &&
|
||||||
git p4 sync //depot/... &&
|
git checkout -b master p4/master &&
|
||||||
git checkout -b master p4/master &&
|
test_path_is_file bus/dir/f4 &&
|
||||||
test_path_is_file bus/dir/f4 &&
|
test_path_is_missing file1
|
||||||
test_path_is_missing file1
|
)
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -17,6 +17,16 @@ test_expect_success 'init depot' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_failure 'is_cli_file_writeable function' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
echo a >a &&
|
||||||
|
is_cli_file_writeable a &&
|
||||||
|
! is_cli_file_writeable file1 &&
|
||||||
|
rm a
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'submit with no client dir' '
|
test_expect_success 'submit with no client dir' '
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
git p4 clone --dest="$git" //depot &&
|
git p4 clone --dest="$git" //depot &&
|
||||||
@ -200,7 +210,7 @@ test_expect_success 'submit copy' '
|
|||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_file file5.ta &&
|
test_path_is_file file5.ta &&
|
||||||
test ! -w file5.ta
|
! is_cli_file_writeable file5.ta
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -219,7 +229,7 @@ test_expect_success 'submit rename' '
|
|||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_missing file6.t &&
|
test_path_is_missing file6.t &&
|
||||||
test_path_is_file file6.ta &&
|
test_path_is_file file6.ta &&
|
||||||
test ! -w file6.ta
|
! is_cli_file_writeable file6.ta
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ test_expect_success 'exclusion single file' '
|
|||||||
|
|
||||||
test_expect_success 'overlay wildcard' '
|
test_expect_success 'overlay wildcard' '
|
||||||
client_view "//depot/dir1/... //client/cli/..." \
|
client_view "//depot/dir1/... //client/cli/..." \
|
||||||
"+//depot/dir2/... //client/cli/...\n" &&
|
"+//depot/dir2/... //client/cli/..." &&
|
||||||
files="cli/file11 cli/file12 cli/file21 cli/file22" &&
|
files="cli/file11 cli/file12 cli/file21 cli/file22" &&
|
||||||
client_verify $files &&
|
client_verify $files &&
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
@ -333,7 +333,7 @@ test_expect_success 'subdir clone, submit copy' '
|
|||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_file dir1/file11a &&
|
test_path_is_file dir1/file11a &&
|
||||||
test ! -w dir1/file11a
|
! is_cli_file_writeable dir1/file11a
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -353,7 +353,7 @@ test_expect_success 'subdir clone, submit rename' '
|
|||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_missing dir1/file13 &&
|
test_path_is_missing dir1/file13 &&
|
||||||
test_path_is_file dir1/file13a &&
|
test_path_is_file dir1/file13a &&
|
||||||
test ! -w dir1/file13a
|
! is_cli_file_writeable dir1/file13a
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -365,7 +365,10 @@ test_expect_success 'wildcard files submit back to p4, client-spec case' '
|
|||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
echo git-wild-hash >dir1/git-wild#hash &&
|
echo git-wild-hash >dir1/git-wild#hash &&
|
||||||
echo git-wild-star >dir1/git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
echo git-wild-star >dir1/git-wild\*star
|
||||||
|
fi &&
|
||||||
echo git-wild-at >dir1/git-wild@at &&
|
echo git-wild-at >dir1/git-wild@at &&
|
||||||
echo git-wild-percent >dir1/git-wild%percent &&
|
echo git-wild-percent >dir1/git-wild%percent &&
|
||||||
git add dir1/git-wild* &&
|
git add dir1/git-wild* &&
|
||||||
@ -376,7 +379,10 @@ test_expect_success 'wildcard files submit back to p4, client-spec case' '
|
|||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_file dir1/git-wild#hash &&
|
test_path_is_file dir1/git-wild#hash &&
|
||||||
test_path_is_file dir1/git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
test_path_is_file dir1/git-wild\*star
|
||||||
|
fi &&
|
||||||
test_path_is_file dir1/git-wild@at &&
|
test_path_is_file dir1/git-wild@at &&
|
||||||
test_path_is_file dir1/git-wild%percent
|
test_path_is_file dir1/git-wild%percent
|
||||||
) &&
|
) &&
|
||||||
|
@ -14,7 +14,10 @@ test_expect_success 'add p4 files with wildcards in the names' '
|
|||||||
printf "file2\nhas\nsome\nrandom\ntext\n" >file2 &&
|
printf "file2\nhas\nsome\nrandom\ntext\n" >file2 &&
|
||||||
p4 add file2 &&
|
p4 add file2 &&
|
||||||
echo file-wild-hash >file-wild#hash &&
|
echo file-wild-hash >file-wild#hash &&
|
||||||
echo file-wild-star >file-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
echo file-wild-star >file-wild\*star
|
||||||
|
fi &&
|
||||||
echo file-wild-at >file-wild@at &&
|
echo file-wild-at >file-wild@at &&
|
||||||
echo file-wild-percent >file-wild%percent &&
|
echo file-wild-percent >file-wild%percent &&
|
||||||
p4 add -f file-wild* &&
|
p4 add -f file-wild* &&
|
||||||
@ -28,7 +31,10 @@ test_expect_success 'wildcard files git p4 clone' '
|
|||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
test -f file-wild#hash &&
|
test -f file-wild#hash &&
|
||||||
test -f file-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
test -f file-wild\*star
|
||||||
|
fi &&
|
||||||
test -f file-wild@at &&
|
test -f file-wild@at &&
|
||||||
test -f file-wild%percent
|
test -f file-wild%percent
|
||||||
)
|
)
|
||||||
@ -40,7 +46,10 @@ test_expect_success 'wildcard files submit back to p4, add' '
|
|||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
echo git-wild-hash >git-wild#hash &&
|
echo git-wild-hash >git-wild#hash &&
|
||||||
echo git-wild-star >git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
echo git-wild-star >git-wild\*star
|
||||||
|
fi &&
|
||||||
echo git-wild-at >git-wild@at &&
|
echo git-wild-at >git-wild@at &&
|
||||||
echo git-wild-percent >git-wild%percent &&
|
echo git-wild-percent >git-wild%percent &&
|
||||||
git add git-wild* &&
|
git add git-wild* &&
|
||||||
@ -51,7 +60,10 @@ test_expect_success 'wildcard files submit back to p4, add' '
|
|||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_file git-wild#hash &&
|
test_path_is_file git-wild#hash &&
|
||||||
test_path_is_file git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
test_path_is_file git-wild\*star
|
||||||
|
fi &&
|
||||||
test_path_is_file git-wild@at &&
|
test_path_is_file git-wild@at &&
|
||||||
test_path_is_file git-wild%percent
|
test_path_is_file git-wild%percent
|
||||||
)
|
)
|
||||||
@ -63,7 +75,10 @@ test_expect_success 'wildcard files submit back to p4, modify' '
|
|||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
echo new-line >>git-wild#hash &&
|
echo new-line >>git-wild#hash &&
|
||||||
echo new-line >>git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
echo new-line >>git-wild\*star
|
||||||
|
fi &&
|
||||||
echo new-line >>git-wild@at &&
|
echo new-line >>git-wild@at &&
|
||||||
echo new-line >>git-wild%percent &&
|
echo new-line >>git-wild%percent &&
|
||||||
git add git-wild* &&
|
git add git-wild* &&
|
||||||
@ -74,7 +89,10 @@ test_expect_success 'wildcard files submit back to p4, modify' '
|
|||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_line_count = 2 git-wild#hash &&
|
test_line_count = 2 git-wild#hash &&
|
||||||
test_line_count = 2 git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
test_line_count = 2 git-wild\*star
|
||||||
|
fi &&
|
||||||
test_line_count = 2 git-wild@at &&
|
test_line_count = 2 git-wild@at &&
|
||||||
test_line_count = 2 git-wild%percent
|
test_line_count = 2 git-wild%percent
|
||||||
)
|
)
|
||||||
@ -87,7 +105,7 @@ test_expect_success 'wildcard files submit back to p4, copy' '
|
|||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
cp file2 git-wild-cp#hash &&
|
cp file2 git-wild-cp#hash &&
|
||||||
git add git-wild-cp#hash &&
|
git add git-wild-cp#hash &&
|
||||||
cp git-wild\*star file-wild-3 &&
|
cp git-wild#hash file-wild-3 &&
|
||||||
git add file-wild-3 &&
|
git add file-wild-3 &&
|
||||||
git commit -m "wildcard copies" &&
|
git commit -m "wildcard copies" &&
|
||||||
git config git-p4.detectCopies true &&
|
git config git-p4.detectCopies true &&
|
||||||
@ -134,7 +152,10 @@ test_expect_success 'wildcard files submit back to p4, delete' '
|
|||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_missing git-wild#hash &&
|
test_path_is_missing git-wild#hash &&
|
||||||
test_path_is_missing git-wild\*star &&
|
if test_have_prereq NOT_MINGW NOT_CYGWIN
|
||||||
|
then
|
||||||
|
test_path_is_missing git-wild\*star
|
||||||
|
fi &&
|
||||||
test_path_is_missing git-wild@at &&
|
test_path_is_missing git-wild@at &&
|
||||||
test_path_is_missing git-wild%percent
|
test_path_is_missing git-wild%percent
|
||||||
)
|
)
|
||||||
|
@ -405,8 +405,8 @@ test_expect_success 'cleanup chmod after submit cancel' '
|
|||||||
git p4 clone --dest="$git" //depot &&
|
git p4 clone --dest="$git" //depot &&
|
||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
chmod u+x text &&
|
test_chmod +x text &&
|
||||||
chmod u-x text+x &&
|
test_chmod -x text+x &&
|
||||||
git add text text+x &&
|
git add text text+x &&
|
||||||
git commit -m "chmod texts" &&
|
git commit -m "chmod texts" &&
|
||||||
echo n | test_expect_code 1 git p4 submit
|
echo n | test_expect_code 1 git p4 submit
|
||||||
@ -415,10 +415,13 @@ test_expect_success 'cleanup chmod after submit cancel' '
|
|||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
test_path_is_file text &&
|
test_path_is_file text &&
|
||||||
! p4 fstat -T action text &&
|
! p4 fstat -T action text &&
|
||||||
stat --format=%A text | egrep ^-r-- &&
|
|
||||||
test_path_is_file text+x &&
|
test_path_is_file text+x &&
|
||||||
! p4 fstat -T action text+x &&
|
! p4 fstat -T action text+x &&
|
||||||
stat --format=%A text+x | egrep ^-r-x
|
if test_have_prereq NOT_CYGWIN
|
||||||
|
then
|
||||||
|
stat --format=%A text | egrep ^-r-- &&
|
||||||
|
stat --format=%A text+x | egrep ^-r-x
|
||||||
|
fi
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -666,12 +666,14 @@ case $(uname -s) in
|
|||||||
# backslashes in pathspec are converted to '/'
|
# backslashes in pathspec are converted to '/'
|
||||||
# exec does not inherit the PID
|
# exec does not inherit the PID
|
||||||
test_set_prereq MINGW
|
test_set_prereq MINGW
|
||||||
|
test_set_prereq NOT_CYGWIN
|
||||||
test_set_prereq SED_STRIPS_CR
|
test_set_prereq SED_STRIPS_CR
|
||||||
;;
|
;;
|
||||||
*CYGWIN*)
|
*CYGWIN*)
|
||||||
test_set_prereq POSIXPERM
|
test_set_prereq POSIXPERM
|
||||||
test_set_prereq EXECKEEPSPID
|
test_set_prereq EXECKEEPSPID
|
||||||
test_set_prereq NOT_MINGW
|
test_set_prereq NOT_MINGW
|
||||||
|
test_set_prereq CYGWIN
|
||||||
test_set_prereq SED_STRIPS_CR
|
test_set_prereq SED_STRIPS_CR
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@ -679,6 +681,7 @@ case $(uname -s) in
|
|||||||
test_set_prereq BSLASHPSPEC
|
test_set_prereq BSLASHPSPEC
|
||||||
test_set_prereq EXECKEEPSPID
|
test_set_prereq EXECKEEPSPID
|
||||||
test_set_prereq NOT_MINGW
|
test_set_prereq NOT_MINGW
|
||||||
|
test_set_prereq NOT_CYGWIN
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user