7 years agoAdd filename encoding option --fe master
Han Sangjin [Tue, 3 Nov 2015 07:12:46 +0000 (16:12 +0900)]
Add filename encoding option --fe

In some locales Mercurial uses different encodings for commit messages
and file names. The --fe option allows the filename encoding to be

7 years agoAllow branches and tags to be remapped
Frej Drejhammar [Sun, 16 Aug 2015 15:13:04 +0000 (17:13 +0200)]
Allow branches and tags to be remapped

Branch and tag names can now be renamed using a mechanism similar to the
-A option for author names.

-B specifies a mapping file for branch names, and -T a mapping file for

7 years agorefactor: Make author map loading more generic
Frej Drejhammar [Sun, 16 Aug 2015 11:09:51 +0000 (13:09 +0200)]
refactor: Make author map loading more generic

This is the first step in adding mappings for branches and tags.

7 years agoSurvive corrupt source repositories
Frej Drejhammar [Sat, 15 Aug 2015 17:32:59 +0000 (19:32 +0200)]
Survive corrupt source repositories

Apparently a bug ( in
multiple released versions of Mercurial could produce commits where
files had absolute paths.

As a "healthy" repo should not contain any absolute paths, it should be
safe to always strip a leading '/' from the path and let the conversion

8 years agoMake -e option apply to imported filenames
zed [Sun, 26 Oct 2014 17:53:20 +0000 (20:53 +0300)]
Make -e option apply to imported filenames

When the -e option is given, convert imported filenames just as we do
for metadata and author information.

8 years agoAdd option for specifying the text encoding used by Mercurial
zed [Sat, 25 Oct 2014 10:18:41 +0000 (13:18 +0300)]
Add option for specifying the text encoding used by Mercurial

When a mercurial repository does not use utf-8 for encoding author
strings and commit messages the "-e <encoding>" command line option
can be used to force fast-export to convert incoming meta data from
<encoding> to utf-8.

When "-e <encoding>" is given, we use Python's string
decoding/encoding API to convert meta data on the fly when processing

8 years agoDo not rely on "type -p"
Frej Drejhammar [Tue, 23 Sep 2014 13:01:02 +0000 (15:01 +0200)]
Do not rely on "type -p"

Apparently dash (used as bin/sh on Ubuntu) does not support type -p.

Thanks to Esben Madsen for noticing and suggesting a fix.

8 years agoMerge pull request #37 from ottxor/master
frej [Fri, 19 Sep 2014 11:39:31 +0000 (13:39 +0200)]
Merge pull request #37 from ottxor/master

Fix ROOT if hg-fast-export is in PATH

8 years agoFix ROOT if hg-fast-export is in PATH
Christoph Junghans [Thu, 11 Sep 2014 17:43:44 +0000 (11:43 -0600)]
Fix ROOT if hg-fast-export is in PATH

dirname $0 will return "." if hg-fast-export is in the path.
Use "type -p" to find the full path to the script.

8 years agoOnly dump heads in head cache
Frej Drejhammar [Sun, 6 Jul 2014 12:59:28 +0000 (14:59 +0200)]
Only dump heads in head cache

If there is a tag with the same name as a tag, "git rev-parse <name>"
can give the hash of the tag instead of the branch. "git rev-parse
refs/heads/<name>" must be used to make sure we only find branches.

8 years agoUpdate README with note about no working directory
Chris [Fri, 30 May 2014 00:58:34 +0000 (20:58 -0400)]
Update README with note about no working directory

If you run the commands listed in usage

  mkdir repo-git # or whatever
  cd repo-git
  git init -r <repo>

you are not given a working directory to start working in. I was
caught off-guard by this when I ran `git status` and everything in the
repo was listed as deleted. A quick google search indicates I'm not
the only one who was surprised.

8 years agoAnnotate commits with the hg hash as git notes in the hg namespace
Piotr Święcicki [Tue, 22 Apr 2014 21:00:44 +0000 (23:00 +0200)]
Annotate commits with the hg hash as git notes in the hg namespace

If the --hg-hash argument is given, the converted commits are
annotated with the original hg hash as a git note in the "hg"

The notes can be shown by git log using the "--notes=hg" argument.

8 years replace egrep with grep
Kyle J. McKay [Fri, 28 Mar 2014 23:39:08 +0000 (16:39 -0700)] replace egrep with grep

According to the POSIX standard, egrep is an obsolescent equivalent
of grep -E.  In fact, the patterns actually being used with egrep do
not require use of extended regular expressions at all, so a plain
'grep' can be used rather than 'grep -E'.

Replace egrep with grep to improve compatibility across systems.

8 years do not sort merge commit parents
Kyle J. McKay [Sat, 15 Mar 2014 07:12:44 +0000 (00:12 -0700)] do not sort merge commit parents

In a merge commit, the first parent is always the same parent that
would be recorded if the commit were not a merge and the other
parent(s) record the commit(s) being merged in.

Preserving this order is important so that log --first-parent works
properly and also so that the merge history is not distorted by an
incorrect permutation of the DAG.

Remove the code that sorts the merge parents based on node id so
that the correct DAG order is preserved.

8 years agoMerge pull request #23 from ritcheyer/master
frej [Sun, 16 Mar 2014 15:05:47 +0000 (16:05 +0100)]
Merge pull request #23 from ritcheyer/master

checking for - and converting - backslashes

Thank you for your contribution!

8 years improve authors file compatibility
Kyle J. McKay [Sat, 15 Mar 2014 23:48:10 +0000 (16:48 -0700)] improve authors file compatibility

The authors file format accepted by git-svnimport and git-cvsimport
actually allows blank lines and comment lines that start with '#'.

Ignore blank lines and lines starting with '#' as the first
non-whitespace character to be compatible with the authors file
format accepted by the referenced tools.

8 years clean up help text and support --help
Kyle J. McKay [Sat, 15 Mar 2014 08:26:08 +0000 (01:26 -0700)] clean up help text and support --help

Intercept -h/--help before git-sh-setup so the proper script name
can be shown instead of "hg" which is wrong.

Reorder the long option descriptions to be in the same order as
the short usage since, as the help says, "argument order matters."

8 years agohg-fast-export: support new --hgtags option
Kyle J. McKay [Sat, 15 Mar 2014 07:54:45 +0000 (00:54 -0700)]
hg-fast-export: support new --hgtags option

Add support for a new --hgtags option.  When given, any .hgtags
files that may be present are exported.

Normally this is not desirable.  However, when attempting to mimic
the actions of other hg exporters that always export any .hgtags
files this option can help produce matching export data.

8 years do not lose file mode changes
Kyle J. McKay [Sat, 15 Mar 2014 07:03:28 +0000 (00:03 -0700)] do not lose file mode changes

If the file mode changes (for example from 10644 to 10755), but the
actual text of the file itself does not, then the change could be
missed since the hashes would remain the same.

If the hashes match, also compare the gitmode values before deciding
the file is unchanged.

8 years support older hg versions
Kyle J. McKay [Sat, 15 Mar 2014 05:18:08 +0000 (22:18 -0700)] support older hg versions

Do not use the closesbranch function as it was added in later
versions of hg.  Use its definition instead.

8 years restore compatibility with older python
Kyle J. McKay [Sat, 15 Mar 2014 04:06:53 +0000 (21:06 -0700)] restore compatibility with older python

Since hg runs and supports older versions of python,
should too.  Replace dictionary comprehension with equivalent code that
supports versions of python older than 2.7.

8 years Do not ignore exit code
Kyle J. McKay [Sat, 15 Mar 2014 04:02:26 +0000 (21:02 -0700)] Do not ignore exit code

Originally 9643aa5d did this by using a bashism even though the
/bin/sh interpreter is being used.

Then ea55929e attempted to compensate for this by disabling the
bashism when the interpreter was not actually bash which results
in the exit code still being ignored in that case.

Instead check the error code without requiring a bashism.

8 years agoRevert "Don't ignore exit code"
Kyle J. McKay [Sat, 15 Mar 2014 04:01:55 +0000 (21:01 -0700)]
Revert "Don't ignore exit code"

This reverts commit 9643aa5df2e14e01867bc4266958b8c8081c3377.

8 years agoRevert "Make bashism conditional on the shell being bash"
Kyle J. McKay [Sat, 15 Mar 2014 04:01:35 +0000 (21:01 -0700)]
Revert "Make bashism conditional on the shell being bash"

This reverts commit aaccfba9a0cfcfdd4db1e629b50d65b1c479b64f.

8 years agochecking for - and converting - backslashes
Eric Ritchey [Thu, 13 Mar 2014 21:32:10 +0000 (14:32 -0700)]
checking for - and converting - backslashes

8 years agoMerge pull request #22 from TracyWebTech/master
frej [Fri, 14 Feb 2014 16:14:12 +0000 (17:14 +0100)]
Merge pull request #22 from TracyWebTech/master

Not using branchtags

8 years agoFixing for hg 2.9
Sergio Oliveira [Mon, 10 Feb 2014 10:32:27 +0000 (08:32 -0200)]
Fixing for hg 2.9

8 years agoFix typo+grammo in README
Frej Drejhammar [Wed, 8 Jan 2014 19:29:55 +0000 (20:29 +0100)]
Fix typo+grammo in README

9 years agoMake bashism conditional on the shell being bash
Frej Drejhammar [Sun, 15 Sep 2013 10:26:43 +0000 (12:26 +0200)]
Make bashism conditional on the shell being bash

This avoids breakage due to 9643aa5d on shells other than bash.

9 years agoGive a proper error message when the hg repo is not known
Frej Drejhammar [Sun, 8 Sep 2013 12:32:08 +0000 (14:32 +0200)]
Give a proper error message when the hg repo is not known always passes the --repo flag to
If, for some reason, we have a state file where the repo-url is an
empty string the checks in will not work and the
user will be confused. Therefore we check that the url is specified
before calling

9 years agoMerge pull request #16 from zr40/patch-1
frej [Wed, 4 Sep 2013 09:11:03 +0000 (02:11 -0700)]
Merge pull request #16 from zr40/patch-1

Don't ignore exit code

9 years agoDon't ignore exit code
Matthijs van der Vleuten [Wed, 4 Sep 2013 07:43:17 +0000 (09:43 +0200)]
Don't ignore exit code

9 years agoFix mapping option, close #10
Fantomas42 [Fri, 21 Jun 2013 16:35:38 +0000 (18:35 +0200)]
Fix mapping option, close #10

10 years agoUpdate README with pointer to the github issue tracker
Frej Drejhammar [Sat, 13 Oct 2012 14:27:06 +0000 (16:27 +0200)]
Update README with pointer to the github issue tracker

10 years agoRename hg-fast-export.txt to README
Frej Drejhammar [Sat, 13 Oct 2012 14:18:15 +0000 (16:18 +0200)]
Rename hg-fast-export.txt to README

10 years agoMerge pull request #7 from living180/master
frej [Sun, 30 Sep 2012 19:09:08 +0000 (12:09 -0700)]
Merge pull request #7 from living180/master

Make Windows support actually work

10 years agoMake hg-fast-export (actually) work on Windows
Daniel Harding [Sun, 30 Sep 2012 06:24:16 +0000 (07:24 +0100)]
Make hg-fast-export (actually) work on Windows

Because on Windows sys.stdout is initially in text mode, any LF
characters written to it will be transformed to CRLF, which causes git
to blow up.  This change uses Windows platform-specific code to change
sys.stdout to binary mode.

10 years agoMerge pull request #6 from aried3r/master
frej [Fri, 10 Aug 2012 16:10:44 +0000 (09:10 -0700)]
Merge pull request #6 from aried3r/master

Fix for Mercurial 2.3 compatibility

10 years agoOrganized imports
Anton Rieder [Mon, 6 Aug 2012 23:35:09 +0000 (01:35 +0200)]
Organized imports

After an update to Mercurial 2.3 the module 'repo' was removed and the
program crashed when trying to convert a repository. I checked the
imports with 'pyflakes' and removed all unused ones, repo (among
others) was never used.

10 years agoMerge pull request #5 from living180/master
frej [Fri, 1 Jun 2012 15:05:31 +0000 (08:05 -0700)]
Merge pull request #5 from living180/master

Make hg-fast-export work on Windows

10 years agoMake hg-fast-export work on Windows
Daniel Harding [Wed, 21 Mar 2012 23:16:11 +0000 (23:16 +0000)]
Make hg-fast-export work on Windows

* use sys.stdout.write instead of print to avoid end-of-line issues
* use os.devnull instead of hard-coding /dev/null

10 years agoMerge pull request #4 from aried3r/master
frej [Sun, 20 May 2012 17:31:40 +0000 (10:31 -0700)]
Merge pull request #4 from aried3r/master

Fixed a bug related to sanitizing branch names.

10 years agoApplied rule #7 of git-check-ref-format
Anton Rieder [Wed, 16 May 2012 21:44:00 +0000 (23:44 +0200)]
Applied rule #7 of git-check-ref-format

Rule #7 of git-check-ref-format states "7. They cannot end with a dot
'.'." which was not yet implemented in fast-export. This commit fixes

10 years agoUpdate documentation: The tool is no longer called hg-fast-import
Frej Drejhammar [Fri, 27 Jan 2012 19:06:07 +0000 (20:06 +0100)]
Update documentation: The tool is no longer called hg-fast-import

10 years agoMention the author map file in the readme
Frej Drejhammar [Fri, 27 Jan 2012 19:02:54 +0000 (20:02 +0100)]
Mention the author map file in the readme

10 years agoAdd usage info for the --force option
David Wragg [Mon, 23 Jan 2012 16:17:44 +0000 (16:17 +0000)]
Add usage info for the --force option

10 years agoCommits with no parent need a reset command.
Barry Wardell [Mon, 5 Dec 2011 23:13:57 +0000 (23:13 +0000)]
Commits with no parent need a reset command.

This fixes a problem where a repository is imported incorrectly when there is a merge
between two branches with no common history.

11 years agoSupport the case where the author field has an empty email address, i.e. it is of...
Barry Wardell [Wed, 23 Nov 2011 22:12:52 +0000 (22:12 +0000)]
Support the case where the author field has an empty email address, i.e. it is of the form 'name <>'.

11 years agoUse hg methods to extract name and email when doing user fixup
Paul O’Shannessy [Tue, 18 Oct 2011 23:20:54 +0000 (16:20 -0700)]
Use hg methods to extract name and email when doing user fixup

11 years should fail if git-fast-import fails
David Wragg [Mon, 13 Jun 2011 12:05:47 +0000 (13:05 +0100)] should fail if git-fast-import fails

Previously, git-fast-import could fail, and exit with a non-zero status.
But the exit status of would not reflect this.

11 years agoSupport passing --force to git-fast-import
David Wragg [Wed, 17 Nov 2010 00:32:12 +0000 (00:32 +0000)]
Support passing --force to git-fast-import

11 years agoRemove \" from the user string before trying to extract name and email
Frej Drejhammar [Fri, 18 Mar 2011 18:12:45 +0000 (19:12 +0100)]
Remove \" from the user string before trying to extract name and email

Signed-off-by: Frej Drejhammar <>
Reported-by: Cole Robinson <>
Thank's to Cole Robinson for reporting the bug and providing a fix
which was adapted to this patch.

The original bug report:

I was recently converting a few mercurial repositories to git, and
noticed certain commits had their date reset to Jan 1 1970.

An example repo:

An example commit:

After some poking, it seems the culprit was that the "author:" was
surrounded by quotation marks

12 years agoThe "verifying branch" message is not very interesting
David Wragg [Mon, 20 Sep 2010 09:58:18 +0000 (10:58 +0100)]
The "verifying branch" message is not very interesting

Particularly if the repo has hundreds of branches.

12 years agoSimplify handling of parents of exported commit
David Wragg [Mon, 20 Sep 2010 09:55:24 +0000 (10:55 +0100)]
Simplify handling of parents of exported commit

The previous code did an awful lot of work to infer the parents of an
exported commit, incorporating information from many sources.  But
there were multiple bugs in this scheme, sometimes resulting in merge
commits with two parents pointing to the same commit object.

Instead, use a much more straightforward process of mapping the
parents stored in hg.

13 years agoMaintain backwards compatibility for ui setup
Rocco Rutte [Mon, 25 May 2009 13:17:33 +0000 (15:17 +0200)]
Maintain backwards compatibility for ui setup

Signed-off-by: Rocco Rutte <>
13 years agoUpdate to work with mercurial ui refactorings
Rocco Rutte [Thu, 14 May 2009 12:53:42 +0000 (14:53 +0200)]
Update to work with mercurial ui refactorings

Signed-off-by: Rocco Rutte <>
13 years agohg-fast-export: Compare HG revisions when merging
Matthias Urlichs [Sun, 16 Nov 2008 14:43:44 +0000 (15:43 +0100)]
hg-fast-export: Compare HG revisions when merging

hg-fast-export uses hg's branch order (from the log) when merging,
this is a problem. Consider the case:

HG repo A  has revisions 1-10. Repository B is cloned from that.
Subsequently, A adds revision 11, and B adds a different change which
also has revision 11. If B now pulls from A, A's rev11 will have the
number 12; if A then pulls from B, the reverse also holds. So the logs
are different even though they contain the exact same changes.

hg-fast-export will thus create different git repositories for A and B,
even though the contents are identical for all practical purposes.
In particular, the repos would be identical if A and B had used git from
the beginning.

To fix that, compare HG revisions instead of log positions.

13 years agohg-fast-export: Support branches without parents
Rocco Rutte [Tue, 27 Jan 2009 14:34:46 +0000 (15:34 +0100)]
hg-fast-export: Support branches without parents

Previously we fed the full revision only for the first one and deltas
for all following including branches being forked off. This doesn't work
with branches that are forked from revision 0. In case such a branch is
found, we now also feed the full revision.

Signed-off-by: Rocco Rutte <>
13 years agohg-fast-export: Point out that only local repos are supported
Frej Drejhammar [Fri, 16 Jan 2009 19:09:52 +0000 (20:09 +0100)]
hg-fast-export: Point out that only local repos are supported

Signed-off-by: Frej Drejhammar <>
13 years agohg-fast-export: Update todo now that tag movement is supported
Rocco Rutte [Tue, 30 Dec 2008 20:52:32 +0000 (21:52 +0100)]
hg-fast-export: Update todo now that tag movement is supported

Signed-off-by: Rocco Rutte <>
13 years agoMerge branch 'from-jmcmullan' into develop
Frej Drejhammar [Sat, 20 Dec 2008 18:57:39 +0000 (19:57 +0100)]
Merge branch 'from-jmcmullan' into develop


13 years agohg-fast-export: add option to track remote branches under a custom namespace
Fabrizio Chiarello [Fri, 19 Sep 2008 16:31:53 +0000 (18:31 +0200)]
hg-fast-export: add option to track remote branches under a custom namespace

Add -o, --origin <name> to allow user to set a namespace used
when importing remote branches.

Signed-off-by: Fabrizio Chiarello <>
13 years agohg export: Support tag movement
Jason S. McMullan [Thu, 11 Dec 2008 14:05:05 +0000 (09:05 -0500)]
hg export: Support tag movement

HG tag movement is now supported with this patch.

This patch creates a .git/hg2git-mapping file, which maps
HG revision numbers to HG hashes. Combined with the
.git/hg2git-marks file, which maps HG revisions to GIT hashes,
we can now reprocess all tags at the end of each hg export

14 years agohg2git: Update copyrights and maintainership information.
Rocco Rutte [Tue, 25 Nov 2008 10:25:22 +0000 (11:25 +0100)]
hg2git: Update copyrights and maintainership information.

Signed-off-by: Rocco Rutte <>
14 years agohg-fast-export: Make default branch customizable
Fabrizio Chiarello [Thu, 18 Sep 2008 19:10:16 +0000 (21:10 +0200)]
hg-fast-export: Make default branch customizable

Add -M, --default-branch <branch_name> to allow user to set
the default branch where to pull into

Signed-off-by: Fabrizio Chiarello <>
14 years agohg-fast-export: Catch up with mercurial crew API changes
Rocco Rutte [Fri, 19 Sep 2008 06:01:53 +0000 (08:01 +0200)]
hg-fast-export: Catch up with mercurial crew API changes

Signed-off-by: Rocco Rutte <>
14 years Use appropriate file mode for symlinks.
Peter Colberg [Sun, 17 Aug 2008 12:11:53 +0000 (14:11 +0200)] Use appropriate file mode for symlinks.

14 years agohg-fast-export: work still if git-commands are not in PATH
Jonathan Nieder [Fri, 18 Jul 2008 06:32:37 +0000 (01:32 -0500)]
hg-fast-export: work still if git-commands are not in PATH

In git 1.6.0, most git tools with a dash in the name will no
longer be installed in $bindir.  This patch makes hg-fast-export
use the "git <command>" form so it will work even if "git" is
the only piece of git machinery in the user's PATH.

On the other hand, the "git <command>" form does not help for
sourcing a shell script (with ".").  So use the full path to
source "git-sh-setup".

Signed-off-by: Jonathan Nieder <>
14 years agoRevert "hg2git: Replaces space with "_" in branches name"
Rocco Rutte [Tue, 3 Jun 2008 11:53:08 +0000 (13:53 +0200)]
Revert "hg2git: Replaces space with "_" in branches name"

The get_branch() function's purpose is to detect whether a mercurial
branch name actually should be considered the default branch.

Sanitizing branch and tag names for git is done in sanitize_name().

Noted by Jonathan Nieder.

This reverts commit cdfdae36c8a73fb257eceff33b03d2f320bafc6b.

14 years sanitize tildes (~) in branch names
Jonathan Nieder [Mon, 2 Jun 2008 18:23:48 +0000 (13:23 -0500)] sanitize tildes (~) in branch names

In git-check-ref-format (1), there is the following rule for refnames:

3. It cannot have ASCII control character (i.e. bytes
   whose values are lower than \040, or \177 DEL), space,
   tilde ~, caret ^, colon :, question-mark ?, asterisk *,
   or open bracket [ anywhere;

and indeed, this rule is enforced by "git fast-import". hg-fast-export
already checked for all of the visible characters listed except for ~
and converted them to underscores. For some reason the tilde was
forgotten. This patch makes good on the omission.

Note that control characters are still left alone.

Signed-off-by: Jonathan Nieder <>
Signed-off-by: Rocco Rutte <>
14 years agoClarify where 'HEAD' branch name comes from
Rocco Rutte [Fri, 30 May 2008 11:44:07 +0000 (13:44 +0200)]
Clarify where 'HEAD' branch name comes from

Signed-off-by: Rocco Rutte <>
14 years agohg2git: Replaces space with "_" in branches name
Felipe Zimmerle [Fri, 30 May 2008 11:41:56 +0000 (13:41 +0200)]
hg2git: Replaces space with "_" in branches name

Since space doesn't conform to GIT branches name standards,
it should be replaced or with another character.

Signed-off-by: Felipe Zimmerle <>
Signed-off-by: Rocco Rutte <>
15 years Cache possibly sanitized branch names
Rocco Rutte [Fri, 26 Oct 2007 15:11:57 +0000 (17:11 +0200)] Cache possibly sanitized branch names

...instead of doing it for every single commit.

Signed-off-by: Rocco Rutte <>
15 years agoMerge branch 'fixes'
Rocco Rutte [Fri, 26 Oct 2007 14:29:18 +0000 (14:29 +0000)]
Merge branch 'fixes'

* fixes: Sanitize ref names Don't attempt to dump revs beyond tip with -m Minor tweaks/cleanup

15 years Sanitize ref names
Rocco Rutte [Fri, 26 Oct 2007 14:06:40 +0000 (16:06 +0200)] Sanitize ref names

At least the opensolaris hg repo has tag names containing '*',
so sanitize all branch and tag names roughly according to the
specs for git-check-ref-format(1).

Signed-off-by: Rocco Rutte <>
15 years Don't attempt to dump revs beyond tip with -m
Rocco Rutte [Thu, 25 Oct 2007 13:23:17 +0000 (15:23 +0200)] Don't attempt to dump revs beyond tip with -m

Signed-off-by: Rocco Rutte <>
15 years Minor tweaks/cleanup
Rocco Rutte [Thu, 25 Oct 2007 13:21:46 +0000 (15:21 +0200)] Minor tweaks/cleanup

Remove some unused variables, generalize dictionary-splitting and make
sure we don't sort filename lists twice (repo.status returns files
sorted already).

Signed-off-by: Rocco Rutte <>
15 years agoFix shell substitution typo
Rocco Rutte [Mon, 22 Oct 2007 08:28:41 +0000 (08:28 +0000)]
Fix shell substitution typo

Signed-off-by: Rocco Rutte <>
15 years Use mangle_key() for load_cache() as does
Rocco Rutte [Mon, 22 Oct 2007 08:28:18 +0000 (08:28 +0000)] Use mangle_key() for load_cache() as does

Signed-off-by: Rocco Rutte <>
15 years Rewrite merge logic
Rocco Rutte [Mon, 22 Oct 2007 08:06:58 +0000 (10:06 +0200)] Rewrite merge logic

Merges were completely broken as they ended up with twice the same
parent in git. Still everything besides gitk seemed to work.

This because of 1) the incorrect assumption that a commit's parent is
the commit exported right before it and 2) some confusion with markes
being saved/loaded/used since git-fast-import doesn't allow for a ":0"
mark to map hg revision 1:1 to marks.

