mirror of
https://github.com/frej/fast-export.git
synced 2026-05-07 03:26:45 +02:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e200cec39f | ||
|
|
51d5f893db | ||
|
|
19aa906308 | ||
|
|
50dc10770b |
13
README.md
13
README.md
@@ -24,6 +24,16 @@ you want to report a security bug. That way the next person having the
|
|||||||
same problem can benefit from the time spent solving the problem the
|
same problem can benefit from the time spent solving the problem the
|
||||||
first time.
|
first time.
|
||||||
|
|
||||||
|
System Requirements
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
This project depends on Python 2.7 and the Mercurial 4.6 package. If
|
||||||
|
Python is not installed, install it before proceeding. The Mercurial
|
||||||
|
package can be installed with `pip install mercurial`.
|
||||||
|
|
||||||
|
If you're on Windows, run the following commands in git bash (Git for
|
||||||
|
Windows).
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
@@ -33,7 +43,8 @@ Using hg-fast-export is quite simple for a mercurial repository <repo>:
|
|||||||
mkdir repo-git # or whatever
|
mkdir repo-git # or whatever
|
||||||
cd repo-git
|
cd repo-git
|
||||||
git init
|
git init
|
||||||
hg-fast-export.sh -r <repo>
|
hg-fast-export.sh -r <local-repo>
|
||||||
|
git checkout HEAD
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that hg-fast-export does not automatically check out the
|
Please note that hg-fast-export does not automatically check out the
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
|
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
|
||||||
|
|
||||||
from mercurial import node
|
from mercurial import node
|
||||||
|
from mercurial.scmutil import revsymbol
|
||||||
from hg2git import setup_repo,fixup_user,get_branch,get_changeset
|
from hg2git import setup_repo,fixup_user,get_branch,get_changeset
|
||||||
from hg2git import load_cache,save_cache,get_git_sha1,set_default_branch,set_origin_name
|
from hg2git import load_cache,save_cache,get_git_sha1,set_default_branch,set_origin_name
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
@@ -78,7 +79,7 @@ def get_filechanges(repo,revision,parents,mleft):
|
|||||||
l,c,r=[],[],[]
|
l,c,r=[],[],[]
|
||||||
for p in parents:
|
for p in parents:
|
||||||
if p<0: continue
|
if p<0: continue
|
||||||
mright=repo.changectx(p).manifest()
|
mright=revsymbol(repo,str(p)).manifest()
|
||||||
l,c,r=split_dict(mleft,mright,l,c,r)
|
l,c,r=split_dict(mleft,mright,l,c,r)
|
||||||
l.sort()
|
l.sort()
|
||||||
c.sort()
|
c.sort()
|
||||||
@@ -153,9 +154,13 @@ def sanitize_name(name,what="branch", mapping={}):
|
|||||||
# modifying names which previously were not touched it will break
|
# modifying names which previously were not touched it will break
|
||||||
# preexisting setups which are doing incremental imports.
|
# preexisting setups which are doing incremental imports.
|
||||||
#
|
#
|
||||||
# Use the -B and -T options to mangle branch and tag names
|
# Fast-export tries to not inflict arbitrary naming policy on the
|
||||||
# instead. If you have a source repository where this is too much
|
# user, instead it aims to provide mechanisms allowing the user to
|
||||||
# work to do manually, write a tool that does it for you.
|
# apply their own policy. Therefore do not add a transform which can
|
||||||
|
# already be implemented with the -B and -T options to mangle branch
|
||||||
|
# and tag names. If you have a source repository where this is too
|
||||||
|
# much work to do manually, write a tool that does it for you.
|
||||||
|
#
|
||||||
|
|
||||||
def dot(name):
|
def dot(name):
|
||||||
if not name: return name
|
if not name: return name
|
||||||
@@ -206,7 +211,7 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors,
|
|||||||
wr(desc)
|
wr(desc)
|
||||||
wr()
|
wr()
|
||||||
|
|
||||||
ctx=repo.changectx(str(revision))
|
ctx=revsymbol(repo,str(revision))
|
||||||
man=ctx.manifest()
|
man=ctx.manifest()
|
||||||
added,changed,removed,type=[],[],[],''
|
added,changed,removed,type=[],[],[],''
|
||||||
|
|
||||||
@@ -221,7 +226,7 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors,
|
|||||||
# later non-merge revision: feed in changed manifest
|
# later non-merge revision: feed in changed manifest
|
||||||
# if we have exactly one parent, just take the changes from the
|
# if we have exactly one parent, just take the changes from the
|
||||||
# manifest without expensively comparing checksums
|
# manifest without expensively comparing checksums
|
||||||
f=repo.status(repo.lookup(parents[0]),revnode)[:3]
|
f=repo.status(parents[0],revnode)[:3]
|
||||||
added,changed,removed=f[1],f[0],f[2]
|
added,changed,removed=f[1],f[0],f[2]
|
||||||
type='simple delta'
|
type='simple delta'
|
||||||
else: # a merge with two parents
|
else: # a merge with two parents
|
||||||
@@ -258,7 +263,7 @@ def export_note(ui,repo,revision,count,authors,encoding,is_first):
|
|||||||
if is_first:
|
if is_first:
|
||||||
wr('from refs/notes/hg^0')
|
wr('from refs/notes/hg^0')
|
||||||
wr('N inline :%d' % (revision+1))
|
wr('N inline :%d' % (revision+1))
|
||||||
hg_hash=repo.changectx(str(revision)).hex()
|
hg_hash=revsymbol(repo,str(revision)).hex()
|
||||||
wr('data %d' % (len(hg_hash)))
|
wr('data %d' % (len(hg_hash)))
|
||||||
wr_no_nl(hg_hash)
|
wr_no_nl(hg_hash)
|
||||||
wr()
|
wr()
|
||||||
|
|||||||
13
hg2git.py
13
hg2git.py
@@ -4,6 +4,9 @@
|
|||||||
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
|
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
|
||||||
|
|
||||||
from mercurial import hg,util,ui,templatefilters
|
from mercurial import hg,util,ui,templatefilters
|
||||||
|
from mercurial import error as hgerror
|
||||||
|
from mercurial.scmutil import revsymbol,binnode
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -69,7 +72,15 @@ def get_branch(name):
|
|||||||
return name
|
return name
|
||||||
|
|
||||||
def get_changeset(ui,repo,revision,authors={},encoding=''):
|
def get_changeset(ui,repo,revision,authors={},encoding=''):
|
||||||
node=repo.lookup(revision)
|
# Starting with Mercurial 4.6 lookup no longer accepts raw hashes
|
||||||
|
# for lookups. Work around it by changing our behaviour depending on
|
||||||
|
# how it fails
|
||||||
|
try:
|
||||||
|
node=repo.lookup(revision)
|
||||||
|
except hgerror.ProgrammingError:
|
||||||
|
node=binnode(revsymbol(repo,str(revision))) # We were given a numeric rev
|
||||||
|
except hgerror.RepoLookupError:
|
||||||
|
node=revision # We got a raw hash
|
||||||
(manifest,user,(time,timezone),files,desc,extra)=repo.changelog.read(node)
|
(manifest,user,(time,timezone),files,desc,extra)=repo.changelog.read(node)
|
||||||
if encoding:
|
if encoding:
|
||||||
user=user.decode(encoding).encode('utf8')
|
user=user.decode(encoding).encode('utf8')
|
||||||
|
|||||||
Reference in New Issue
Block a user