git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] make hg-to-git compatible with python2.x and 3.x
@ 2018-02-15 11:18 Hervé Beraud
  2018-02-15 22:06 ` Junio C Hamano
  2018-02-20 16:52 ` Hervé Beraud
  0 siblings, 2 replies; 11+ messages in thread
From: Hervé Beraud @ 2018-02-15 11:18 UTC (permalink / raw)
  To: git

---
 contrib/hg-to-git/hg-to-git.py | 140 ++++++++++++++++++++++++-----------------
 1 file changed, 83 insertions(+), 57 deletions(-)

diff --git a/contrib/hg-to-git/hg-to-git.py b/contrib/hg-to-git/hg-to-git.py
index de3f81667ed97..9b0842c3883dc 100755
--- a/contrib/hg-to-git/hg-to-git.py
+++ b/contrib/hg-to-git/hg-to-git.py
@@ -18,14 +18,19 @@
     along with this program; if not, see <http://www.gnu.org/licenses/>.
 """
 
-import os, os.path, sys
-import tempfile, pickle, getopt
+import os
+import os.path
+import sys
+import tempfile
+import pickle
+import getopt
+import textwrap
 import re
 
 if sys.hexversion < 0x02030000:
-   # The behavior of the pickle module changed significantly in 2.3
-   sys.stderr.write("hg-to-git.py: requires Python 2.3 or later.\n")
-   sys.exit(1)
+    # The behavior of the pickle module changed significantly in 2.3
+    sys.stderr.write("hg-to-git.py: requires Python 2.3 or later.\n")
+    sys.exit(1)
 
 # Maps hg version -> git version
 hgvers = {}
@@ -38,29 +43,31 @@
 # Number of new changesets converted from hg
 hgnewcsets = 0
 
-#------------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+
 
 def usage():
 
-        print """\
-%s: [OPTIONS] <hgprj>
+    print(textwrap.dedent("""\
+        {0}: [OPTIONS] <hgprj>
 
-options:
-    -s, --gitstate=FILE: name of the state to be saved/read
-                         for incrementals
-    -n, --nrepack=INT:   number of changesets that will trigger
-                         a repack (default=0, -1 to deactivate)
-    -v, --verbose:       be verbose
+        options:
+            -s, --gitstate=FILE: name of the state to be saved/read
+                                 for incrementals
+            -n, --nrepack=INT:   number of changesets that will trigger
+                                 a repack (default=0, -1 to deactivate)
+            -v, --verbose:       be verbose
 
-required:
-    hgprj:  name of the HG project to import (directory)
-""" % sys.argv[0]
+        required:
+            hgprj:  name of the HG project to import (directory)
+    """).format(sys.argv[0]))
+
+# -----------------------------------------------------------------------------
 
-#------------------------------------------------------------------------------
 
 def getgitenv(user, date):
     env = ''
-    elems = re.compile('(.*?)\s+<(.*)>').match(user)
+    elems = re.compile(r'(.*?)\s+<(.*)>').match(user)
     if elems:
         env += 'export GIT_AUTHOR_NAME="%s" ;' % elems.group(1)
         env += 'export GIT_COMMITTER_NAME="%s" ;' % elems.group(1)
@@ -76,14 +83,16 @@ def getgitenv(user, date):
     env += 'export GIT_COMMITTER_DATE="%s" ;' % date
     return env
 
-#------------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+
 
 state = ''
 opt_nrepack = 0
 verbose = False
 
 try:
-    opts, args = getopt.getopt(sys.argv[1:], 's:t:n:v', ['gitstate=', 'tempdir=', 'nrepack=', 'verbose'])
+    options = ['gitstate=', 'tempdir=', 'nrepack=', 'verbose']
+    opts, args = getopt.getopt(sys.argv[1:], 's:t:n:v', options)
     for o, a in opts:
         if o in ('-s', '--gitstate'):
             state = a
@@ -94,7 +103,7 @@ def getgitenv(user, date):
             verbose = True
     if len(args) != 1:
         raise Exception('params')
-except:
+except Exception:
     usage()
     sys.exit(1)
 
@@ -104,37 +113,38 @@ def getgitenv(user, date):
 if state:
     if os.path.exists(state):
         if verbose:
-            print 'State does exist, reading'
+            print('State does exist, reading')
         f = open(state, 'r')
         hgvers = pickle.load(f)
     else:
-        print 'State does not exist, first run'
+        print('State does not exist, first run')
 
 sock = os.popen('hg tip --template "{rev}"')
 tip = sock.read()
 if sock.close():
     sys.exit(1)
 if verbose:
-    print 'tip is', tip
+    print('tip is', tip)
 
 # Calculate the branches
 if verbose:
-    print 'analysing the branches...'
+    print('analysing the branches...')
 hgchildren["0"] = ()
 hgparents["0"] = (None, None)
 hgbranch["0"] = "master"
 for cset in range(1, int(tip) + 1):
     hgchildren[str(cset)] = ()
-    prnts = os.popen('hg log -r %d --template "{parents}"' % cset).read().strip().split(' ')
+    prnts = os.popen(
+        'hg log -r %d --template "{parents}"' % cset).read().strip().split(' ')
     prnts = map(lambda x: x[:x.find(':')], prnts)
     if prnts[0] != '':
         parent = prnts[0].strip()
     else:
         parent = str(cset - 1)
-    hgchildren[parent] += ( str(cset), )
+    hgchildren[parent] += (str(cset), )
     if len(prnts) > 1:
         mparent = prnts[1].strip()
-        hgchildren[mparent] += ( str(cset), )
+        hgchildren[mparent] += (str(cset), )
     else:
         mparent = None
 
@@ -148,59 +158,65 @@ def getgitenv(user, date):
             hgbranch[str(cset)] = hgbranch[parent]
     else:
         # Normal changesets
-        # For first children, take the parent branch, for the others create a new branch
+        # For first children, take the parent branch,
+        # for the others create a new branch
         if hgchildren[parent][0] == str(cset):
             hgbranch[str(cset)] = hgbranch[parent]
         else:
             hgbranch[str(cset)] = "branch-" + str(cset)
 
-if not hgvers.has_key("0"):
-    print 'creating repository'
+if "0" not in hgvers:
+    print('creating repository')
     os.system('git init')
 
 # loop through every hg changeset
 for cset in range(int(tip) + 1):
 
     # incremental, already seen
-    if hgvers.has_key(str(cset)):
+    if str(cset) in hgvers:
         continue
     hgnewcsets += 1
 
     # get info
-    log_data = os.popen('hg log -r %d --template "{tags}\n{date|date}\n{author}\n"' % cset).readlines()
+    log_data = os.popen(
+        'hg log -r %d --template "{tags}\n{date|date}\n{author}\n"' % cset
+    ).readlines()
     tag = log_data[0].strip()
     date = log_data[1].strip()
     user = log_data[2].strip()
     parent = hgparents[str(cset)][0]
     mparent = hgparents[str(cset)][1]
 
-    #get comment
+    # get comment
     (fdcomment, filecomment) = tempfile.mkstemp()
-    csetcomment = os.popen('hg log -r %d --template "{desc}"' % cset).read().strip()
+    csetcomment = os.popen(
+        'hg log -r %d --template "{desc}"' % cset).read().strip()
     os.write(fdcomment, csetcomment)
     os.close(fdcomment)
 
-    print '-----------------------------------------'
-    print 'cset:', cset
-    print 'branch:', hgbranch[str(cset)]
-    print 'user:', user
-    print 'date:', date
-    print 'comment:', csetcomment
+    print('-----------------------------------------')
+    print('cset:', cset)
+    print('branch:', hgbranch[str(cset)])
+    print('user:', user)
+    print('date:', date)
+    print('comment:', csetcomment)
     if parent:
-	print 'parent:', parent
+        print('parent:', parent)
     if mparent:
-        print 'mparent:', mparent
+        print('mparent:', mparent)
     if tag:
-        print 'tag:', tag
-    print '-----------------------------------------'
+        print('tag:', tag)
+    print('-----------------------------------------')
 
     # checkout the parent if necessary
     if cset != 0:
         if hgbranch[str(cset)] == "branch-" + str(cset):
-            print 'creating new branch', hgbranch[str(cset)]
-            os.system('git checkout -b %s %s' % (hgbranch[str(cset)], hgvers[parent]))
+            print('creating new branch', hgbranch[str(cset)])
+            os.system(
+                'git checkout -b %s %s' % (hgbranch[str(cset)], hgvers[parent])
+            )
         else:
-            print 'checking out branch', hgbranch[str(cset)]
+            print('checking out branch', hgbranch[str(cset)])
             os.system('git checkout %s' % hgbranch[str(cset)])
 
     # merge
@@ -209,11 +225,18 @@ def getgitenv(user, date):
             otherbranch = hgbranch[mparent]
         else:
             otherbranch = hgbranch[parent]
-        print 'merging', otherbranch, 'into', hgbranch[str(cset)]
-        os.system(getgitenv(user, date) + 'git merge --no-commit -s ours "" %s %s' % (hgbranch[str(cset)], otherbranch))
+        print('merging', otherbranch, 'into', hgbranch[str(cset)])
+        mrg = 'git merge --no-commit -s ours "" %s %s' % (
+            hgbranch[str(cset)], otherbranch)
+        os.system(getgitenv(user, date) + mrg)
 
     # remove everything except .git and .hg directories
-    os.system('find . \( -path "./.hg" -o -path "./.git" \) -prune -o ! -name "." -print | xargs rm -rf')
+    xargs_rm = 'xargs rm -rf'
+    ignore_path = r'\( -path "./.hg" -o -path "./.git" \)'
+    rm_all = r'find . {0} -prune -o ! -name "." -print | {1}'.format(
+        ignore_path,
+        xargs_rm)
+    os.system(rm_all)
 
     # repopulate with checkouted files
     os.system('hg update -C %d' % cset)
@@ -221,10 +244,13 @@ def getgitenv(user, date):
     # add new files
     os.system('git ls-files -x .hg --others | git update-index --add --stdin')
     # delete removed files
-    os.system('git ls-files -x .hg --deleted | git update-index --remove --stdin')
+    rm_f = 'git ls-files -x .hg --deleted | git update-index --remove --stdin'
+    os.system(rm_f)
 
     # commit
-    os.system(getgitenv(user, date) + 'git commit --allow-empty --allow-empty-message -a -F %s' % filecomment)
+    commit = 'git commit --allow-empty --allow-empty-message -a -F {}'.format(
+        filecomment)
+    os.system(getgitenv(user, date) + commit)
     os.unlink(filecomment)
 
     # tag
@@ -233,12 +259,12 @@ def getgitenv(user, date):
 
     # delete branch if not used anymore...
     if mparent and len(hgchildren[str(cset)]):
-        print "Deleting unused branch:", otherbranch
+        print("Deleting unused branch:", otherbranch)
         os.system('git branch -d %s' % otherbranch)
 
     # retrieve and record the version
     vvv = os.popen('git show --quiet --pretty=format:%H').read()
-    print 'record', cset, '->', vvv
+    print('record', cset, '->', vvv)
     hgvers[str(cset)] = vvv
 
 if hgnewcsets >= opt_nrepack and opt_nrepack != -1:
@@ -247,7 +273,7 @@ def getgitenv(user, date):
 # write the state for incrementals
 if state:
     if verbose:
-        print 'Writing state'
+        print('Writing state')
     f = open(state, 'w')
     pickle.dump(hgvers, f)
 

--
https://github.com/git/git/pull/458

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-09-18 17:55 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-15 11:18 [PATCH] make hg-to-git compatible with python2.x and 3.x Hervé Beraud
2018-02-15 22:06 ` Junio C Hamano
2018-02-20 16:52 ` Hervé Beraud
2018-02-20 19:14   ` Junio C Hamano
2018-02-20 19:19     ` Junio C Hamano
2019-09-17 13:41   ` [PATCH] Rewrite feature to render " Hervé Beraud
2019-09-17 22:35     ` Junio C Hamano
2019-09-17 22:40       ` Junio C Hamano
2019-09-18  8:33     ` [PATCH v2] hg-to-git: make it compatible with both python3 and python2 Hervé Beraud
2019-09-18 17:21       ` Junio C Hamano
2019-09-18 17:55       ` [PATCH v3] " Hervé Beraud

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).