зеркало из https://github.com/microsoft/git.git
Added git-p4 clone convenience command
Signed-off-by: Simon Hausmann <simon@lst.de>
This commit is contained in:
Родитель
68ed351ab5
Коммит
f9a3a4f796
|
@ -440,6 +440,7 @@ class P4Sync(Command):
|
||||||
self.detectBranches = False
|
self.detectBranches = False
|
||||||
self.detectLabels = False
|
self.detectLabels = False
|
||||||
self.changesFile = ""
|
self.changesFile = ""
|
||||||
|
self.tagLastChange = True
|
||||||
|
|
||||||
def p4File(self, depotPath):
|
def p4File(self, depotPath):
|
||||||
return os.popen("p4 print -q \"%s\"" % depotPath, "rb").read()
|
return os.popen("p4 print -q \"%s\"" % depotPath, "rb").read()
|
||||||
|
@ -826,7 +827,6 @@ class P4Sync(Command):
|
||||||
self.globalPrefix = ""
|
self.globalPrefix = ""
|
||||||
self.changeRange = ""
|
self.changeRange = ""
|
||||||
self.initialParent = ""
|
self.initialParent = ""
|
||||||
self.tagLastChange = True
|
|
||||||
|
|
||||||
if len(self.branch) == 0:
|
if len(self.branch) == 0:
|
||||||
self.branch = "p4"
|
self.branch = "p4"
|
||||||
|
@ -1062,6 +1062,58 @@ class P4Rebase(Command):
|
||||||
system("git diff-tree --stat --summary -M %s HEAD" % oldHead)
|
system("git diff-tree --stat --summary -M %s HEAD" % oldHead)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
class P4Clone(P4Sync):
|
||||||
|
def __init__(self):
|
||||||
|
P4Sync.__init__(self)
|
||||||
|
self.description = "Creates a new git repository and imports from Perforce into it"
|
||||||
|
self.usage = "usage: %prog [options] //depot/path[@revRange] [directory]"
|
||||||
|
self.needsGit = False
|
||||||
|
self.tagLastChange = False
|
||||||
|
|
||||||
|
def run(self, args):
|
||||||
|
if len(args) < 1:
|
||||||
|
return False
|
||||||
|
depotPath = args[0]
|
||||||
|
dir = ""
|
||||||
|
if len(args) == 2:
|
||||||
|
dir = args[1]
|
||||||
|
elif len(args) > 2:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not depotPath.startswith("//"):
|
||||||
|
return False
|
||||||
|
|
||||||
|
if len(dir) == 0:
|
||||||
|
dir = depotPath
|
||||||
|
atPos = dir.rfind("@")
|
||||||
|
if atPos != -1:
|
||||||
|
dir = dir[0:atPos]
|
||||||
|
hashPos = dir.rfind("#")
|
||||||
|
if hashPos != -1:
|
||||||
|
dir = dir[0:hashPos]
|
||||||
|
|
||||||
|
if dir.endswith("..."):
|
||||||
|
dir = dir[:-3]
|
||||||
|
|
||||||
|
if dir.endswith("/"):
|
||||||
|
dir = dir[:-1]
|
||||||
|
|
||||||
|
slashPos = dir.rfind("/")
|
||||||
|
if slashPos != -1:
|
||||||
|
dir = dir[slashPos + 1:]
|
||||||
|
|
||||||
|
print "Importing from %s into %s" % (depotPath, dir)
|
||||||
|
os.makedirs(dir)
|
||||||
|
os.chdir(dir)
|
||||||
|
system("git init")
|
||||||
|
if not P4Sync.run(self, [depotPath]):
|
||||||
|
return False
|
||||||
|
os.wait()
|
||||||
|
if self.branch != "master":
|
||||||
|
system("git branch master p4")
|
||||||
|
system("git checkout -f")
|
||||||
|
return True
|
||||||
|
|
||||||
class HelpFormatter(optparse.IndentedHelpFormatter):
|
class HelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
optparse.IndentedHelpFormatter.__init__(self)
|
optparse.IndentedHelpFormatter.__init__(self)
|
||||||
|
@ -1085,7 +1137,8 @@ commands = {
|
||||||
"clean-tags" : P4CleanTags(),
|
"clean-tags" : P4CleanTags(),
|
||||||
"submit" : P4Submit(),
|
"submit" : P4Submit(),
|
||||||
"sync" : P4Sync(),
|
"sync" : P4Sync(),
|
||||||
"rebase" : P4Rebase()
|
"rebase" : P4Rebase(),
|
||||||
|
"clone" : P4Clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sys.argv[1:]) == 0:
|
if len(sys.argv[1:]) == 0:
|
||||||
|
|
|
@ -10,7 +10,25 @@ done using "git-p4 submit".
|
||||||
Importing
|
Importing
|
||||||
=========
|
=========
|
||||||
|
|
||||||
The procedure is simple:
|
You can simply start with
|
||||||
|
|
||||||
|
git-p4 clone //depot/path/project
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
git-p4 clone //depot/path/project myproject
|
||||||
|
|
||||||
|
This will create an empty git repository in a subdirectory called "project" (or
|
||||||
|
"myproject" with the second command), import the head revision from the
|
||||||
|
specified perforce path into a git "p4" branch, create a master branch off it
|
||||||
|
and check it out. If you want the entire history (not just the head revision) then
|
||||||
|
you can simply append a "@all" to the depot path:
|
||||||
|
|
||||||
|
git-p4 clone //depot/project/main@all myproject
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
If you want more control you can also use the git-p4 sync command directly:
|
||||||
|
|
||||||
mkdir repo-git
|
mkdir repo-git
|
||||||
cd repo-git
|
cd repo-git
|
||||||
|
@ -31,6 +49,9 @@ a big import. This may take a while.
|
||||||
Support for Perforce integrations is still work in progress. Don't bother
|
Support for Perforce integrations is still work in progress. Don't bother
|
||||||
trying it unless you want to hack on it :)
|
trying it unless you want to hack on it :)
|
||||||
|
|
||||||
|
For convenience there's also the git-p4 clone command that works similar to
|
||||||
|
git-clone and combines the creation of the git repository with the the initial
|
||||||
|
import and the branch setup
|
||||||
|
|
||||||
Incremental Imports
|
Incremental Imports
|
||||||
===================
|
===================
|
||||||
|
|
Загрузка…
Ссылка в новой задаче