The merge "algorithm" now works like this:

1) If the commit's higher parent (highest hg rev), is not the last
commit exported for a particular branch, we issue a "from" command to
place it on top of it.

2) If the commit's lower parent exists, we issue a "merge" for it.

This is much simpler and seems to produce correct merges in git. And
while I'm at it, make output less confusing by prepending the target
branch name to each line.

The "twice the same parent" bug was discovered by Michele Ballabio on
the git list.

Signed-off-by: Rocco Rutte <>
15 years Allow consumers to modify keys of dicts returned by load_cache()
Rocco Rutte [Mon, 22 Oct 2007 07:50:52 +0000 (09:50 +0200)] Allow consumers to modify keys of dicts returned by load_cache()

By default, the key is not changed. This will allow us for fixing up the
off-by-one issue with marks restored using load_cache().

Signed-off-by: Rocco Rutte <>
15 years Use git-rev-parse to get SHA1s instead of reading files below refs/ directly
Rocco Rutte [Mon, 22 Oct 2007 07:48:48 +0000 (09:48 +0200)] Use git-rev-parse to get SHA1s instead of reading files below refs/ directly

This should now also properly support packed refs.

Signed-off-by: Rocco Rutte <>
15 years Map 'HEAD', 'default' and '' hg branches to 'master' in git
Rocco Rutte [Mon, 22 Oct 2007 07:44:12 +0000 (09:44 +0200)] Map 'HEAD', 'default' and '' hg branches to 'master' in git

