Show More
@@ -1853,7 +1853,7 b' def upgraderequirements(orig, repo):' | |||
|
1853 | 1853 | |
|
1854 | 1854 | |
|
1855 | 1855 | @eh.wrapfunction(urlmod, b'open') |
|
1856 | def openlargefile(orig, ui, url_, data=None): | |
|
1856 | def openlargefile(orig, ui, url_, data=None, **kwargs): | |
|
1857 | 1857 | if url_.startswith(_lfscheme): |
|
1858 | 1858 | if data: |
|
1859 | 1859 | msg = b"cannot use data on a 'largefile://' url" |
@@ -1861,4 +1861,4 b' def openlargefile(orig, ui, url_, data=N' | |||
|
1861 | 1861 | lfid = url_[len(_lfscheme) :] |
|
1862 | 1862 | return storefactory.getlfile(ui, lfid) |
|
1863 | 1863 | else: |
|
1864 | return orig(ui, url_, data=data) | |
|
1864 | return orig(ui, url_, data=data, **kwargs) |
@@ -3145,7 +3145,7 b' def commitstatus(repo, node, branch, bhe' | |||
|
3145 | 3145 | # avoid reporting something like "committed new head" when |
|
3146 | 3146 | # recommitting old changesets, and issue a helpful warning |
|
3147 | 3147 | # for most instances |
|
3148 | repo.ui.warn(_("warning: commit already existed in the repository!\n")) | |
|
3148 | repo.ui.warn(_(b"warning: commit already existed in the repository!\n")) | |
|
3149 | 3149 | elif ( |
|
3150 | 3150 | not opts.get(b'amend') |
|
3151 | 3151 | and bheads |
@@ -1333,11 +1333,17 b' coreconfigitem(' | |||
|
1333 | 1333 | ) |
|
1334 | 1334 | coreconfigitem( |
|
1335 | 1335 | b'hooks', |
|
1336 |
b' |
|
|
1336 | b'[^:]*', | |
|
1337 | 1337 | default=dynamicdefault, |
|
1338 | 1338 | generic=True, |
|
1339 | 1339 | ) |
|
1340 | 1340 | coreconfigitem( |
|
1341 | b'hooks', | |
|
1342 | b'.*:run-with-plain', | |
|
1343 | default=True, | |
|
1344 | generic=True, | |
|
1345 | ) | |
|
1346 | coreconfigitem( | |
|
1341 | 1347 | b'hgweb-paths', |
|
1342 | 1348 | b'.*', |
|
1343 | 1349 | default=list, |
@@ -1027,6 +1027,13 b' Example ``.hg/hgrc``::' | |||
|
1027 | 1027 | incoming.autobuild = /my/build/hook |
|
1028 | 1028 | # force autobuild hook to run before other incoming hooks |
|
1029 | 1029 | priority.incoming.autobuild = 1 |
|
1030 | ### control HGPLAIN setting when running autobuild hook | |
|
1031 | # HGPLAIN always set (default from Mercurial 5.7) | |
|
1032 | incoming.autobuild:run-with-plain = yes | |
|
1033 | # HGPLAIN never set | |
|
1034 | incoming.autobuild:run-with-plain = no | |
|
1035 | # HGPLAIN inherited from environment (default before Mercurila 5.7) | |
|
1036 | incoming.autobuild:run-with-plain = auto | |
|
1030 | 1037 | |
|
1031 | 1038 | Most hooks are run with environment variables set that give useful |
|
1032 | 1039 | additional information. For each hook below, the environment variables |
@@ -157,7 +157,15 b' def _exthook(ui, repo, htype, name, cmd,' | |||
|
157 | 157 | env[b'HG_PENDING'] = repo.root |
|
158 | 158 | env[b'HG_HOOKTYPE'] = htype |
|
159 | 159 | env[b'HG_HOOKNAME'] = name |
|
160 | env[b'HGPLAIN'] = b'1' | |
|
160 | ||
|
161 | if ui.config(b'hooks', b'%s:run-with-plain' % name) == b'auto': | |
|
162 | plain = ui.plain() | |
|
163 | else: | |
|
164 | plain = ui.configbool(b'hooks', b'%s:run-with-plain' % name) | |
|
165 | if plain: | |
|
166 | env[b'HGPLAIN'] = b'1' | |
|
167 | else: | |
|
168 | env[b'HGPLAIN'] = b'' | |
|
161 | 169 | |
|
162 | 170 | for k, v in pycompat.iteritems(args): |
|
163 | 171 | # transaction changes can accumulate MBs of data, so skip it |
@@ -224,7 +232,11 b' def _hookitems(ui, _untrusted=False):' | |||
|
224 | 232 | """return all hooks items ready to be sorted""" |
|
225 | 233 | hooks = {} |
|
226 | 234 | for name, cmd in ui.configitems(b'hooks', untrusted=_untrusted): |
|
227 | if name.startswith(b'priority.') or name.startswith(b'tonative.'): | |
|
235 | if ( | |
|
236 | name.startswith(b'priority.') | |
|
237 | or name.startswith(b'tonative.') | |
|
238 | or b':' in name | |
|
239 | ): | |
|
228 | 240 | continue |
|
229 | 241 | |
|
230 | 242 | priority = ui.configint(b'hooks', b'priority.%s' % name, 0) |
@@ -60,8 +60,6 b' urlreq = util.urlreq' | |||
|
60 | 60 | # The config knobs that will be altered (if unset) by ui.tweakdefaults. |
|
61 | 61 | tweakrc = b""" |
|
62 | 62 | [ui] |
|
63 | # Gives detailed exit codes for input/user errors, config errors, etc. | |
|
64 | detailed-exit-code = True | |
|
65 | 63 | # The rollback command is dangerous. As a rule, don't use it. |
|
66 | 64 | rollback = False |
|
67 | 65 | # Make `hg status` report copy information |
@@ -546,7 +546,11 b' def _gui():' | |||
|
546 | 546 | # pure build; use a safe default |
|
547 | 547 | return True |
|
548 | 548 | else: |
|
549 | return pycompat.iswindows or encoding.environ.get(b"DISPLAY") | |
|
549 | return ( | |
|
550 | pycompat.iswindows | |
|
551 | or encoding.environ.get(b"DISPLAY") | |
|
552 | or encoding.environ.get(b"WAYLAND_DISPLAY") | |
|
553 | ) | |
|
550 | 554 | |
|
551 | 555 | |
|
552 | 556 | def gui(): |
@@ -19,9 +19,6 b'' | |||
|
19 | 19 | |
|
20 | 20 | * `hg purge` is now a core command using `--confirm` by default. |
|
21 | 21 | |
|
22 | * `hg strip`, from the strip extension, is now a core command, `hg | |
|
23 | debugstrip`. The extension remains for compatibility. | |
|
24 | ||
|
25 | 22 | * `hg diff` and `hg extdiff` now support `--from <rev>` and `--to <rev>` |
|
26 | 23 | arguments as clearer alternatives to `-r <revs>`. `-r <revs>` has been |
|
27 | 24 | deprecated. |
@@ -776,58 +776,66 b' where' | |||
|
776 | 776 | #[cfg(not(feature = "dirstate-tree"))] |
|
777 | 777 | #[timed] |
|
778 | 778 | pub fn extend_from_dmap(&self, results: &mut Vec<DispatchedPath<'a>>) { |
|
779 |
results.par_extend( |
|
|
780 | move |(filename, entry)| { | |
|
781 | let filename: &HgPath = filename; | |
|
782 | let filename_as_path = match hg_path_to_path_buf(filename) { | |
|
783 | Ok(f) => f, | |
|
784 | Err(_) => { | |
|
785 | return ( | |
|
779 | results.par_extend( | |
|
780 | self.dmap | |
|
781 | .par_iter() | |
|
782 | .filter(|(path, _)| self.matcher.matches(path)) | |
|
783 | .map(move |(filename, entry)| { | |
|
784 | let filename: &HgPath = filename; | |
|
785 | let filename_as_path = match hg_path_to_path_buf(filename) | |
|
786 | { | |
|
787 | Ok(f) => f, | |
|
788 | Err(_) => { | |
|
789 | return ( | |
|
790 | Cow::Borrowed(filename), | |
|
791 | INVALID_PATH_DISPATCH, | |
|
792 | ) | |
|
793 | } | |
|
794 | }; | |
|
795 | let meta = self | |
|
796 | .root_dir | |
|
797 | .join(filename_as_path) | |
|
798 | .symlink_metadata(); | |
|
799 | match meta { | |
|
800 | Ok(m) | |
|
801 | if !(m.file_type().is_file() | |
|
802 | || m.file_type().is_symlink()) => | |
|
803 | { | |
|
804 | ( | |
|
805 | Cow::Borrowed(filename), | |
|
806 | dispatch_missing(entry.state), | |
|
807 | ) | |
|
808 | } | |
|
809 | Ok(m) => ( | |
|
786 | 810 | Cow::Borrowed(filename), |
|
787 |
|
|
|
788 |
|
|
|
789 |
|
|
|
790 | }; | |
|
791 | let meta = | |
|
792 | self.root_dir.join(filename_as_path).symlink_metadata(); | |
|
793 |
|
|
|
794 |
|
|
|
795 |
|
|
|
796 | || m.file_type().is_symlink()) => | |
|
797 | { | |
|
798 |
|
|
|
799 | Cow::Borrowed(filename), | |
|
800 | dispatch_missing(entry.state), | |
|
801 | ) | |
|
811 | dispatch_found( | |
|
812 | filename, | |
|
813 | *entry, | |
|
814 | HgMetadata::from_metadata(m), | |
|
815 | &self.dmap.copy_map, | |
|
816 | self.options, | |
|
817 | ), | |
|
818 | ), | |
|
819 | Err(e) | |
|
820 | if e.kind() == ErrorKind::NotFound | |
|
821 | || e.raw_os_error() == Some(20) => | |
|
822 | { | |
|
823 | // Rust does not yet have an `ErrorKind` for | |
|
824 | // `NotADirectory` (errno 20) | |
|
825 | // It happens if the dirstate contains `foo/bar` | |
|
826 | // and foo is not a | |
|
827 | // directory | |
|
828 | ( | |
|
829 | Cow::Borrowed(filename), | |
|
830 | dispatch_missing(entry.state), | |
|
831 | ) | |
|
832 | } | |
|
833 | Err(e) => { | |
|
834 | (Cow::Borrowed(filename), dispatch_os_error(&e)) | |
|
835 | } | |
|
802 | 836 | } |
|
803 |
|
|
|
804 | Cow::Borrowed(filename), | |
|
805 | dispatch_found( | |
|
806 | filename, | |
|
807 | *entry, | |
|
808 | HgMetadata::from_metadata(m), | |
|
809 | &self.dmap.copy_map, | |
|
810 | self.options, | |
|
811 | ), | |
|
812 | ), | |
|
813 | Err(e) | |
|
814 | if e.kind() == ErrorKind::NotFound | |
|
815 | || e.raw_os_error() == Some(20) => | |
|
816 | { | |
|
817 | // Rust does not yet have an `ErrorKind` for | |
|
818 | // `NotADirectory` (errno 20) | |
|
819 | // It happens if the dirstate contains `foo/bar` | |
|
820 | // and foo is not a | |
|
821 | // directory | |
|
822 | ( | |
|
823 | Cow::Borrowed(filename), | |
|
824 | dispatch_missing(entry.state), | |
|
825 | ) | |
|
826 | } | |
|
827 | Err(e) => (Cow::Borrowed(filename), dispatch_os_error(&e)), | |
|
828 | } | |
|
829 | }, | |
|
830 | )); | |
|
837 | }), | |
|
838 | ); | |
|
831 | 839 | } |
|
832 | 840 | |
|
833 | 841 | /// Checks all files that are in the dirstate but were not found during the |
@@ -1138,6 +1138,21 b' test import rev as raw-rev' | |||
|
1138 | 1138 | $ cd test1 |
|
1139 | 1139 | $ hg import -q --bypass --exact http://localhost:$HGPORT/rev/1 |
|
1140 | 1140 | |
|
1141 | repeat test above, with largefiles enabled | |
|
1142 | ||
|
1143 | $ cd .. | |
|
1144 | $ rm -r test1 | |
|
1145 | $ hg clone -r0 test test1 | |
|
1146 | adding changesets | |
|
1147 | adding manifests | |
|
1148 | adding file changes | |
|
1149 | added 1 changesets with 2 changes to 2 files | |
|
1150 | new changesets 0cd96de13884 | |
|
1151 | updating to branch default | |
|
1152 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
1153 | $ cd test1 | |
|
1154 | $ hg import --config extensions.largefiles= -q --bypass --exact http://localhost:$HGPORT/rev/1 | |
|
1155 | ||
|
1141 | 1156 | raw revision with diff block numbers |
|
1142 | 1157 | |
|
1143 | 1158 | $ killdaemons.py |
@@ -1390,3 +1390,42 b' Non-blocking hook' | |||
|
1390 | 1390 | date: Thu Jan 01 00:00:00 1970 +0000 |
|
1391 | 1391 | summary: a |
|
1392 | 1392 | |
|
1393 | ||
|
1394 | unsetup the test | |
|
1395 | ---------------- | |
|
1396 | ||
|
1397 | # touch the file to unconfuse chg with a diffrent mtime | |
|
1398 | $ sleep 1 | |
|
1399 | $ touch $TESTTMP/untrusted.py | |
|
1400 | $ cat << EOF >> $HGRCPATH | |
|
1401 | > [extensions] | |
|
1402 | > untrusted=! | |
|
1403 | > EOF | |
|
1404 | ||
|
1405 | HGPLAIN setting in hooks | |
|
1406 | ======================== | |
|
1407 | ||
|
1408 | $ cat << EOF >> .hg/hgrc | |
|
1409 | > [hooks] | |
|
1410 | > pre-version.testing-default=echo '### default ###' plain: \${HGPLAIN:-'<unset>'} | |
|
1411 | > pre-version.testing-yes=echo '### yes #######' plain: \${HGPLAIN:-'<unset>'} | |
|
1412 | > pre-version.testing-yes:run-with-plain=yes | |
|
1413 | > pre-version.testing-no=echo '### no ########' plain: \${HGPLAIN:-'<unset>'} | |
|
1414 | > pre-version.testing-no:run-with-plain=no | |
|
1415 | > pre-version.testing-auto=echo '### auto ######' plain: \${HGPLAIN:-'<unset>'} | |
|
1416 | > pre-version.testing-auto:run-with-plain=auto | |
|
1417 | > EOF | |
|
1418 | ||
|
1419 | $ (unset HGPLAIN; hg version --quiet) | |
|
1420 | ### default ### plain: 1 | |
|
1421 | ### yes ####### plain: 1 | |
|
1422 | ### no ######## plain: <unset> | |
|
1423 | ### auto ###### plain: <unset> | |
|
1424 | Mercurial Distributed SCM (*) (glob) | |
|
1425 | ||
|
1426 | $ HGPLAIN=1 hg version --quiet | |
|
1427 | ### default ### plain: 1 | |
|
1428 | ### yes ####### plain: 1 | |
|
1429 | ### no ######## plain: <unset> | |
|
1430 | ### auto ###### plain: 1 | |
|
1431 | Mercurial Distributed SCM (*) (glob) |
@@ -680,3 +680,14 b" Make sure .hg doesn't show up even as a " | |||
|
680 | 680 | $ cd symlink-repo0 |
|
681 | 681 | $ ln -s ../repo0/.hg |
|
682 | 682 | $ hg status |
|
683 | ||
|
684 | Check using include flag with pattern when status does not need to traverse | |
|
685 | the working directory (issue6483) | |
|
686 | ||
|
687 | $ cd .. | |
|
688 | $ hg init issue6483 | |
|
689 | $ cd issue6483 | |
|
690 | $ touch a.py b.rs | |
|
691 | $ hg add a.py b.rs | |
|
692 | $ hg st -aI "*.py" | |
|
693 | A a.py |
General Comments 0
You need to be logged in to leave comments.
Login now