Kyle J. McKay [Mon, 14 Nov 2016 15:16:47 +0000 (14 07:16 -0800)]
hg-{fast-export,reset}.sh: add git --exec-path to PATH
Starting with Git 2.10.0, the git-sh-setup script expects
the git --exec-path directory to be in the PATH or it will
fail. Although there is a patch in the works to correct
this, many of the other scripts in the --exec-path directory
also assume the same thing.
Explicitly add git --exec-path to the front of the PATH just
like Git normally does so that git-sh-setup starts working
again without need of the patch and to future-proof the code
against similar breakage in the future.
As a result also switch to just plain ". git-sh-setup" to match
how the rest of the scripts in --exec-path run the setup script.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Sun, 10 Jul 2016 14:12:29 +0000 (10 07:12 -0700)]
hg-fast-export.sh: prune notes on missing marks
If --hg-hash is given and any marks were found to be missing (i.e. gc'd),
prune the refs/notes/hg tree if it exists.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Sun, 10 Jul 2016 13:21:44 +0000 (10 06:21 -0700)]
hg-fast-export.sh: handle gc'd marks
If there are any "unnamed" heads in the source repository, those
revisions will be imported successfully but not attached to any
ref and the next time gc is run they will be removed.
When git fast-import attempts to read the --import-marks file it
will complain (and die) when it gets to the mark that refers to the
now-deleted revision.
Avoid this issue by removing any no-longer-existing marks from the
input marks file.
This is never an issue for a full import, only for an incremental
import.
This change is only a partial solution for incremental imports. It
works fine as long as no future import attempts to use the gc'd
"unnamed" head as a parent or something to be tagged.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Sun, 10 Jul 2016 12:51:57 +0000 (10 05:51 -0700)]
hg-fast-export.py: include unnamed head's branch
"Unnamed head" is a bit of a misnomer, these "heads" actually do
have a branch name.
Show it to help diagnose the issue.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Mon, 4 Jul 2016 15:37:33 +0000 (4 08:37 -0700)]
hg-fast-export.sh: let git manage the marks
Ever since Git 1.5.1, "git fast-import" has supported an "--import-marks"
command and allowed the same file name to be used without conflict for both
the "--import-marks" and "--export-marks" options.
Therefore get rid of the kludgey code that exports to a temp file and then
attempts to combine the old and the new with uniq etc. etc.
By allowing Git to handle this the code is much simpler, Git always knows
about all the marks and there's no concern about the input to the 'uniq'
command not being in sorted order.
However, do export the marks to a different file so that in the unlikely
event of a disk full error where "git fast-import" fails to write the new
"--export-marks" file, no marks are lost and on success just replace the
old marks file with the new one.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Mon, 4 Jul 2016 06:35:06 +0000 (3 23:35 -0700)]
hg-fast-export.sh: replace awkward git-branch usage with git-for-each-ref
The porcelain "git-branch" command is not intended to necessarily be
machine readable. Switch to the "git-for-each-ref" plumbing command
instead which streamlines the process of creating hg2git-heads.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Mon, 4 Jul 2016 05:36:28 +0000 (3 22:36 -0700)]
hg-fast-export: get rid of ridiculous 'devnull@localhost' default
Use 'unknown' for an unknown email address by default rather than
the ridiculous 'devnull@localhost' value.
If compatibility with the previous default is needed than an explicit
-U devnull@localhost option must be given.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Wed, 29 Jun 2016 03:10:56 +0000 (28 20:10 -0700)]
hg-fast-export.py: do not mangle UTF-8 characters
Set the proper values so that UTF-8 characters in the source
repository are exported without mangling them to '?' characters.
With this change, the current value of LANG and LC_XXX environment
variables have absolutely NO effect on the fast-export result
which is how it should be.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Wed, 29 Jun 2016 01:42:32 +0000 (28 18:42 -0700)]
hg2git.py: do not require python 2.7
The subprocess.check_output call is a version 2.7 or later only
thingy. Replace it with something that's more compatible but still
avoids using os.popen.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Sun, 26 Jun 2016 04:44:12 +0000 (25 21:44 -0700)]
hg-fast-export.py: don't step on previous --hg-hash notes
If exporting in incremental mode it's important to preserve
any preexisting refs/notes/hg value which is easily accomplished
by adding a reset + from combination.
Ideally the previous refs/notes/hg value should be stored in the
heads cache and warned about changes outside the import process
just like all the other heads, but that's something for another time.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Frej Drejhammar [Fri, 15 Apr 2016 13:39:12 +0000 (15 15:39 +0200)]
Switch from os.popen() to subprocess.check_output() for running git rev-parse
os.popen() uses the shell, this is dangerous when the branch-name
contains characters which are interpreted by the shell, therefore switch
to subprocess.check_output() which doesn't involve the shell.
This closes issue #66.
Frej Drejhammar [Fri, 29 Jan 2016 16:20:45 +0000 (29 17:20 +0100)]
Remove obsolete and unsupported SVN tools
Hat tip to Sebastian Pipping for giving me a nudge to remove them.
Mark Raymond [Sat, 12 Dec 2015 10:34:02 +0000 (12 10:34 +0000)]
Use backquotes
Mark Raymond [Sat, 12 Dec 2015 10:25:31 +0000 (12 10:25 +0000)]
Use GitHub markdown
Mark Raymond [Sat, 12 Dec 2015 10:13:52 +0000 (12 10:13 +0000)]
Rename README to README.md
Frej Drejhammar [Sat, 15 Aug 2015 17:32:59 +0000 (15 19:32 +0200)]
Survive corrupt source repositories
Apparently a bug (http://bz.selenic.com/show_bug.cgi?id=3511) 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
continue.
Kyle J. McKay [Sun, 26 Jun 2016 04:13:12 +0000 (25 21:13 -0700)]
hg-{fast-export,reset}.sh: always set ROOT to full path
The dirname utility by itself may return a relative path,
combine it with cd and pwd -P to get an absolute one instead
in a fully POSIX compliant fashion.
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Kyle J. McKay [Wed, 23 Jul 2014 09:42:47 +0000 (23 02:42 -0700)]
Merge branch 'master' into girocco
Conflicts:
hg-fast-export.py
hg-fast-export.sh
Frej Drejhammar [Sun, 6 Jul 2014 12:59:28 +0000 (6 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.
Chris [Fri, 30 May 2014 00:58:34 +0000 (29 20:58 -0400)]
Update README with note about no working directory
If you run the commands listed in usage
```bash
mkdir repo-git # or whatever
cd repo-git
git init
hg-fast-export.sh -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.
Piotr Święcicki [Tue, 22 Apr 2014 21:00:44 +0000 (22 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"
namespace.
The notes can be shown by git log using the "--notes=hg" argument.
Kyle J. McKay [Fri, 18 Apr 2014 11:23:06 +0000 (18 04:23 -0700)]
hg-fast-export.sh: minor clean up and code optimization
Kyle J. McKay [Fri, 4 Apr 2014 12:52:36 +0000 (4 05:52 -0700)]
hg-fast-export: add support for --flatten option
When Git initially creates a ref, it stores a file in the file
system with the same name as the ref. If the ref contains '/'
characters, then the created file will have a path involving more
than one directory.
Unfortunately this means that Git cannot simultaneously create,
for example, a ref named 'refs/heads/master' and one named
'refs/heads/master/default'. This would require 'master' to be
both a file and a directory.
On the other hand, hg tags do not have this restriction.
Add a new --flatten option that converts '/' characters to '_'
characters in ref names so that directory/file ref name conflicts
can be avoided. For example, given a 'master' and 'master/default'
tag, they would generate 'refs/heads/master' and
'refs/heads/master_default' ref names when --flatten is used
thereby avoiding the conflict.
The --flatten option may be required in order to successfully
convert hg source repositories containing these conflicts.
Kyle J. McKay [Fri, 4 Apr 2014 12:13:28 +0000 (4 05:13 -0700)]
hg-fast-export.py: do not generate invalid ref names
Git has various rules about what is and is not a valid ref
name. These are summarized in the 'git help check-ref-format'
output.
Update the ref name conversion code to take into account all the
rules. Also compile the regexs only once and eliminate invalid
index exceptions.
These reference names no longer cause exceptions:
/a
a//b
These reference names no longer generate invalid names:
a@{b}
a.lock
All ref names that were previously converted to valid Git ref names
should continue to be converted to the same ref name now.
Kyle J. McKay [Fri, 4 Apr 2014 04:08:18 +0000 (3 21:08 -0700)]
hg-fast-export: add support for -U <addr> option
Instead of always using 'devnull@localhost' as the email address
when it is unknown, allow the address to use when the email is unknown
to be specified by the new -U <addr> option.
The default if -U <addr> is not used remains 'devnull@localhost'.
The specified address may be surrounded by optional whitespace and/or
optional '<' and '>'. The only thing that will cause it to be rejected
is if it's empty (after stripping surrounding "crud" characters and
removing internal '<', '>' and "\n" characters).
Kyle J. McKay [Fri, 4 Apr 2014 03:42:18 +0000 (3 20:42 -0700)]
hg2git.py: do not generate invalid fast-export names or emails
Git processes the user name and email portion of an author name by
first stripping any "crud" characters from both the beginning and
end of each, then removing any remaining '<', '>' or "\n" characters
and finally adding a surrounding '<' and '>' to the email and joining
that to the user name with a space.
While Git may appear to allow an empty name and/or email address in
the raw author data, doing so ultimately causes problems when any
attempt is made to use rebase, filter-branch or other such utilities,
so empty name and/or email addresses also need to be avoided.
The source commit data from hg appears to have few restrictions on
the format of the author information. This can easily result in bogus
author data being produced in the fast-export stream that then causes
git fast-import to fail with an error.
Fix this by performing Git-like processing of both the user name and
email as extracted from the hg commit author information.
The basic idea is to take anything to the left of the first '<' and
to the right of the last '>' as the user name and anything between
the first '<' and the last '>' as the user email. If there is no
'<' then the author data is either treated as a name only (if there's
no '@') or an email address only (if it contains an '@').
If there is no name, the part of the email up to the first '@' is used.
The resulting name and email are processed in the same manner as Git
before emitting them into the fast-export output stream.
The same output should be produced as the previous version produced
when that output is something that is valid for a fast-export stream.
Input that would have previously produced invalid fast-export author
data now produces valid output instead.
Some examples that now produce valid output instead of invalid:
first middle last <fml <at> example.com>
name <at> loca.tion
<name>
<name
name>
Kyle J. McKay [Fri, 28 Mar 2014 23:39:08 +0000 (28 16:39 -0700)]
hg-fast-export.sh/hg-reset.sh: 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.
Kyle J. McKay [Sat, 15 Mar 2014 07:12:44 +0000 (15 00:12 -0700)]
hg-fast-export.py: 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.
frej [Sun, 16 Mar 2014 15:05:47 +0000 (16 16:05 +0100)]
Merge pull request #23 from ritcheyer/master
checking for - and converting - backslashes
Thank you for your contribution!
Kyle J. McKay [Sat, 15 Mar 2014 23:48:10 +0000 (15 16:48 -0700)]
hg-fast-export.py: 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.
Kyle J. McKay [Sat, 15 Mar 2014 08:26:08 +0000 (15 01:26 -0700)]
hg-fast-export.sh: 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 fast-export.sh" 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."
Kyle J. McKay [Sat, 15 Mar 2014 07:54:45 +0000 (15 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.
Kyle J. McKay [Sat, 15 Mar 2014 07:03:28 +0000 (15 00:03 -0700)]
hg-fast-export.py: 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.
Kyle J. McKay [Sat, 15 Mar 2014 05:18:08 +0000 (14 22:18 -0700)]
hg-fast-export.py: support older hg versions
Do not use the closesbranch function as it was added in later
versions of hg. Use its definition instead.
Kyle J. McKay [Sat, 15 Mar 2014 04:06:53 +0000 (14 21:06 -0700)]
hg-fast-export.py: restore compatibility with older python
Since hg runs and supports older versions of python, hg-fast-export.py
should too. Replace dictionary comprehension with equivalent code that
supports versions of python older than 2.7.
Kyle J. McKay [Sat, 15 Mar 2014 04:02:26 +0000 (14 21:02 -0700)]
hg-fast-export.sh: Do not ignore hg-fast-export.py 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 hg-fast-export.py exit code still being ignored in that case.
Instead check the error code without requiring a bashism.
Kyle J. McKay [Sat, 15 Mar 2014 04:01:55 +0000 (14 21:01 -0700)]
Revert "Don't ignore hg-fast-export.py exit code"
This reverts commit
9643aa5df2e14e01867bc4266958b8c8081c3377.
Kyle J. McKay [Sat, 15 Mar 2014 04:01:35 +0000 (14 21:01 -0700)]
Revert "Make bashism conditional on the shell being bash"
This reverts commit
aaccfba9a0cfcfdd4db1e629b50d65b1c479b64f.
Eric Ritchey [Thu, 13 Mar 2014 21:32:10 +0000 (13 14:32 -0700)]
checking for - and converting - backslashes
frej [Fri, 14 Feb 2014 16:14:12 +0000 (14 17:14 +0100)]
Merge pull request #22 from TracyWebTech/master
Not using branchtags
Sergio Oliveira [Mon, 10 Feb 2014 10:32:27 +0000 (10 08:32 -0200)]
Fixing for hg 2.9
Frej Drejhammar [Wed, 8 Jan 2014 19:29:55 +0000 (8 20:29 +0100)]
Fix typo+grammo in README
Frej Drejhammar [Sun, 15 Sep 2013 10:26:43 +0000 (15 12:26 +0200)]
Make bashism conditional on the shell being bash
This avoids breakage due to
9643aa5d on shells other than bash.
Frej Drejhammar [Sun, 8 Sep 2013 12:32:08 +0000 (8 14:32 +0200)]
Give a proper error message when the hg repo is not known
hg-fast-export.sh always passes the --repo flag to hg-fast-export.py.
If, for some reason, we have a state file where the repo-url is an
empty string the checks in hg-fast-export.py will not work and the
user will be confused. Therefore we check that the url is specified
before calling hg-fast-export.py.
frej [Wed, 4 Sep 2013 09:11:03 +0000 (4 02:11 -0700)]
Merge pull request #16 from zr40/patch-1
Don't ignore hg-fast-export.py exit code
Matthijs van der Vleuten [Wed, 4 Sep 2013 07:43:17 +0000 (4 09:43 +0200)]
Don't ignore hg-fast-export.py exit code
Fantomas42 [Fri, 21 Jun 2013 16:35:38 +0000 (21 18:35 +0200)]
Fix mapping option, close #10
Frej Drejhammar [Sat, 13 Oct 2012 14:27:06 +0000 (13 16:27 +0200)]
Update README with pointer to the github issue tracker
Frej Drejhammar [Sat, 13 Oct 2012 14:18:15 +0000 (13 16:18 +0200)]
Rename hg-fast-export.txt to README
frej [Sun, 30 Sep 2012 19:09:08 +0000 (30 12:09 -0700)]
Merge pull request #7 from living180/master
Make Windows support actually work
Daniel Harding [Sun, 30 Sep 2012 06:24:16 +0000 (30 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.
frej [Fri, 10 Aug 2012 16:10:44 +0000 (10 09:10 -0700)]
Merge pull request #6 from aried3r/master
Fix for Mercurial 2.3 compatibility
Anton Rieder [Mon, 6 Aug 2012 23:35:09 +0000 (7 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.
http://www.selenic.com/repo/hg/rev/
1ac628cd7113#l9.1
frej [Fri, 1 Jun 2012 15:05:31 +0000 (1 08:05 -0700)]
Merge pull request #5 from living180/master
Make hg-fast-export work on Windows
Daniel Harding [Wed, 21 Mar 2012 23:16:11 +0000 (21 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
frej [Sun, 20 May 2012 17:31:40 +0000 (20 10:31 -0700)]
Merge pull request #4 from aried3r/master
Fixed a bug related to sanitizing branch names.
Anton Rieder [Wed, 16 May 2012 21:44:00 +0000 (16 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
this.
Frej Drejhammar [Fri, 27 Jan 2012 19:06:07 +0000 (27 20:06 +0100)]
Update documentation: The tool is no longer called hg-fast-import
Frej Drejhammar [Fri, 27 Jan 2012 19:02:54 +0000 (27 20:02 +0100)]
Mention the author map file in the readme
David Wragg [Mon, 23 Jan 2012 16:17:44 +0000 (23 16:17 +0000)]
Add usage info for the --force option
Barry Wardell [Mon, 5 Dec 2011 23:13:57 +0000 (5 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.
Barry Wardell [Wed, 23 Nov 2011 22:12:52 +0000 (23 22:12 +0000)]
Support the case where the author field has an empty email address, i.e. it is of the form 'name <>'.
Paul O’Shannessy [Tue, 18 Oct 2011 23:20:54 +0000 (18 16:20 -0700)]
Use hg methods to extract name and email when doing user fixup
David Wragg [Mon, 13 Jun 2011 12:05:47 +0000 (13 13:05 +0100)]
hg-fast-export.sh 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 hg-fast-export.sh would not reflect this.
David Wragg [Wed, 17 Nov 2010 00:32:12 +0000 (17 00:32 +0000)]
Support passing --force to git-fast-import
Frej Drejhammar [Fri, 18 Mar 2011 18:12:45 +0000 (18 19:12 +0100)]
Remove \" from the user string before trying to extract name and email
Signed-off-by: Frej Drejhammar <frej.drejhammar@gmail.com>
Reported-by: Cole Robinson <crobinso@redhat.com>
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:
http://hg.fedorahosted.org/hg/virt-manager
An example commit:
http://hg.fedorahosted.org/hg/virt-manager/rev/
41182500ddef
After some poking, it seems the culprit was that the "author:" was
surrounded by quotation marks
David Wragg [Mon, 20 Sep 2010 09:58:18 +0000 (20 10:58 +0100)]
The "verifying branch" message is not very interesting
Particularly if the repo has hundreds of branches.
David Wragg [Mon, 20 Sep 2010 09:55:24 +0000 (20 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.
Rocco Rutte [Mon, 25 May 2009 13:17:33 +0000 (25 15:17 +0200)]
Maintain backwards compatibility for ui setup
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Thu, 14 May 2009 12:53:42 +0000 (14 14:53 +0200)]
Update to work with mercurial ui refactorings
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Matthias Urlichs [Sun, 16 Nov 2008 14:43:44 +0000 (16 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.
Rocco Rutte [Tue, 27 Jan 2009 14:34:46 +0000 (27 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 <pdmef@gmx.net>
Frej Drejhammar [Fri, 16 Jan 2009 19:09:52 +0000 (16 20:09 +0100)]
hg-fast-export: Point out that only local repos are supported
Signed-off-by: Frej Drejhammar <frej.drejhammar@gmail.com>
Rocco Rutte [Tue, 30 Dec 2008 20:52:32 +0000 (30 21:52 +0100)]
hg-fast-export: Update todo now that tag movement is supported
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Frej Drejhammar [Sat, 20 Dec 2008 18:57:39 +0000 (20 19:57 +0100)]
Merge branch 'from-jmcmullan' into develop
Conflicts:
hg-fast-export.py
Fabrizio Chiarello [Fri, 19 Sep 2008 16:31:53 +0000 (19 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 <ponch@autistici.org>
Jason S. McMullan [Thu, 11 Dec 2008 14:05:05 +0000 (11 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
operation.
Rocco Rutte [Tue, 25 Nov 2008 10:25:22 +0000 (25 11:25 +0100)]
hg2git: Update copyrights and maintainership information.
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Fabrizio Chiarello [Thu, 18 Sep 2008 19:10:16 +0000 (18 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 <ponch@autistici.org>
Rocco Rutte [Fri, 19 Sep 2008 06:01:53 +0000 (19 08:01 +0200)]
hg-fast-export: Catch up with mercurial crew API changes
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Peter Colberg [Sun, 17 Aug 2008 12:11:53 +0000 (17 14:11 +0200)]
hg-fast-export.py: Use appropriate file mode for symlinks.
Jonathan Nieder [Fri, 18 Jul 2008 06:32:37 +0000 (18 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 <jrnieder@uchicago.edu>
Rocco Rutte [Tue, 3 Jun 2008 11:53:08 +0000 (3 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.
Jonathan Nieder [Mon, 2 Jun 2008 18:23:48 +0000 (2 13:23 -0500)]
hg-fast-export.py: 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 <jrnieder@uchicago.edu>
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Fri, 30 May 2008 11:44:07 +0000 (30 13:44 +0200)]
Clarify where 'HEAD' branch name comes from
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Felipe Zimmerle [Fri, 30 May 2008 11:41:56 +0000 (30 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 <felipe.zimmerle@indt.org.br>
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Fri, 26 Oct 2007 15:11:57 +0000 (26 17:11 +0200)]
hg-fast-export.py: Cache possibly sanitized branch names
...instead of doing it for every single commit.
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Fri, 26 Oct 2007 14:29:18 +0000 (26 14:29 +0000)]
Merge branch 'fixes'
* fixes:
hg-fast-import.py: Sanitize ref names
hg-fast-export.py: Don't attempt to dump revs beyond tip with -m
hg-fast-export.py: Minor tweaks/cleanup
Rocco Rutte [Fri, 26 Oct 2007 14:06:40 +0000 (26 16:06 +0200)]
hg-fast-import.py: 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 <pdmef@gmx.net>
Rocco Rutte [Thu, 25 Oct 2007 13:23:17 +0000 (25 15:23 +0200)]
hg-fast-export.py: Don't attempt to dump revs beyond tip with -m
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Thu, 25 Oct 2007 13:21:46 +0000 (25 15:21 +0200)]
hg-fast-export.py: 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 <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 08:28:41 +0000 (22 08:28 +0000)]
Fix shell substitution typo
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 08:28:18 +0000 (22 08:28 +0000)]
hg-reset.py: Use mangle_key() for load_cache() as hg-fast-export.py does
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 08:06:58 +0000 (22 10:06 +0200)]
hg-fast-export.py: 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 <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 07:50:52 +0000 (22 09:50 +0200)]
hg2git.py: 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 <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 07:48:48 +0000 (22 09:48 +0200)]
hg2git.py: 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 <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 07:44:12 +0000 (22 09:44 +0200)]
hg2git.py: Map 'HEAD', 'default' and '' hg branches to 'master' in git
Also add a note where HEAD is comming from.
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Rocco Rutte [Mon, 22 Oct 2007 07:34:40 +0000 (22 09:34 +0200)]
Allow for $PYTHON environment variable specifying python binary to use
Signed-off-by: Rocco Rutte <pdmef@gmx.net>
Scott Lamb [Mon, 16 Jul 2007 08:31:00 +0000 (16 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 <slamb@slamb.org>
Simon Hausmann [Mon, 25 Jun 2007 08:34:20 +0000 (25 10:34 +0200)]
Removed git-p4 from fast-export. It has been moved to git.git:contrib/fast-import.
Signed-off-by: Simon Hausmann <shausman@trolltech.com>