Also add a note where HEAD is comming from.

Signed-off-by: Rocco Rutte <>
15 years agoAllow for $PYTHON environment variable specifying python binary to use
Rocco Rutte [Mon, 22 Oct 2007 07:34:40 +0000 (09:34 +0200)]
Allow for $PYTHON environment variable specifying python binary to use

Signed-off-by: Rocco Rutte <>
15 years agoThis prevents invalid command errors caused by bytes not being flushed to
Scott Lamb [Mon, 16 Jul 2007 08:31:00 +0000 (01:31 -0700)]
This prevents invalid command errors caused by bytes not being flushed to
git-fastimport in the same order as they were written to the buffer.

Signed-off-by: Scott Lamb <>
15 years agoRemoved git-p4 from fast-export. It has been moved to git.git:contrib/fast-import.
Simon Hausmann [Mon, 25 Jun 2007 08:34:20 +0000 (10:34 +0200)]
Removed git-p4 from fast-export. It has been moved to git.git:contrib/fast-import.

Signed-off-by: Simon Hausmann <>
15 years agoMake it possible to specify the HEAD for the internal findUpstreamBranchPoint function.
Simon Hausmann [Thu, 21 Jun 2007 22:01:57 +0000 (00:01 +0200)]
Make it possible to specify the HEAD for the internal findUpstreamBranchPoint function.

