Show More
@@ -0,0 +1,35 b'' | |||||
|
1 | hg log --debug shouldn't show different data than {file_*} template keywords | |||
|
2 | https://bz.mercurial-scm.org/show_bug.cgi?id=6642 | |||
|
3 | ||||
|
4 | $ hg init issue6642 | |||
|
5 | $ cd issue6642 | |||
|
6 | ||||
|
7 | $ echo a > a | |||
|
8 | $ hg ci -qAm a | |||
|
9 | $ echo b > b | |||
|
10 | $ hg ci -qAm b | |||
|
11 | $ hg up 0 -q | |||
|
12 | $ echo c > c | |||
|
13 | $ hg ci -qAm c | |||
|
14 | $ hg merge -q | |||
|
15 | $ hg ci -m merge | |||
|
16 | ||||
|
17 | $ hg log -GT '{rev} {desc} file_adds: [{file_adds}], file_mods: [{file_mods}], file_dels: [{file_dels}], files: [{files}]\n' | |||
|
18 | @ 3 merge file_adds: [], file_mods: [], file_dels: [], files: [] | |||
|
19 | |\ | |||
|
20 | | o 2 c file_adds: [c], file_mods: [], file_dels: [], files: [c] | |||
|
21 | | | | |||
|
22 | o | 1 b file_adds: [b], file_mods: [], file_dels: [], files: [b] | |||
|
23 | |/ | |||
|
24 | o 0 a file_adds: [a], file_mods: [], file_dels: [], files: [a] | |||
|
25 | ||||
|
26 | ||||
|
27 | $ hg log -r . --debug | grep files | |||
|
28 | [1] | |||
|
29 | $ hg log -r . --debug -T json | egrep '(added|removed|modified)' | |||
|
30 | "added": [], | |||
|
31 | "modified": [], | |||
|
32 | "removed": [], | |||
|
33 | $ hg log -r . --debug -T xml | grep path | |||
|
34 | <paths> | |||
|
35 | </paths> |
@@ -228,3 +228,4 b' d4486810a1795fba9521449b8885ced034f3a6dd' | |||||
228 | 5bd6bcd31dd1ebb63b8914b00064f96297267af7 0 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 |
@@ -241,3 +241,4 b' d4486810a1795fba9521449b8885ced034f3a6dd' | |||||
241 | 5bd6bcd31dd1ebb63b8914b00064f96297267af7 6.1.1 |
|
241 | 5bd6bcd31dd1ebb63b8914b00064f96297267af7 6.1.1 | |
242 | 0ddd5e1f5f67438af85d12e4ce6c39021dde9916 6.1.2 |
|
242 | 0ddd5e1f5f67438af85d12e4ce6c39021dde9916 6.1.2 | |
243 | 6b10151b962108f65bfa12b3918b1021ca334f73 6.1.3 |
|
243 | 6b10151b962108f65bfa12b3918b1021ca334f73 6.1.3 | |
|
244 | 0cc5f74ff7f0f4ac2427096bddbe102dbc2453ae 6.1.4 |
@@ -2086,10 +2086,17 b' def _docommit(ui, repo, *pats, **opts):' | |||||
2086 | extra[b'close'] = b'1' |
|
2086 | extra[b'close'] = b'1' | |
2087 |
|
2087 | |||
2088 | if repo[b'.'].closesbranch(): |
|
2088 | if repo[b'.'].closesbranch(): | |
2089 | raise error.InputError( |
|
2089 | # Not ideal, but let us do an extra status early to prevent early | |
2090 | _(b'current revision is already a branch closing head') |
|
2090 | # bail out. | |
2091 | ) |
|
2091 | matcher = scmutil.match(repo[None], pats, opts) | |
2092 | elif not bheads: |
|
2092 | s = repo.status(match=matcher) | |
|
2093 | if s.modified or s.added or s.removed: | |||
|
2094 | bheads = repo.branchheads(branch, closed=True) | |||
|
2095 | else: | |||
|
2096 | msg = _(b'current revision is already a branch closing head') | |||
|
2097 | raise error.InputError(msg) | |||
|
2098 | ||||
|
2099 | if not bheads: | |||
2093 | raise error.InputError( |
|
2100 | raise error.InputError( | |
2094 | _(b'branch "%s" has no heads to close') % branch |
|
2101 | _(b'branch "%s" has no heads to close') % branch | |
2095 | ) |
|
2102 | ) |
@@ -376,10 +376,9 b' class changesetprinter:' | |||||
376 | self._exthook(ctx) |
|
376 | self._exthook(ctx) | |
377 |
|
377 | |||
378 | if self.ui.debugflag: |
|
378 | if self.ui.debugflag: | |
379 | files = ctx.p1().status(ctx) |
|
|||
380 | for key, value in zip( |
|
379 | for key, value in zip( | |
381 | [b'files', b'files+', b'files-'], |
|
380 | [b'files', b'files+', b'files-'], | |
382 |
[ |
|
381 | [ctx.filesmodified(), ctx.filesadded(), ctx.filesremoved()], | |
383 | ): |
|
382 | ): | |
384 | if value: |
|
383 | if value: | |
385 | self.ui.write( |
|
384 | self.ui.write( | |
@@ -511,11 +510,10 b' class changesetformatter(changesetprinte' | |||||
511 | or b'added' in datahint |
|
510 | or b'added' in datahint | |
512 | or b'removed' in datahint |
|
511 | or b'removed' in datahint | |
513 | ): |
|
512 | ): | |
514 | files = ctx.p1().status(ctx) |
|
|||
515 | fm.data( |
|
513 | fm.data( | |
516 |
modified=fm.formatlist( |
|
514 | modified=fm.formatlist(ctx.filesmodified(), name=b'file'), | |
517 |
added=fm.formatlist( |
|
515 | added=fm.formatlist(ctx.filesadded(), name=b'file'), | |
518 |
removed=fm.formatlist( |
|
516 | removed=fm.formatlist(ctx.filesremoved(), name=b'file'), | |
519 | ) |
|
517 | ) | |
520 |
|
518 | |||
521 | verbose = not self.ui.debugflag and self.ui.verbose |
|
519 | verbose = not self.ui.debugflag and self.ui.verbose |
@@ -2436,6 +2436,7 b' def purge(' | |||||
2436 | status = repo.status(match=matcher, ignored=ignored, unknown=unknown) |
|
2436 | status = repo.status(match=matcher, ignored=ignored, unknown=unknown) | |
2437 |
|
2437 | |||
2438 | if confirm: |
|
2438 | if confirm: | |
|
2439 | msg = None | |||
2439 | nb_ignored = len(status.ignored) |
|
2440 | nb_ignored = len(status.ignored) | |
2440 | nb_unknown = len(status.unknown) |
|
2441 | nb_unknown = len(status.unknown) | |
2441 | if nb_unknown and nb_ignored: |
|
2442 | if nb_unknown and nb_ignored: | |
@@ -2457,12 +2458,12 b' def purge(' | |||||
2457 | b"permanently delete at least %d empty directories?" |
|
2458 | b"permanently delete at least %d empty directories?" | |
2458 | ) |
|
2459 | ) | |
2459 | msg %= dir_count |
|
2460 | msg %= dir_count | |
2460 |
|
|
2461 | if msg is None: | |
2461 | # XXX we might be missing directory there |
|
2462 | return res | |
2462 | return res |
|
2463 | else: | |
2463 | msg += b" (yN)$$ &Yes $$ &No" |
|
2464 | msg += b" (yN)$$ &Yes $$ &No" | |
2464 | if repo.ui.promptchoice(msg, default=1) == 1: |
|
2465 | if repo.ui.promptchoice(msg, default=1) == 1: | |
2465 | raise error.CanceledError(_(b'removal cancelled')) |
|
2466 | raise error.CanceledError(_(b'removal cancelled')) | |
2466 |
|
2467 | |||
2467 | if removefiles: |
|
2468 | if removefiles: | |
2468 | for f in sorted(status.unknown + status.ignored): |
|
2469 | for f in sorted(status.unknown + status.ignored): |
@@ -1,5 +1,18 b'' | |||||
1 | '''This is the last release to support Python 2. Mercurial is Python 3 only starting with 6.2''' |
|
1 | '''This is the last release to support Python 2. Mercurial is Python 3 only starting with 6.2''' | |
2 |
|
2 | |||
|
3 | = Mercurial 6.1.4 = | |||
|
4 | ||||
|
5 | * url: raise error if CONNECT request to proxy was unsuccessful | |||
|
6 | * docker: avoid /tmp write access issues by fixing permissions | |||
|
7 | * logcmdutil: use the same data as {file*} template keywords (issue6642) | |||
|
8 | * commit: allow to close branch when committing change over a closed head | |||
|
9 | * rust-status: don't trigger dirstate v1 rewrite when only v2 data is changed | |||
|
10 | * purge: prevent a silly crash with --confirm --files | |||
|
11 | * rust: relax im-rc dependency to allow minor updates" | |||
|
12 | * Improve PyPy support | |||
|
13 | * Improve Py3 error handling | |||
|
14 | * Documentation fixes | |||
|
15 | ||||
3 | = Mercurial 6.1.3 = |
|
16 | = Mercurial 6.1.3 = | |
4 |
|
17 | |||
5 | '''security: ''' |
|
18 | '''security: ''' |
@@ -31,6 +31,13 b' use crate::StatusOptions;' | |||||
31 | /// anymore) is less than this fraction of the total amount of existing data. |
|
31 | /// anymore) is less than this fraction of the total amount of existing data. | |
32 | const ACCEPTABLE_UNREACHABLE_BYTES_RATIO: f32 = 0.5; |
|
32 | const ACCEPTABLE_UNREACHABLE_BYTES_RATIO: f32 = 0.5; | |
33 |
|
33 | |||
|
34 | #[derive(Debug, PartialEq, Eq)] | |||
|
35 | /// Version of the on-disk format | |||
|
36 | pub enum DirstateVersion { | |||
|
37 | V1, | |||
|
38 | V2, | |||
|
39 | } | |||
|
40 | ||||
34 | #[derive(Debug)] |
|
41 | #[derive(Debug)] | |
35 | pub struct DirstateMap<'on_disk> { |
|
42 | pub struct DirstateMap<'on_disk> { | |
36 | /// Contents of the `.hg/dirstate` file |
|
43 | /// Contents of the `.hg/dirstate` file | |
@@ -54,6 +61,8 b" pub struct DirstateMap<'on_disk> {" | |||||
54 | /// Size of the data used to first load this `DirstateMap`. Used in case |
|
61 | /// Size of the data used to first load this `DirstateMap`. Used in case | |
55 | /// we need to write some new metadata, but no new data on disk. |
|
62 | /// we need to write some new metadata, but no new data on disk. | |
56 | pub(super) old_data_size: usize, |
|
63 | pub(super) old_data_size: usize, | |
|
64 | ||||
|
65 | pub(super) dirstate_version: DirstateVersion, | |||
57 | } |
|
66 | } | |
58 |
|
67 | |||
59 | /// Using a plain `HgPathBuf` of the full path from the repository root as a |
|
68 | /// Using a plain `HgPathBuf` of the full path from the repository root as a | |
@@ -441,6 +450,7 b" impl<'on_disk> DirstateMap<'on_disk> {" | |||||
441 | ignore_patterns_hash: [0; on_disk::IGNORE_PATTERNS_HASH_LEN], |
|
450 | ignore_patterns_hash: [0; on_disk::IGNORE_PATTERNS_HASH_LEN], | |
442 | unreachable_bytes: 0, |
|
451 | unreachable_bytes: 0, | |
443 | old_data_size: 0, |
|
452 | old_data_size: 0, | |
|
453 | dirstate_version: DirstateVersion::V1, | |||
444 | } |
|
454 | } | |
445 | } |
|
455 | } | |
446 |
|
456 |
@@ -3,6 +3,7 b'' | |||||
3 | //! See `mercurial/helptext/internals/dirstate-v2.txt` |
|
3 | //! See `mercurial/helptext/internals/dirstate-v2.txt` | |
4 |
|
4 | |||
5 | use crate::dirstate::{DirstateV2Data, TruncatedTimestamp}; |
|
5 | use crate::dirstate::{DirstateV2Data, TruncatedTimestamp}; | |
|
6 | use crate::dirstate_tree::dirstate_map::DirstateVersion; | |||
6 | use crate::dirstate_tree::dirstate_map::{self, DirstateMap, NodeRef}; |
|
7 | use crate::dirstate_tree::dirstate_map::{self, DirstateMap, NodeRef}; | |
7 | use crate::dirstate_tree::path_with_basename::WithBasename; |
|
8 | use crate::dirstate_tree::path_with_basename::WithBasename; | |
8 | use crate::errors::HgError; |
|
9 | use crate::errors::HgError; | |
@@ -276,7 +277,9 b" pub(super) fn read<'on_disk>(" | |||||
276 | metadata: &[u8], |
|
277 | metadata: &[u8], | |
277 | ) -> Result<DirstateMap<'on_disk>, DirstateV2ParseError> { |
|
278 | ) -> Result<DirstateMap<'on_disk>, DirstateV2ParseError> { | |
278 | if on_disk.is_empty() { |
|
279 | if on_disk.is_empty() { | |
279 |
|
|
280 | let mut map = DirstateMap::empty(on_disk); | |
|
281 | map.dirstate_version = DirstateVersion::V2; | |||
|
282 | return Ok(map); | |||
280 | } |
|
283 | } | |
281 | let (meta, _) = TreeMetadata::from_bytes(metadata) |
|
284 | let (meta, _) = TreeMetadata::from_bytes(metadata) | |
282 | .map_err(|_| DirstateV2ParseError)?; |
|
285 | .map_err(|_| DirstateV2ParseError)?; | |
@@ -291,6 +294,7 b" pub(super) fn read<'on_disk>(" | |||||
291 | ignore_patterns_hash: meta.ignore_patterns_hash, |
|
294 | ignore_patterns_hash: meta.ignore_patterns_hash, | |
292 | unreachable_bytes: meta.unreachable_bytes.get(), |
|
295 | unreachable_bytes: meta.unreachable_bytes.get(), | |
293 | old_data_size: on_disk.len(), |
|
296 | old_data_size: on_disk.len(), | |
|
297 | dirstate_version: DirstateVersion::V2, | |||
294 | }; |
|
298 | }; | |
295 | Ok(dirstate_map) |
|
299 | Ok(dirstate_map) | |
296 | } |
|
300 | } |
@@ -4,6 +4,7 b' use crate::dirstate::status::StatusPath;' | |||||
4 | use crate::dirstate_tree::dirstate_map::BorrowedPath; |
|
4 | use crate::dirstate_tree::dirstate_map::BorrowedPath; | |
5 | use crate::dirstate_tree::dirstate_map::ChildNodesRef; |
|
5 | use crate::dirstate_tree::dirstate_map::ChildNodesRef; | |
6 | use crate::dirstate_tree::dirstate_map::DirstateMap; |
|
6 | use crate::dirstate_tree::dirstate_map::DirstateMap; | |
|
7 | use crate::dirstate_tree::dirstate_map::DirstateVersion; | |||
7 | use crate::dirstate_tree::dirstate_map::NodeRef; |
|
8 | use crate::dirstate_tree::dirstate_map::NodeRef; | |
8 | use crate::dirstate_tree::on_disk::DirstateV2ParseError; |
|
9 | use crate::dirstate_tree::on_disk::DirstateV2ParseError; | |
9 | use crate::matchers::get_ignore_function; |
|
10 | use crate::matchers::get_ignore_function; | |
@@ -59,16 +60,29 b" pub fn status<'dirstate>(" | |||||
59 |
|
60 | |||
60 | let (ignore_fn, warnings, patterns_changed): (IgnoreFnType, _, _) = |
|
61 | let (ignore_fn, warnings, patterns_changed): (IgnoreFnType, _, _) = | |
61 | if options.list_ignored || options.list_unknown { |
|
62 | if options.list_ignored || options.list_unknown { | |
62 | let mut hasher = Sha1::new(); |
|
63 | let (ignore_fn, warnings, changed) = match dmap.dirstate_version { | |
63 | let (ignore_fn, warnings) = get_ignore_function( |
|
64 | DirstateVersion::V1 => { | |
64 | ignore_files, |
|
65 | let (ignore_fn, warnings) = get_ignore_function( | |
65 |
|
|
66 | ignore_files, | |
66 | &mut |pattern_bytes| hasher.update(pattern_bytes), |
|
67 | &root_dir, | |
67 | )?; |
|
68 | &mut |_pattern_bytes| {}, | |
68 | let new_hash = *hasher.finalize().as_ref(); |
|
69 | )?; | |
69 | let changed = new_hash != dmap.ignore_patterns_hash; |
|
70 | (ignore_fn, warnings, None) | |
70 | dmap.ignore_patterns_hash = new_hash; |
|
71 | } | |
71 | (ignore_fn, warnings, Some(changed)) |
|
72 | DirstateVersion::V2 => { | |
|
73 | let mut hasher = Sha1::new(); | |||
|
74 | let (ignore_fn, warnings) = get_ignore_function( | |||
|
75 | ignore_files, | |||
|
76 | &root_dir, | |||
|
77 | &mut |pattern_bytes| hasher.update(pattern_bytes), | |||
|
78 | )?; | |||
|
79 | let new_hash = *hasher.finalize().as_ref(); | |||
|
80 | let changed = new_hash != dmap.ignore_patterns_hash; | |||
|
81 | dmap.ignore_patterns_hash = new_hash; | |||
|
82 | (ignore_fn, warnings, Some(changed)) | |||
|
83 | } | |||
|
84 | }; | |||
|
85 | (ignore_fn, warnings, changed) | |||
72 | } else { |
|
86 | } else { | |
73 | (Box::new(|&_| true), vec![], None) |
|
87 | (Box::new(|&_| true), vec![], None) | |
74 | }; |
|
88 | }; | |
@@ -133,7 +147,8 b" pub fn status<'dirstate>(" | |||||
133 |
|
147 | |||
134 | outcome.dirty = common.ignore_patterns_have_changed == Some(true) |
|
148 | outcome.dirty = common.ignore_patterns_have_changed == Some(true) | |
135 | || !outdated.is_empty() |
|
149 | || !outdated.is_empty() | |
136 |
|| !new_cachable.is_empty() |
|
150 | || (!new_cachable.is_empty() | |
|
151 | && dmap.dirstate_version == DirstateVersion::V2); | |||
137 |
|
152 | |||
138 | // Remove outdated mtimes before adding new mtimes, in case a given |
|
153 | // Remove outdated mtimes before adding new mtimes, in case a given | |
139 | // directory is both |
|
154 | // directory is both |
@@ -283,6 +283,19 b' verify update will accept invalid legacy' | |||||
283 | abort: current revision is already a branch closing head |
|
283 | abort: current revision is already a branch closing head | |
284 | [10] |
|
284 | [10] | |
285 |
|
285 | |||
|
286 | $ echo foo > b | |||
|
287 | $ hg commit -d '9 0' --close-branch -m 're-closing this branch' | |||
|
288 | ||||
|
289 | $ echo bar > b | |||
|
290 | $ hg commit -d '9 0' --close-branch -m 're-closing this branch' bh1 | |||
|
291 | abort: current revision is already a branch closing head | |||
|
292 | [10] | |||
|
293 | $ hg commit -d '9 0' --close-branch -m 're-closing this branch' b | |||
|
294 | ||||
|
295 | $ hg debugstrip --rev 13: --no-backup | |||
|
296 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
297 | $ hg revert --all --no-backup | |||
|
298 | ||||
286 | $ hg log -r tip --debug |
|
299 | $ hg log -r tip --debug | |
287 | changeset: 12:e3d49c0575d8fc2cb1cd6859c747c14f5f6d499f |
|
300 | changeset: 12:e3d49c0575d8fc2cb1cd6859c747c14f5f6d499f | |
288 | branch: b |
|
301 | branch: b |
@@ -407,7 +407,6 b' test that phase are displayed in log at ' | |||||
407 | manifest: 7:5e724ffacba267b2ab726c91fc8b650710deaaa8 |
|
407 | manifest: 7:5e724ffacba267b2ab726c91fc8b650710deaaa8 | |
408 | user: test |
|
408 | user: test | |
409 | date: Thu Jan 01 00:00:00 1970 +0000 |
|
409 | date: Thu Jan 01 00:00:00 1970 +0000 | |
410 | files+: C D E |
|
|||
411 | extra: branch=default |
|
410 | extra: branch=default | |
412 | description: |
|
411 | description: | |
413 | merge B' and E |
|
412 | merge B' and E |
General Comments 0
You need to be logged in to leave comments.
Login now