Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mercurial-extension-hg-git for
openSUSE:Factory checked in at 2023-11-09 21:36:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mercurial-extension-hg-git (Old)
and /work/SRC/openSUSE:Factory/.mercurial-extension-hg-git.new.17445 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mercurial-extension-hg-git"
Thu Nov 9 21:36:11 2023 rev:12 rq:1124540 version:1.0.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/mercurial-extension-hg-git/mercurial-extension-hg-git.changes
2023-10-08 12:24:19.611121401 +0200
+++
/work/SRC/openSUSE:Factory/.mercurial-extension-hg-git.new.17445/mercurial-extension-hg-git.changes
2023-11-09 21:36:28.555273269 +0100
@@ -1,0 +2,14 @@
+Thu Nov 9 12:17:24 UTC 2023 - Andrei Dziahel <[email protected]>
+
+- hg-git 1.0.3
+
+ This is a minor release, focusing on bugs and compatibility.
+
+ * Fix tests with Mercurial 6.5
+ * Handle failures to save refs, such as when they use characters
+ forbidden by the file system; this is most easily noticed on Windows
+ and macOS. (#397)
+ * Fix pulling annotated tags with `-r`/`--rev`.
+- drop fix_mercurial_6.5_compatibility.patch
+
+-------------------------------------------------------------------
Old:
----
fix_mercurial_6.5_compatibility.patch
hg-git-1.0.2.tar.gz
New:
----
hg-git-1.0.3.tar.gz
BETA DEBUG BEGIN:
Old: * Fix pulling annotated tags with `-r`/`--rev`.
- drop fix_mercurial_6.5_compatibility.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mercurial-extension-hg-git.spec ++++++
--- /var/tmp/diff_new_pack.gMz3kF/_old 2023-11-09 21:36:29.195296899 +0100
+++ /var/tmp/diff_new_pack.gMz3kF/_new 2023-11-09 21:36:29.195296899 +0100
@@ -24,7 +24,7 @@
%define pythons python3
Name: mercurial-extension-hg-git
-Version: 1.0.2
+Version: 1.0.3
Release: 0
Summary: Hg-Git Mercurial plugin
License: GPL-2.0-only
@@ -32,8 +32,6 @@
URL: http://foss.heptapod.net/mercurial/hg-git
Source0:
https://files.pythonhosted.org/packages/source/h/hg-git/hg-git-%{version}.tar.gz
Source90: tests.blacklist
-# Unreleased upstream patch
-Patch0: fix_mercurial_6.5_compatibility.patch
BuildRequires: fdupes
BuildRequires: git
BuildRequires: mercurial
@@ -64,7 +62,6 @@
%prep
%setup -q -n hg-git-%{version}
-%patch0 -p1
%build
%pyproject_wheel
++++++ hg-git-1.0.2.tar.gz -> hg-git-1.0.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/.gitlab-ci.yml
new/hg-git-1.0.3/.gitlab-ci.yml
--- old/hg-git-1.0.2/.gitlab-ci.yml 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/.gitlab-ci.yml 2023-11-07 16:55:14.000000000 +0100
@@ -7,8 +7,6 @@
.base:
image:
registry.heptapod.net:443/mercurial/hg-git/ci/$CI_COMMIT_HG_BRANCH:hg-$HG-py$PYTHON
timeout: 20m
- tags:
- - clever
services:
- name: registry.heptapod.net:443/mercurial/hg-git/git-server
alias: git-server
@@ -40,9 +38,9 @@
- &latest-versions
PYTHON:
- "3.6"
- - "3.11"
+ - "3.12"
HG:
- - "6.4"
+ - "6.5"
# This is the authoritative list of versions of Mercurial that this
# extension is supported and tested with; it should be kept in sync
@@ -74,6 +72,7 @@
- "6.1"
- "6.2"
- "6.3"
+ - "6.4"
# Test that it is possible to use and run hg-git on versions of Alpine
# that include Dulwich, and with the oldest Dulwich supported.
@@ -81,8 +80,6 @@
stage: compat
image:
name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine:$ALPINE
- tags:
- - clever
variables:
CI_CLEVER_CLOUD_FLAVOR: XS
timeout: 20m
@@ -95,7 +92,7 @@
apk add py3-dulwich
else
apk add build-base python3-dev
- pip3 install dulwich==$DULWICH
+ pip3 install "urllib3<=2.0" dulwich==$DULWICH
fi
- pip3 install coverage
- adduser -D test
@@ -137,26 +134,14 @@
matrix:
- &development-versions
PYTHON:
- - "3.11"
+ - "3.12"
HG:
- "stable"
- "default"
-# Test Alpine edge, which usually includes the very latest version of
-# Git & Dulwich
-Dependencies:
- extends: Alpine
- stage: compat
- image:
- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine:edge
- rules: *upcoming-rules
- parallel:
-
Coverage:
stage: .post
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/python:alpine
- tags:
- - clever
variables:
CI_CLEVER_CLOUD_FLAVOR: XS
allow_failure: true
@@ -273,8 +258,6 @@
Wheels:
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/python
timeout: 15m
- tags:
- - clever
variables:
CI_CLEVER_CLOUD_FLAVOR: XS
stage: archives
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/.hgsigs new/hg-git-1.0.3/.hgsigs
--- old/hg-git-1.0.2/.hgsigs 2023-03-06 10:42:18.000000000 +0100
+++ new/hg-git-1.0.3/.hgsigs 2023-11-07 17:11:05.000000000 +0100
@@ -24,3 +24,4 @@
d31a72cf70bd402aa5d3d4270871fff83ac47cd0 0
iHUEABYIAB0WIQRBf9ypgVcBvOhGUkSirMgbQc9ONAUCYioVGgAKCRCirMgbQc9ONNXKAP9vxsKN7H1cK45yewQ7hkbod1PQfrhfXKp+XJoonOaeuAEApfmJsYzh9nQQ6xfVX2RhFyjqEdKoCLEJPGcoE/FLRwA=
6f22e3887d8220863620664077c8554da9d487c4 0
iHUEABYIAB0WIQRBf9ypgVcBvOhGUkSirMgbQc9ONAUCYkiYYQAKCRCirMgbQc9ONJpxAQCJk/7x/461bgYzDVC/4ugU1KnlgKjOprn9GE4m7MuuBQD9EPkQsuP8hjJ3HvNX+xQhnBGlwlQf1EYQBSuSaTOw+Qg=
3ca3ee14a659a96c3f593567fc0dc3d735e06c28 0
iHUEABYIAB0WIQRBf9ypgVcBvOhGUkSirMgbQc9ONAUCY2VrkgAKCRCirMgbQc9ONLILAQD1uMUeOHc9eD2kXjy2fMeAisWljk8Cpn8OmbsY385/hAD/YdVePqhVK0zAqNBH56PNvv603TR+MDQu4cHS9ULo9wQ=
+6582b75a71a413e95e7345ab0e6aa10a5c150711 0
iHUEABYIAB0WIQRBf9ypgVcBvOhGUkSirMgbQc9ONAUCZAIM/wAKCRCirMgbQc9ONHDhAQD6M6tlj5FDYY3iGtn3970WuU0MKDjtnYEQIef0yo+pawEA7s1AHYXtqdEcjJnKje5L+8IkYdsDF15/SiPuYMFGjgc=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/.hgtags new/hg-git-1.0.3/.hgtags
--- old/hg-git-1.0.2/.hgtags 2023-03-06 10:42:18.000000000 +0100
+++ new/hg-git-1.0.3/.hgtags 2023-11-07 17:11:05.000000000 +0100
@@ -49,3 +49,4 @@
6f22e3887d8220863620664077c8554da9d487c4 1.0.0
29d1515aac3bbdd9cfc5e4ea4797bb5b45d3afe1 1.0.1
3ca3ee14a659a96c3f593567fc0dc3d735e06c28 1.0.1
+6582b75a71a413e95e7345ab0e6aa10a5c150711 1.0.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/NEWS.rst new/hg-git-1.0.3/NEWS.rst
--- old/hg-git-1.0.2/NEWS.rst 2023-03-03 16:06:19.000000000 +0100
+++ new/hg-git-1.0.3/NEWS.rst 2023-11-07 17:11:05.000000000 +0100
@@ -1,3 +1,14 @@
+hg-git 1.0.3 (unreleased)
+=========================
+
+This is a minor release, focusing on bugs and compatibility.
+
+* Fix tests with Mercurial 6.5
+* Handle failures to save refs, such as when they use characters
+ forbidden by the file system; this is most easily noticed on Windows
+ and macOS. (#397)
+* Fix pulling annotated tags with ``-r``/``--rev``.
+
hg-git 1.0.2 (2023-03-03)
=========================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/PKG-INFO new/hg-git-1.0.3/PKG-INFO
--- old/hg-git-1.0.2/PKG-INFO 2023-03-06 10:44:44.752856500 +0100
+++ new/hg-git-1.0.3/PKG-INFO 2023-11-07 17:13:28.403610500 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: hg-git
-Version: 1.0.2
+Version: 1.0.3
Summary: push to and pull from a Git repository using Mercurial
Home-page: http://foss.heptapod.net/mercurial/hg-git
Author: Scott Chacon, Augie Fackler, Kevin Bullock and others
@@ -11,6 +11,7 @@
Requires-Python: >=3.6
Description-Content-Type: text/x-rst
License-File: COPYING
+Requires-Dist: dulwich<0.22.0,>=0.19.3
Hg-Git Mercurial Plugin
=======================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/contrib/hggitperf.py
new/hg-git-1.0.3/contrib/hggitperf.py
--- old/hg-git-1.0.2/contrib/hggitperf.py 2023-03-03 16:05:56.000000000
+0100
+++ new/hg-git-1.0.3/contrib/hggitperf.py 2023-11-07 16:55:14.000000000
+0100
@@ -14,6 +14,7 @@
cmdtable = {}
command = cmdutil.command(cmdtable)
+
# the timer functions are copied from mercurial/contrib/perf.py
def gettimer(ui, opts=None):
"""return a timer function and formatter: (timer, formatter)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hg_git.egg-info/PKG-INFO
new/hg-git-1.0.3/hg_git.egg-info/PKG-INFO
--- old/hg-git-1.0.2/hg_git.egg-info/PKG-INFO 2023-03-06 10:44:44.000000000
+0100
+++ new/hg-git-1.0.3/hg_git.egg-info/PKG-INFO 2023-11-07 17:13:28.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: hg-git
-Version: 1.0.2
+Version: 1.0.3
Summary: push to and pull from a Git repository using Mercurial
Home-page: http://foss.heptapod.net/mercurial/hg-git
Author: Scott Chacon, Augie Fackler, Kevin Bullock and others
@@ -11,6 +11,7 @@
Requires-Python: >=3.6
Description-Content-Type: text/x-rst
License-File: COPYING
+Requires-Dist: dulwich<0.22.0,>=0.19.3
Hg-Git Mercurial Plugin
=======================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hg_git.egg-info/SOURCES.txt
new/hg-git-1.0.3/hg_git.egg-info/SOURCES.txt
--- old/hg-git-1.0.2/hg_git.egg-info/SOURCES.txt 2023-03-06
10:44:44.000000000 +0100
+++ new/hg-git-1.0.3/hg_git.egg-info/SOURCES.txt 2023-11-07
17:13:28.000000000 +0100
@@ -49,7 +49,6 @@
hggit/overlay.py
hggit/revsets.py
hggit/schemes.py
-hggit/state.py
hggit/templates.py
hggit/util.py
hggit/verify.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/__init__.py
new/hg-git-1.0.3/hggit/__init__.py
--- old/hg-git-1.0.2/hggit/__init__.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/__init__.py 2023-11-07 16:55:14.000000000 +0100
@@ -162,7 +162,7 @@
b'collections',
}
-testedwith = b'5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4'
+testedwith = b'5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5'
minimumhgversion = b'5.2'
buglink = b'https://foss.heptapod.net/mercurial/hg-git/issues'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/__version__.py
new/hg-git-1.0.3/hggit/__version__.py
--- old/hg-git-1.0.2/hggit/__version__.py 2023-03-06 10:44:44.000000000
+0100
+++ new/hg-git-1.0.3/hggit/__version__.py 2023-11-07 17:13:28.000000000
+0100
@@ -1,4 +1,16 @@
# file generated by setuptools_scm
# don't change, don't track in version control
-__version__ = version = '1.0.2'
-__version_tuple__ = version_tuple = (1, 0, 2)
+TYPE_CHECKING = False
+if TYPE_CHECKING:
+ from typing import Tuple, Union
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
+else:
+ VERSION_TUPLE = object
+
+version: str
+__version__: str
+__version_tuple__: VERSION_TUPLE
+version_tuple: VERSION_TUPLE
+
+__version__ = version = '1.0.3'
+__version_tuple__ = version_tuple = (1, 0, 3)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/compat.py
new/hg-git-1.0.3/hggit/compat.py
--- old/hg-git-1.0.2/hggit/compat.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/compat.py 2023-11-07 16:55:14.000000000 +0100
@@ -15,6 +15,7 @@
from dulwich import object_store
from dulwich import pack
+
# dulwich 0.20.49 changed create_delta to a generator
def create_delta(base_buf, target_buf):
delta = pack.create_delta(base_buf, target_buf)
@@ -151,3 +152,13 @@
else:
MissingObjectFinder = object_store.MissingObjectFinder
+
+
+# dulwich 0.21 added a module-level function and deprecated the
+# instance method
+try:
+ peel_sha = object_store.peel_sha
+except AttributeError:
+
+ def peel_sha(store, sha):
+ return store[sha], store.peel_sha(sha)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/git_handler.py
new/hg-git-1.0.3/hggit/git_handler.py
--- old/hg-git-1.0.2/hggit/git_handler.py 2023-03-03 16:05:56.000000000
+0100
+++ new/hg-git-1.0.3/hggit/git_handler.py 2023-11-07 16:55:14.000000000
+0100
@@ -157,7 +157,7 @@
def has_gitrepo(repo):
- if not hgutil.safehasattr(repo, b'vfs'):
+ if not hasattr(repo, 'vfs'):
return False
repo, gitdir = get_repo_and_gitdir(repo)
@@ -270,12 +270,13 @@
def map_hg_get(self, gitsha, deref=False):
if deref:
try:
- gitobj = self.git.get_object(gitsha)
+ unpeeled, peeled = compat.peel_sha(
+ self.git.object_store, gitsha
+ )
+ gitsha = peeled.id
except KeyError:
- gitobj = None
-
- if isinstance(gitobj, Tag):
- gitsha = gitobj.object[1]
+ self.ui.note(b'note: failed to dereference %s\n' % gitsha)
+ return None
return self._map_git.get(gitsha)
@@ -527,7 +528,7 @@
new_refs_with_head.update(
self.fetch_pack(remote, [b'HEAD']).refs,
)
- except (error.RepoLookupError):
+ except error.RepoLookupError:
self.ui.debug(b'remote repository has no HEAD\n')
for remote_name in remote_names:
@@ -832,7 +833,7 @@
if b'author' in ctx.extra():
try:
author = b"".join(apply_delta(author, ctx.extra()[b'author']))
- except ApplyDeltaError:
+ except (ApplyDeltaError, AssertionError):
self.ui.traceback()
self.ui.warn(
b"warning: disregarding possibly invalid metadata in %s\n"
@@ -868,7 +869,7 @@
if b'message' in extra:
try:
message = b"".join(apply_delta(message, extra[b'message']))
- except ApplyDeltaError:
+ except (ApplyDeltaError, AssertionError):
self.ui.traceback()
self.ui.warn(
b"warning: disregarding possibly invalid metadata in %s\n"
@@ -1143,7 +1144,7 @@
hgsub = util.parse_hgsub(
git2hg.git_file_readlines(self.git, git_commit_tree, b'.hgsub')
)
- for (sm_path, sm_url, sm_name) in gitmodules:
+ for sm_path, sm_url, sm_name in gitmodules:
hgsub[sm_path] = b'[git]' + sm_url
files[b'.hgsub'] = (False, 0o100644, None)
elif (
@@ -1462,11 +1463,16 @@
for ref in rev_refs:
if ref not in refs:
- gitobj = self.git.get_object(self.git.refs[ref])
- if isinstance(gitobj, Tag):
- new_refs[ref] = gitobj.id
+ if ref not in self.git.refs:
+ self.ui.note(
+ b'note: cannot update %s\n' % (ref),
+ )
else:
- new_refs[ref] = self.map_git_get(ctx.hex())
+ gitobj = self.git.get_object(self.git.refs[ref])
+ if isinstance(gitobj, Tag):
+ new_refs[ref] = gitobj.id
+ else:
+ new_refs[ref] = self.map_git_get(ctx.hex())
elif new_refs[ref] in self._map_git:
rctx = unfiltered[self.map_hg_get(new_refs[ref])]
if rctx.ancestor(ctx) == rctx or force:
@@ -1644,8 +1650,11 @@
reftarget = self.git.refs[tag_refname]
try:
peeledtarget = self.git.get_peeled(tag_refname)
- except KeyError as e:
- peeledtarget = e.args[0]
+ except KeyError:
+ self.ui.note(
+ b'note: failed to peel tag %s' % (tag_refname)
+ )
+ peeledtarget = None
if peeledtarget != reftarget:
# warn the user if they tried changing the tag
@@ -1719,19 +1728,18 @@
return
repotags = self.repo.tags()
for k in refs:
- ref_name = k
- parts = k.split(b'/')
- if parts[0] == b'refs' and parts[1] == b'tags':
- ref_name = b"/".join(v for v in parts[2:])
+ if k.startswith(LOCAL_TAG_PREFIX):
+ ref_name = k[len(LOCAL_TAG_PREFIX) :]
+
# refs contains all the refs in the server, not just
# the ones we are pulling
if refs[k] not in self.git.object_store:
continue
- if ref_name[-3:] == ANNOTATED_TAG_SUFFIX:
- ref_name = ref_name[:-3]
+ if ref_name.endswith(ANNOTATED_TAG_SUFFIX):
+ continue
if ref_name not in repotags:
sha = self.map_hg_get(refs[k], deref=True)
- if sha is not None:
+ if sha is not None and sha is not None:
self.tags[ref_name] = sha
self.save_tags()
@@ -1890,23 +1898,27 @@
all_remote_nodeids = []
for ref_name, sha in refs.items():
- hgsha = self.map_hg_get(sha)
+ if ref_name.endswith(ANNOTATED_TAG_SUFFIX):
+ # the sha points to a peeled tag; we should either
+ # pick it up through the tag itself, or ignore it
+ continue
+
+ hgsha = self.map_hg_get(sha, deref=True)
if (
ref_name.startswith(LOCAL_BRANCH_PREFIX)
and hgsha is not None
and hgsha in self.repo
):
- head = ref_name[11:]
+ head = ref_name[len(LOCAL_BRANCH_PREFIX) :]
remote_head = b'/'.join((remote_name, head))
remote_refs[remote_head] = bin(hgsha)
# TODO(durin42): what is this doing?
new_ref = REMOTE_BRANCH_PREFIX + remote_head
+
util.set_refs(self.ui, self.git, {new_ref: sha})
- elif ref_name.startswith(
- LOCAL_TAG_PREFIX
- ) and not ref_name.endswith(ANNOTATED_TAG_SUFFIX):
+ elif ref_name.startswith(LOCAL_TAG_PREFIX):
util.set_refs(self.ui, self.git, {ref_name: sha})
if hgsha:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/gitrepo.py
new/hg-git-1.0.3/hggit/gitrepo.py
--- old/hg-git-1.0.2/hggit/gitrepo.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/gitrepo.py 2023-11-07 16:55:14.000000000 +0100
@@ -103,7 +103,7 @@
def known(self):
raise NotImplementedError
- def peer(self, path=None):
+ def peer(self, path=None, remotehidden=False):
return self
def stream_out(self):
@@ -135,9 +135,9 @@
# defend against tracebacks if we specify -r in 'hg pull'
[email protected](hg, b'addbranchrevs')
-def safebranchrevs(orig, lrepo, otherrepo, branches, revs):
- revs, co = orig(lrepo, otherrepo, branches, revs)
[email protected](hg, 'addbranchrevs')
+def safebranchrevs(orig, lrepo, otherrepo, branches, revs, **kwargs):
+ revs, co = orig(lrepo, otherrepo, branches, revs, **kwargs)
if isinstance(otherrepo, gitrepo):
# FIXME: Unless it's None, the 'co' result is passed to the lookup()
# remote command. Since our implementation of the lookup() remote
@@ -151,7 +151,7 @@
return revs, co
[email protected](discovery, b'findcommonoutgoing')
[email protected](discovery, 'findcommonoutgoing')
def findcommonoutgoing(orig, repo, other, *args, **kwargs):
if isinstance(other, gitrepo):
heads = repo.githandler.get_refs(other.path)[0]
@@ -172,14 +172,14 @@
return orig(repo, other, *args, **kwargs)
[email protected](bundlerepo, b'getremotechanges')
[email protected](bundlerepo, 'getremotechanges')
def getremotechanges(orig, ui, repo, other, onlyheads, *args, **opts):
if isinstance(other, gitrepo):
return repo.githandler.getremotechanges(other, onlyheads)
return orig(ui, repo, other, onlyheads, *args, **opts)
[email protected](exchange, b'pull')
[email protected](exchange, 'pull')
@util.transform_notgit
def exchangepull(
orig, repo, remote, heads=None, force=False, bookmarks=(), **kwargs
@@ -207,7 +207,7 @@
# TODO figure out something useful to do with the newbranch param
[email protected](exchange, b'push')
[email protected](exchange, 'push')
@util.transform_notgit
def exchangepush(
orig,
@@ -245,5 +245,7 @@
)
-def make_peer(ui, path, create, intents=None, createopts=None):
+def make_peer(
+ ui, path, create, intents=None, createopts=None, remotehidden=False
+):
return gitrepo(ui, path, create)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/hgrepo.py
new/hg-git-1.0.3/hggit/hgrepo.py
--- old/hg-git-1.0.2/hggit/hgrepo.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/hgrepo.py 2023-11-07 16:55:14.000000000 +0100
@@ -74,7 +74,7 @@
repo.__class__ = hgrepo
[email protected](repoview, b'pinnedrevs')
[email protected](repoview, 'pinnedrevs')
def pinnedrevs(orig, repo):
pinned = orig(repo)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/overlay.py
new/hg-git-1.0.3/hggit/overlay.py
--- old/hg-git-1.0.2/hggit/overlay.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/overlay.py 2023-11-07 16:55:14.000000000 +0100
@@ -155,7 +155,7 @@
del self._map[path]
[email protected](manifest.manifestdict, b'diff')
[email protected](manifest.manifestdict, 'diff')
def wrapmanifestdictdiff(orig, self, m2, match=None, clean=False):
'''avoid calling into lazymanifest code if m2 is an overlaymanifest'''
# Older mercurial clients used diff(m2, clean=False). If a caller failed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/schemes.py
new/hg-git-1.0.3/hggit/schemes.py
--- old/hg-git-1.0.2/hggit/schemes.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/schemes.py 2023-11-07 16:55:14.000000000 +0100
@@ -99,7 +99,7 @@
return fn(ui, path, *args, **kwargs)
[email protected](hg, b'defaultdest')
[email protected](hg, 'defaultdest')
def defaultdest(orig, source):
if source.endswith(b'.git'):
return orig(source[:-4])
@@ -107,7 +107,7 @@
return orig(source)
[email protected](hg, b'peer')
[email protected](hg, 'peer')
def peer(orig, uiorrepo, *args, **opts):
newpeer = orig(uiorrepo, *args, **opts)
if isinstance(newpeer, gitrepo.gitrepo):
@@ -116,7 +116,7 @@
return newpeer
[email protected](hg, b'clone')
[email protected](hg, 'clone')
def clone(orig, *args, **opts):
srcpeer, destpeer = orig(*args, **opts)
@@ -127,24 +127,24 @@
return srcpeer, destpeer
[email protected](compat.path, b'_isvalidlocalpath')
[email protected](compat.path, '_isvalidlocalpath')
def isvalidlocalpath(orig, self, path):
return orig(self, path) or isgitdir(path)
[email protected](compat.url, b'islocal')
[email protected](compat.url, 'islocal')
def isurllocal(orig, path):
# recognise git scp-style paths when cloning
return orig(path) and not util.isgitsshuri(path._origpath)
[email protected](hg, b'islocal')
[email protected](hg, 'islocal')
def islocal(orig, path):
# recognise git scp-style paths when cloning
return orig(path) and not util.isgitsshuri(path)
[email protected](compat.urlutil, b'hasscheme')
[email protected](compat.urlutil, 'hasscheme')
def hasscheme(orig, path):
# recognise git scp-style paths
return orig(path) or util.isgitsshuri(path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/state.py
new/hg-git-1.0.3/hggit/state.py
--- old/hg-git-1.0.2/hggit/state.py 2022-11-28 13:25:40.000000000 +0100
+++ new/hg-git-1.0.3/hggit/state.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,88 +0,0 @@
-import collections.abc
-import typing
-
-from mercurial import (
- hg,
- localrepo,
- ui,
- util as hgutil,
-)
-
-MAP_FILE_NAME = b"git-mapfile"
-
-
-def get_repo_and_gitdir(repo):
- if repo.shared():
- repo = hg.sharedreposource(repo)
-
- if repo.ui.configbool(b"git", b"intree"):
- gitdir = repo.wvfs.join(b".git")
- else:
- gitdir = repo.vfs.join(b"git")
-
- return repo, gitdir
-
-
-class State(collections.abc.Mapping):
- def __init__(self, ui, repo):
- super().__init__()
-
- self.ui = ui
- self.store_repo, self.gitdir = get_repo_and_gitdir(repo)
- self.vfs = self.store_repo.vfs
-
- def __bool__(self):
- return bool(self.__oneway_map)
-
- @hgutil.propertycache
- def __onewaymap(self):
- return dict(self.load(ui, repo))
-
- @hgutil.propertycache
- def __twowaymap(self):
- r = self.__onewaymap.copy()
- r.update(map(reversed, r.items()))
-
- return r
-
- def __getitem__(self, item):
- return self.__twoway_map[item]
-
- def set(self, gitsha, hgsha):
- self.__oneway_map[gitsha] = hgsha
- self.__twoway_map[gitsha] = hgsha
- self.__twoway_map[hgsha] = gitsha
-
- def __getitem__(self, item):
- return self.__twoway_map[item]
-
- def __iter__(self):
- return iter(self.__oneway_map)
-
- def __len__(self):
- return len(self.__oneway_map)
-
- @abc.abstractmethod
- def load(self) -> typing.Iterator[(bytes, bytes)]:
- pass
-
- @abc.abstractmethod
- def save(self, tr) -> typing.Iterator[(bytes, bytes)]:
- pass
-
-
-class LegacyState(AbstractState):
- def load(self):
- if os.path.exists(self.vfs.join(self.map_file)):
- for line in self.vfs(self.map_file):
- # format is <40 hex digits> <40 hex digits>\n
- if len(line) != 82:
- raise ValueError(
- _(b"corrupt mapfile: incorrect line length %d")
- % len(line)
- )
- yield line[:40], line[41:81]
- map_git_real[gitsha] = hgsha
- map_hg_real[hgsha] = gitsha
- self._map_git_real = map_git_real
- self._map_hg_real = map_hg_real
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/hggit/util.py
new/hg-git-1.0.3/hggit/util.py
--- old/hg-git-1.0.2/hggit/util.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/hggit/util.py 2023-11-07 16:55:14.000000000 +0100
@@ -190,25 +190,27 @@
def set_refs(ui, git, refs):
for git_ref, git_sha in refs.items():
- # prior to 0.20.22, dulwich couldn't handle refs
- # pointing to missing objects, so don't add them
- #
- # moreover, don't set the ref if it already points to the
- # target object since setting the ref triggers a fsync, which
- # can be very slow in large repositories
- if (
- git_sha
- and git_sha in git
- and git.refs.follow(git_ref)[1] != git_sha
- ):
+ try:
+ # prior to 0.20.22, dulwich couldn't handle refs pointing
+ # to missing objects, so don't add them
+ #
+ # moreover, don't set the ref if it already points to the
+ # target object since setting the ref triggers a fsync,
+ # which can be very slow in large repositories
+ if (
+ git_sha
+ and git_sha in git
+ and git.refs.follow(git_ref)[1] != git_sha
+ ):
+ git.refs[git_ref] = git_sha
+ except OSError:
# some refs may actually be unstorable, e.g. refs
# containing a double quote on Windows or non-UTF-8 refs
- # on macOS, so handle that gracefully
- try:
- git.refs[git_ref] = git_sha
- except OSError:
- ui.traceback()
- ui.warn(b"warning: failed to save ref %s\n" % git_ref)
+ # on macOS, so handle that gracefully -- and older
+ # versions of Dulwich don't even handle _checking_ for
+ # those refs
+ ui.traceback()
+ ui.warn(b"warning: failed to save ref %s\n" % git_ref)
def ref_exists(ref: bytes, container):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/pyproject.toml
new/hg-git-1.0.3/pyproject.toml
--- old/hg-git-1.0.2/pyproject.toml 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/pyproject.toml 2023-11-07 16:55:14.000000000 +0100
@@ -21,5 +21,6 @@
| \.mypy_cache/
| \.venv/
| tests/
+| hggit/__version__.py
'''
skip-string-normalization = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/tests/hghave.py
new/hg-git-1.0.3/tests/hghave.py
--- old/hg-git-1.0.2/tests/hghave.py 2023-03-03 16:05:56.000000000 +0100
+++ new/hg-git-1.0.3/tests/hghave.py 2023-11-07 16:55:14.000000000 +0100
@@ -641,7 +641,14 @@
@check("pylint", "Pylint python linter")
def has_pylint():
- return matchoutput("pylint --help", br"Usage:[ ]+pylint", True)
+ try:
+ import pylint
+
+ pylint.__version__
+ except ImportError:
+ return False
+ else:
+ return True
@check("clang-format", "clang-format C code formatter (>= 11)")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/tests/test-encoding.t
new/hg-git-1.0.3/tests/test-encoding.t
--- old/hg-git-1.0.2/tests/test-encoding.t 2023-03-03 16:05:56.000000000
+0100
+++ new/hg-git-1.0.3/tests/test-encoding.t 2023-11-07 16:55:14.000000000
+0100
@@ -234,19 +234,19 @@
warning: not exporting tag 'uni-t?g' due to invalid name
warning: not exporting tag 'lat-t?g' due to invalid name
searching for changes
+ remote: found 0 deltas to reuse (dulwich0210 !)
adding reference refs/tags/ascii-tag
$ HGENCODING=latin-1 hg push
pushing to $TESTTMP/repo.git
warning: failed to save ref refs/tags/lat-t\xe4g (esc)
warning: failed to save ref refs/tags/uni-t\xe4g (esc)
searching for changes
- warning: cannot update 'refs/tags/uni-t\xe4g' (esc)
- warning: cannot update 'refs/tags/lat-t\xe4g' (esc)
no changes found (ignoring 1 changesets without bookmarks or tags)
[1]
$ HGENCODING=utf-8 hg push
pushing to $TESTTMP/repo.git
searching for changes
+ remote: found 0 deltas to reuse (dulwich0210 !)
adding reference refs/tags/lat-t\xc3\xa4g (esc)
adding reference refs/tags/uni-t\xc3\xa4g (esc)
#else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/tests/test-git-tags.t
new/hg-git-1.0.3/tests/test-git-tags.t
--- old/hg-git-1.0.2/tests/test-git-tags.t 2023-03-03 12:16:51.000000000
+0100
+++ new/hg-git-1.0.3/tests/test-git-tags.t 2023-11-07 16:55:14.000000000
+0100
@@ -263,6 +263,7 @@
beta 1:7fe02317c63d git
alpha 0:ff7a2f2d8d70 git
#endif
+ $ hg book not-master
$ hg tag beta
abort: tag 'beta' already exists (use -f to force)
[255]
@@ -277,11 +278,12 @@
adding objects
remote: found 0 deltas to reuse (dulwich0210 !)
added 1 commits with 1 trees and 1 blobs
- updating reference refs/heads/master
+ adding reference refs/heads/not-master
$ hg tags
tip 5:c49682c7cba4
- default/master 5:c49682c7cba4
+ default/not-master 5:c49682c7cba4
gamma 4:0eb1ab0073a8
+ default/master 4:0eb1ab0073a8
beta 4:0eb1ab0073a8
detached 2:61175962e488
alpha 0:ff7a2f2d8d70
@@ -295,8 +297,9 @@
importing 6 git commits
$ hg tags -q
tip
- default/master
+ default/not-master
gamma
+ default/master
beta
detached
alpha
@@ -305,27 +308,31 @@
Test how pulling an explicit branch with an annotated tag:
$ hg clone -r master repo.git hgrepo-2
- importing 5 git commits
- new changesets ff7a2f2d8d70:c49682c7cba4 (5 drafts)
+ importing 4 git commits
+ new changesets ff7a2f2d8d70:0eb1ab0073a8 (4 drafts)
updating to branch default
- 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg log -r 'ancestors(master) and tagged()' -T shorttags -R hgrepo-2
0:ff7a2f2d8d70 draft alpha
- 3:0eb1ab0073a8 draft beta gamma
- 4:c49682c7cba4 draft default/master tip
+ 3:0eb1ab0073a8 draft default/master gamma tip
$ rm -rf hgrepo-2
$ hg clone -r master repo.git hgrepo-2
- importing 5 git commits
- new changesets ff7a2f2d8d70:c49682c7cba4 (5 drafts)
+ importing 4 git commits
+ new changesets ff7a2f2d8d70:0eb1ab0073a8 (4 drafts)
updating to branch default
- 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg log -r 'tagged()' -T shorttags -R hgrepo-2
0:ff7a2f2d8d70 draft alpha
- 3:0eb1ab0073a8 draft beta gamma
- 4:c49682c7cba4 draft default/master tip
+ 3:0eb1ab0073a8 draft default/master gamma tip
This used to die:
$ hg -R hgrepo-2 gexport
+This used to fail, since we didn't actually pull the annotated tag:
+ $ hg -R hgrepo-2 push
+ pushing to $TESTTMP/repo.git
+ searching for changes
+ no changes found
+ [1]
$ rm -rf hgrepo-2
Check that pulling will update phases only:
@@ -336,6 +343,6 @@
pulling from $TESTTMP/repo.git
no changes found
$ hg log -T shorttags -r gamma -r detached
- 4:0eb1ab0073a8 draft beta gamma
+ 4:0eb1ab0073a8 draft beta default/master gamma
2:61175962e488 draft detached X
$ cd ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hg-git-1.0.2/tests/test-orphan-tags.t
new/hg-git-1.0.3/tests/test-orphan-tags.t
--- old/hg-git-1.0.2/tests/test-orphan-tags.t 2023-03-03 12:16:51.000000000
+0100
+++ new/hg-git-1.0.3/tests/test-orphan-tags.t 2023-11-07 16:50:01.000000000
+0100
@@ -59,7 +59,7 @@
$ cd ..
Create a Mercurial clone
-n
+
$ hg clone -U repo.git hgrepo
importing 4 git commits
new changesets b8e77484829b:387d03400596 (4 drafts)