This isn't used right now in git-p4 but I use it in an external script that loads git-p4 as module.

Signed-off-by: Simon Hausmann <>
15 years agoAdded git-p4 branches command that shows the mapping of perforce depot paths to impor...
Simon Hausmann [Wed, 20 Jun 2007 21:10:28 +0000 (23:10 +0200)]
Added git-p4 branches command that shows the mapping of perforce depot paths to imported git branches.

Signed-off-by: Simon Hausmann <>
15 years agoWarn about conflicting p4 branch mappings and use the first one found.
Simon Hausmann [Sun, 17 Jun 2007 13:10:24 +0000 (15:10 +0200)]
Warn about conflicting p4 branch mappings and use the first one found.

Signed-off-by: Simon Hausmann <>
15 years agoFix the branch mapping detection to be independent from the order of the "p4 branches...
Simon Hausmann [Sun, 17 Jun 2007 09:25:34 +0000 (11:25 +0200)]
Fix the branch mapping detection to be independent from the order of the "p4 branches" output.

Collect "unknown" source branches separately and register them at the end.

Also added a minor speed up to splitFilesIntoBranches by breaking out of the loop through all branches when it's safe.

Signed-off-by: Simon Hausmann <>
15 years agogit-p4 fails when cloning a p4 depo.
Benjamin Sergeant [Fri, 8 Jun 2007 18:13:55 +0000 (11:13 -0700)]
git-p4 fails when cloning a p4 depo.

