1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-03 22:28:09 +02:00

Start moving the git-p4 tools into one single script.

Signed-off-by: Simon Hausmann <hausmann@kde.org>
This commit is contained in:
Simon Hausmann 2007-03-19 20:59:12 +01:00
parent 95d27cb75d
commit 86949eef40
3 changed files with 115 additions and 68 deletions

115
contrib/fast-import/git-p4.py Executable file
View File

@ -0,0 +1,115 @@
#!/usr/bin/env python
#
# git-p4.py -- A tool for bidirectional operation between a Perforce depot and git.
#
# Author: Simon Hausmann <hausmann@kde.org>
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
#
import optparse, sys, os, marshal, popen2
def p4CmdList(cmd):
cmd = "p4 -G %s" % cmd
pipe = os.popen(cmd, "rb")
result = []
try:
while True:
entry = marshal.load(pipe)
result.append(entry)
except EOFError:
pass
pipe.close()
return result
def p4Cmd(cmd):
list = p4CmdList(cmd)
result = {}
for entry in list:
result.update(entry)
return result;
def die(msg):
sys.stderr.write(msg + "\n")
sys.exit(1)
def currentGitBranch():
return os.popen("git-name-rev HEAD").read().split(" ")[1][:-1]
class P4Debug:
def __init__(self):
self.options = [
]
def run(self, args):
for output in p4CmdList(" ".join(args)):
print output
class P4CleanTags:
def __init__(self):
self.options = [
# optparse.make_option("--branch", dest="branch", default="refs/heads/master")
]
def run(self, args):
branch = currentGitBranch()
print "Cleaning out stale p4 import tags..."
sout, sin, serr = popen2.popen3("git-name-rev --tags `git-rev-parse %s`" % branch)
output = sout.read()
try:
tagIdx = output.index(" tags/p4/")
except:
print "Cannot find any p4/* tag. Nothing to do."
sys.exit(0)
try:
caretIdx = output.index("^")
except:
caretIdx = len(output) - 1
rev = int(output[tagIdx + 9 : caretIdx])
allTags = os.popen("git tag -l p4/").readlines()
for i in range(len(allTags)):
allTags[i] = int(allTags[i][3:-1])
allTags.sort()
allTags.remove(rev)
for rev in allTags:
print os.popen("git tag -d p4/%s" % rev).read()
print "%s tags removed." % len(allTags)
def printUsage(commands):
print "usage: %s <command> [options]" % sys.argv[0]
print ""
print "valid commands: %s" % ", ".join(commands)
print ""
print "Try %s <command> --help for command specific help." % sys.argv[0]
print ""
commands = {
"debug" : P4Debug(),
"clean-tags" : P4CleanTags()
}
if len(sys.argv[1:]) == 0:
printUsage(commands.keys())
sys.exit(2)
cmd = ""
cmdName = sys.argv[1]
try:
cmd = commands[cmdName]
except KeyError:
print "unknown command %s" % cmdName
print ""
printUsage(commands.keys())
sys.exit(2)
parser = optparse.OptionParser("usage: %prog " + cmdName + " [options]", cmd.options)
(cmd, args) = parser.parse_args(sys.argv[2:], cmd);
cmd.run(args)

View File

@ -1,43 +0,0 @@
#!/usr/bin/python
#
# p4-debug.py
#
# Author: Simon Hausmann <hausmann@kde.org>
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
#
# removes unused p4 import tags
#
import os, string, sys
import popen2, getopt
branch = "refs/heads/master"
try:
opts, args = getopt.getopt(sys.argv[1:], "", [ "branch=" ])
except getopt.GetoptError:
print "fixme, syntax error"
sys.exit(1)
for o, a in opts:
if o == "--branch":
branch = "refs/heads/" + a
sout, sin, serr = popen2.popen3("git-name-rev --tags `git-rev-parse %s`" % branch)
output = sout.read()
tagIdx = output.index(" tags/p4/")
try:
caretIdx = output.index("^")
except:
caretIdx = len(output) - 1
rev = int(output[tagIdx + 9 : caretIdx])
allTags = os.popen("git tag -l p4/").readlines()
for i in range(len(allTags)):
allTags[i] = int(allTags[i][3:-1])
allTags.sort()
allTags.remove(rev)
for rev in allTags:
print os.popen("git tag -d p4/%s" % rev).read()

View File

@ -1,25 +0,0 @@
#!/usr/bin/python
#
# p4-debug.py
#
# Author: Simon Hausmann <hausmann@kde.org>
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
#
# executes a p4 command with -G and prints the resulting python dicts
#
import os, string, sys
import marshal, popen2
cmd = ""
for arg in sys.argv[1:]:
cmd += arg + " "
pipe = os.popen("p4 -G %s" % cmd, "rb")
try:
while True:
entry = marshal.load(pipe)
print entry
except EOFError:
pass
pipe.close()