Merge tag 'v0.5' into felipec

These changes can be merged with limited to no conflict resolution.
This commit is contained in:
Mark Nauwelaerts
2025-04-26 18:19:06 +02:00
8 changed files with 135 additions and 52 deletions

26
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
on:
push:
branches: [ master ]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
hg: [ '5.0', '5.1', '5.2', '5.3', '5.4', '5.5', '5.6', '5.7' ]
env:
HG_VERSION: ${{ matrix.hg }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '2.7'
- name: Install python-dev
run: sudo apt-get install -y python2.7-dev
- name: Cache check-versions script
id: cache-check-versions
uses: actions/cache@v3
with:
path: ~/.cache/git-remote-hg
key: check-versions
- run: ./tools/check-versions hg:$HG_VERSION

View File

@@ -1,20 +0,0 @@
dist: xenial
language: minimal
cache:
directories:
- $HOME/.cache/git-remote-hg
script:
- ./tools/check-versions hg:$HG_VERSION
matrix:
include:
- env:
- env: HG_VERSION=@
- env: HG_VERSION=5.0
- env: HG_VERSION=4.9
- env: HG_VERSION=4.8
- env: HG_VERSION=4.7
- env: HG_VERSION=4.6
- env: HG_VERSION=4.5

View File

@@ -1,4 +1,4 @@
'git-remote-hg' is the semi-official Mercurial bridge from Git project, once `git-remote-hg` is the semi-official Mercurial bridge from the Git project, once
installed, it allows you to clone, fetch and push to and from Mercurial installed, it allows you to clone, fetch and push to and from Mercurial
repositories as if they were Git ones: repositories as if they were Git ones:
@@ -6,10 +6,10 @@ repositories as if they were Git ones:
git clone "hg::http://selenic.com/repo/hello" git clone "hg::http://selenic.com/repo/hello"
-------------------------------------- --------------------------------------
To enable this, simply add the 'git-remote-hg' script anywhere in your `$PATH`: To enable this, simply add the `git-remote-hg` script anywhere in your `$PATH`:
-------------------------------------- --------------------------------------
wget https://raw.github.com/mnauw/git-remote-hg/master/git-remote-hg -O ~/bin/git-remote-hg wget https://raw.githubusercontent.com/mnauw/git-remote-hg/master/git-remote-hg -O ~/bin/git-remote-hg
chmod +x ~/bin/git-remote-hg chmod +x ~/bin/git-remote-hg
-------------------------------------- --------------------------------------
@@ -49,7 +49,8 @@ If you want to see Mercurial revisions as Git commit notes:
% git config core.notesRef refs/notes/hg % git config core.notesRef refs/notes/hg
-------------------------------------- --------------------------------------
If you are not interested in Mercurial permanent and global branches (aka. commit labels): If you are not interested in Mercurial permanent and global branches (aka.
commit labels):
-------------------------------------- --------------------------------------
% git config --global remote-hg.track-branches false % git config --global remote-hg.track-branches false
@@ -57,13 +58,14 @@ If you are not interested in Mercurial permanent and global branches (aka. commi
With this configuration, the 'branches/foo' refs won't appear. With this configuration, the 'branches/foo' refs won't appear.
If you want the equivalent of 'hg clone --insecure': If you want the equivalent of `hg clone --insecure`:
-------------------------------------- --------------------------------------
% git config --global remote-hg.insecure true % git config --global remote-hg.insecure true
-------------------------------------- --------------------------------------
If you want 'git-remote-hg' to be compatible with 'hg-git', and generate exactly the same commits: If you want `git-remote-hg` to be compatible with `hg-git`, and generate exactly
the same commits:
-------------------------------------- --------------------------------------
% git config --global remote-hg.hg-git-compat true % git config --global remote-hg.hg-git-compat true
@@ -71,15 +73,17 @@ If you want 'git-remote-hg' to be compatible with 'hg-git', and generate exactly
== Notes == == Notes ==
Remember to run `git gc --aggressive` after cloning a repository, specially if Remember to run `git gc --aggressive` after cloning a repository, especially if
it's a big one. Otherwise lots of space will be wasted. it's a big one. Otherwise lots of space will be wasted.
The oldest version of mercurial supported is 1.9. For the most part 1.8 works, The newest supported version of Mercurial is 6.1 but only through Python 2. The
but you might experience some issues. oldest one is 2.4.
Support for Python 3 is ready, but will be released in the next version soon.
=== Pushing branches === === Pushing branches ===
To push a branch, you need to use the "branches/" prefix: To push a branch, you need to use the 'branches/' prefix:
-------------------------------------- --------------------------------------
% git checkout branches/next % git checkout branches/next
@@ -89,7 +93,7 @@ To push a branch, you need to use the "branches/" prefix:
All the pushed commits will receive the "next" Mercurial named branch. All the pushed commits will receive the "next" Mercurial named branch.
*Note*: Make sure you don't have +remote-hg.track-branches+ disabled. *Note*: Make sure you don't have `remote-hg.track-branches` disabled.
=== Cloning HTTPS === === Cloning HTTPS ===
@@ -99,7 +103,7 @@ The simplest way is to specify the user and password in the URL:
git clone hg::https://user:password@bitbucket.org/user/repo git clone hg::https://user:password@bitbucket.org/user/repo
-------------------------------------- --------------------------------------
You can also use the http://mercurial.selenic.com/wiki/SchemesExtension[schemes extension]: You can also use the https://mercurial-scm.org/wiki/SchemesExtension[schemes extension]:
-------------------------------------- --------------------------------------
[auth] [auth]
@@ -109,11 +113,7 @@ bb.password = password
-------------------------------------- --------------------------------------
Finally, you can also use the Finally, you can also use the
https://pypi.python.org/pypi/mercurial_keyring[keyring extension]. https://pypi.org/project/mercurial_keyring[keyring extension].
However, some of these features require very new versions of 'git-remote-hg',
so you might have better luck simply specifying the username and password in
the URL.
=== Submodules === === Submodules ===
@@ -141,10 +141,10 @@ Mercurial branches and bookmarks have some limitations of Git branches: you
can't have both 'dev/feature' and 'dev' (as Git uses files and directories to can't have both 'dev/feature' and 'dev' (as Git uses files and directories to
store them). store them).
Multiple anonymous heads (which are useless anyway) are not supported; you Multiple anonymous heads (which are useless anyway) are not supported: you
would only see the latest head. would only see the latest head.
Closed branches are not supported; they are not shown and you can't close or Closed branches are not supported: they are not shown and you can't close or
reopen. Additionally in certain rare situations a synchronization issue can reopen. Additionally in certain rare situations a synchronization issue can
occur (https://github.com/felipec/git/issues/65[Bug #65]). occur (https://github.com/felipec/git/issues/65[Bug #65]).
@@ -170,16 +170,27 @@ below for more details.
== Other projects == == Other projects ==
There are other 'git-remote-hg' projects out there, do not confuse this one, There are other `git-remote-hg` projects out there, but this is the original,
this is the one distributed officially by the Git project which was distributed officially in the Git project.
(_though actually no longer so nowadays_):
* https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg[msysgit's git-remote-hg] Over the years many similar tools have died out, the only actively maintained
* https://github.com/rfk/git-remote-hg[rfk's git-remote-hg] alternative is mnauw's fork of this project:
https://github.com/mnauw/git-remote-hg[mnauw/git-remote-hg]. I've merged some of
his patches, and he has merged some of my patches, so the projects are mostly in
sync, but not quite. In particular Nauwelaerts' fork has many administrative
extensions, which although useful to some people, I don't believe they belong
in the core.
For a comparison between these and other projects go For a comparison between these and other projects go
https://github.com/felipec/git/wiki/Comparison-of-git-remote-hg-alternatives[here]. https://github.com/felipec/git/wiki/Comparison-of-git-remote-hg-alternatives[here].
****
mnauw's note; I do not know what "the core" means?
However, the "extensions" provide useful and possibly
critical maintenance wrt git-remote-hg's internal data, so it belongs as close
to the latter one as possible.
****
[[no-limitations]] [[no-limitations]]
== Limitations (or not) == == Limitations (or not) ==

View File

@@ -159,6 +159,9 @@ def die(msg):
compat.stderr.write(b'ERROR: %s\n' % compat.to_b(msg, 'utf-8')) compat.stderr.write(b'ERROR: %s\n' % compat.to_b(msg, 'utf-8'))
sys.exit(1) sys.exit(1)
def debug(*args):
compat.stderr.write(b'DEBUG: %s\n' % compat.to_b(repr(args)))
def warn(msg): def warn(msg):
compat.stderr.write(b'WARNING: %s\n' % compat.to_b(msg, 'utf-8')) compat.stderr.write(b'WARNING: %s\n' % compat.to_b(msg, 'utf-8'))
compat.stderr.flush() compat.stderr.flush()

View File

@@ -209,6 +209,10 @@ def add_component(id, url, **args)
end end
hg_checkout_fix = lambda do |version| hg_checkout_fix = lambda do |version|
if check_version(version, '5.7')
run_cmd %W[hg import -q --no-commit #{__dir__}/hg_revert_5.7.patch]
end
FileUtils.cp('hg', "#{$builddir}/bin/") FileUtils.cp('hg', "#{$builddir}/bin/")
return if check_version(version, '4.3') return if check_version(version, '4.3')
@@ -225,10 +229,14 @@ add_component(:hg, 'https://www.mercurial-scm.org/repo/hg', checkout_fix: hg_che
hggit_checkout_fix = lambda do |version| hggit_checkout_fix = lambda do |version|
return unless check_version(version, '0.8.0') return unless check_version(version, '0.8.0')
run_cmd %W[hg import -q --no-commit #{__dir__}/hggit_rename_fix_0.8.0.patch], fatal: false if check_version(version, '0.9.0')
run_cmd %W[hg import -q --no-commit #{__dir__}/hggit_rename_fix_0.9.0.patch], fatal: false
else
run_cmd %W[hg import -q --no-commit #{__dir__}/hggit_rename_fix_0.8.0.patch], fatal: false
end
end end
add_component(:hggit, 'https://bitbucket.org/durin42/hg-git', checkout_fix: hggit_checkout_fix) add_component(:hggit, 'https://foss.heptapod.net/mercurial/hg-git', checkout_fix: hggit_checkout_fix)
add_component(:dulwich, 'https://github.com/dulwich/dulwich.git', version_format: 'dulwich-%s', kind: :git) add_component(:dulwich, 'https://github.com/dulwich/dulwich.git', version_format: 'dulwich-%s', kind: :git)
@@ -280,7 +288,7 @@ elsif not $versions.empty?
# mode 2 # mode 2
$verbosity = HIGH $verbosity = HIGH
exit check(versions) ? 0 : 1 exit check($versions) ? 0 : 1
else else
# mode 3 # mode 3
$verbosity = QUIET $verbosity = QUIET

24
tools/hg_revert_5.7.patch Normal file
View File

@@ -0,0 +1,24 @@
diff --git a/hg b/hg
index 4ec2b6140b..a3e61ad39c 100755
--- a/hg
+++ b/hg
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
#
# mercurial - scalable distributed SCM
#
diff --git a/mercurial/hg.py b/mercurial/hg.py
index 1a7a281e30..bf75f15ac1 100644
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -1013,7 +1013,7 @@ def clone(
pass
if uprev is None:
try:
- if destrepo._activebookmark:
+ if False:
uprev = destrepo.lookup(destrepo._activebookmark)
update = destrepo._activebookmark
else:

View File

@@ -0,0 +1,22 @@
diff --git a/hggit/git_handler.py b/hggit/git_handler.py
--- a/hggit/git_handler.py
+++ b/hggit/git_handler.py
@@ -829,6 +829,8 @@
def import_git_commit(self, commit):
self.ui.debug(_(b"importing: %s\n") % commit.id)
+ extra_in_message = self.ui.configbool(b'git', b'debugextrainmessage', False)
+
detect_renames = False
(strip_message, hg_renames,
hg_branch, extra) = git2hg.extract_hg_metadata(
@@ -839,7 +841,8 @@
# renames detected from Git. This is because we export an extra
# 'HG:rename-source' Git parameter when this isn't set, which will
# break bidirectionality.
- extra[b'hg-git-rename-source'] = b'git'
+ if not extra_in_message:
+ extra[b'hg-git-rename-source'] = b'git'
else:
renames = hg_renames

View File

@@ -26,8 +26,17 @@ hg:4.3 hggit:0.8.10 dulwich:0.18.0 # 2017_11
hg:4.4 hggit:0.8.10 dulwich:0.18.0 # 2017_11 hg:4.4 hggit:0.8.10 dulwich:0.18.0 # 2017_11
hg:4.5 hggit:0.8.11 dulwich:0.18.0 # 2018_02 hg:4.5 hggit:0.8.11 dulwich:0.18.0 # 2018_02
hg:4.6 hggit:0.8.12 dulwich:0.19.7 # 2018_10 hg:4.6 hggit:0.8.13 dulwich:0.19.7 # 2018_10
hg:4.7 hggit:0.8.12 dulwich:0.19.7 # 2018_10 hg:4.7 hggit:0.8.13 dulwich:0.19.7 # 2018_10
hg:4.8 hggit:@ dulwich:0.19.11 hg:4.8 hggit:0.8.13 dulwich:0.19.7 # 2018_10
hg:4.9 hggit:@ dulwich:0.19.11 hg:4.9 hggit:0.8.13 dulwich:0.19.7 # 2019_01
hg:5.0 hggit:@ dulwich:0.19.11 hg:5.0 hggit:0.8.13 dulwich:0.19.7 # 2019_04
hg:5.1 hggit:0.8.13 dulwich:0.19.7 # 2019_07
hg:5.2 hggit:0.8.13 dulwich:0.19.7 # 2019_11
hg:5.3 hggit:0.9.0 dulwich:0.19.15 # 2020_01
hg:5.4 hggit:0.9.0 dulwich:0.19.15 # 2020_04
hg:5.5 hggit:0.9.0 dulwich:0.19.15 # 2020_08
hg:5.6 hggit:0.9.0 dulwich:0.19.15 # 2020_10
hg:5.7 hggit:0.10.0 dulwich:0.19.16 # 2021_01