A perforce command with all the files in the repo is generated to get
all the file content.
Here is a patch to break it into multiple successive perforce command
who uses 4K of parameter max, and collect the output for later.

It works, but not for big depos, because the whole perforce depo
content is stored in memory in, and it looks like mine is
bigger than 2 Gigs, so I had to kill the process.

[Simon: I added the bit about using SC_ARG_MAX, as suggested by Han-Wen]

Signed-off-by: Benjamin Sergeant <>
Signed-off-by: Simon Hausmann <>
15 years agoFix initial multi-branch import.
Simon Hausmann [Sat, 16 Jun 2007 11:09:21 +0000 (13:09 +0200)]
Fix initial multi-branch import.

The list of existing p4 branches in git wasn't initialized.

15 years agoOnly use double quotes on Windows
Marius Storm-Olsen [Tue, 12 Jun 2007 13:27:52 +0000 (15:27 +0200)]
Only use double quotes on Windows

15 years agoFix git-p4 rebase to detect the correct upstream branch instead of unconditionally
Simon Hausmann [Tue, 12 Jun 2007 12:34:46 +0000 (14:34 +0200)]
Fix git-p4 rebase to detect the correct upstream branch instead of unconditionally
always rebasing on top of remotes/p4/master

15 years agoMoved the code from git-p4 submit to figure out the upstream branch point
Simon Hausmann [Tue, 12 Jun 2007 12:31:59 +0000 (14:31 +0200)]
Moved the code from git-p4 submit to figure out the upstream branch point
into a separate helper method.

