git-p4: support exclude paths
Teach git-p4 about the -/ option which adds depot paths to the exclude list, used when cloning. The option is chosen such that the natural Perforce syntax works, eg: git p4 clone //branch/path/... -//branch/path/{large,old}/... Trailing ... on exclude paths are optional. This is a generalization of a change by Dmitry Kakurin (thanks). Signed-off-by: Tommy Thorn <tommy-git@thorn.ws> Signed-off-by: Simon Hausmann <simon@lst.de>
This commit is contained in:
parent
2db511fdbd
commit
354081d5a0
@ -843,16 +843,23 @@ class P4Sync(Command):
|
||||
self.keepRepoPath = False
|
||||
self.depotPaths = None
|
||||
self.p4BranchesInGit = []
|
||||
self.cloneExclude = []
|
||||
|
||||
if gitConfig("git-p4.syncFromOrigin") == "false":
|
||||
self.syncWithOrigin = False
|
||||
|
||||
def extractFilesFromCommit(self, commit):
|
||||
self.cloneExclude = [re.sub(r"\.\.\.$", "", path)
|
||||
for path in self.cloneExclude]
|
||||
files = []
|
||||
fnum = 0
|
||||
while commit.has_key("depotFile%s" % fnum):
|
||||
path = commit["depotFile%s" % fnum]
|
||||
|
||||
if [p for p in self.cloneExclude
|
||||
if path.startswith (p)]:
|
||||
found = False
|
||||
else:
|
||||
found = [p for p in self.depotPaths
|
||||
if path.startswith (p)]
|
||||
if not found:
|
||||
@ -1634,13 +1641,23 @@ class P4Clone(P4Sync):
|
||||
P4Sync.__init__(self)
|
||||
self.description = "Creates a new git repository and imports from Perforce into it"
|
||||
self.usage = "usage: %prog [options] //depot/path[@revRange]"
|
||||
self.options.append(
|
||||
self.options += [
|
||||
optparse.make_option("--destination", dest="cloneDestination",
|
||||
action='store', default=None,
|
||||
help="where to leave result of the clone"))
|
||||
help="where to leave result of the clone"),
|
||||
optparse.make_option("-/", dest="cloneExclude",
|
||||
action="append", type="string",
|
||||
help="exclude depot path")
|
||||
]
|
||||
self.cloneDestination = None
|
||||
self.needsGit = False
|
||||
|
||||
# This is required for the "append" cloneExclude action
|
||||
def ensure_value(self, attr, value):
|
||||
if not hasattr(self, attr) or getattr(self, attr) is None:
|
||||
setattr(self, attr, value)
|
||||
return getattr(self, attr)
|
||||
|
||||
def defaultDestination(self, args):
|
||||
## TODO: use common prefix of args?
|
||||
depotPath = args[0]
|
||||
@ -1664,6 +1681,7 @@ class P4Clone(P4Sync):
|
||||
self.cloneDestination = depotPaths[-1]
|
||||
depotPaths = depotPaths[:-1]
|
||||
|
||||
self.cloneExclude = ["/"+p for p in self.cloneExclude]
|
||||
for p in depotPaths:
|
||||
if not p.startswith("//"):
|
||||
return False
|
||||
|
Loading…
Reference in New Issue
Block a user