diff hgext/largefiles/overrides.py @ 51680:187d7c859be7 stable

largefiles: fix check that ensures that --all-largefiles is only used locally Previously, the command added in the test failed with ?abort: --all-largefiles is incompatible with non-local destination existing_destination?. The reason for the buggy behavior was the use of hg.islocal(), which does ?return true if repo (or path pointing to repo) is local? and, for local paths, assumes that the path is actually pointing to an existing repository and returns whether the path is not a regular file (in which case it assumes that it is a bundlerepo, which are considered non-local).
author Manuel Jacob <me@manueljacob.de>
date Fri, 09 Aug 2024 22:45:32 +0200
parents ea3343104f07
children 454feddab720
line wrap: on
line diff
--- a/hgext/largefiles/overrides.py	Fri Aug 09 14:26:13 2024 +0200
+++ b/hgext/largefiles/overrides.py	Fri Aug 09 22:45:32 2024 +0200
@@ -46,6 +46,8 @@
     actions as upgrade_actions,
 )
 
+from mercurial.utils import urlutil
+
 from . import (
     lfcommands,
     lfutil,
@@ -1136,7 +1138,10 @@
     d = dest
     if d is None:
         d = hg.defaultdest(source)
-    if opts.get('all_largefiles') and not hg.islocal(d):
+    if opts.get('all_largefiles') and urlutil.url(d).scheme not in (
+        b'file',
+        None,
+    ):
         raise error.Abort(
             _(b'--all-largefiles is incompatible with non-local destination %s')
             % d