15 years agogit-p4 submit: Fix missing quotes around p4 commands to make them work with spaces...
Simon Hausmann [Mon, 11 Jun 2007 21:40:25 +0000 (23:40 +0200)]
git-p4 submit: Fix missing quotes around p4 commands to make them work with spaces in filenames

Noticed by Alex Riesen

15 years agoMention remotes/p4/master also in the documentation.
Simon Hausmann [Mon, 11 Jun 2007 21:30:23 +0000 (23:30 +0200)]
Mention remotes/p4/master also in the documentation.

15 years agoProvide some information for single branch imports where the commits go
Simon Hausmann [Mon, 11 Jun 2007 21:28:03 +0000 (23:28 +0200)]
Provide some information for single branch imports where the commits go

15 years agogit-p4: check for existence of repo dir before trying to create
Kevin Green [Mon, 11 Jun 2007 20:48:07 +0000 (16:48 -0400)]
git-p4: check for existence of repo dir before trying to create

When using git-p4 in this manner:

git-p4 clone //depot/path/project myproject

If "myproject" already exists as a dir, but not a valid git repo, it fails
to create the directory.

Signed-off-by: Kevin Green <>
15 years agoWrite out the options tag in the log message of imports only if we actually have
Simon Hausmann [Mon, 11 Jun 2007 08:01:58 +0000 (10:01 +0200)]
Write out the options tag in the log message of imports only if we actually have