Show More
@@ -26,6 +26,8 b' pub enum CatRevErrorKind {' | |||||
26 | IoError(std::io::Error), |
|
26 | IoError(std::io::Error), | |
27 | /// The revision has not been found. |
|
27 | /// The revision has not been found. | |
28 | InvalidRevision, |
|
28 | InvalidRevision, | |
|
29 | /// Found more than one revision whose ID match the requested prefix | |||
|
30 | AmbiguousPrefix, | |||
29 | /// A `revlog` file is corrupted. |
|
31 | /// A `revlog` file is corrupted. | |
30 | CorruptedRevlog, |
|
32 | CorruptedRevlog, | |
31 | /// The `revlog` format version is not supported. |
|
33 | /// The `revlog` format version is not supported. | |
@@ -55,6 +57,7 b' impl From<RevlogError> for CatRevError {' | |||||
55 | CatRevErrorKind::UnsuportedRevlogVersion(version) |
|
57 | CatRevErrorKind::UnsuportedRevlogVersion(version) | |
56 | } |
|
58 | } | |
57 | RevlogError::InvalidRevision => CatRevErrorKind::InvalidRevision, |
|
59 | RevlogError::InvalidRevision => CatRevErrorKind::InvalidRevision, | |
|
60 | RevlogError::AmbiguousPrefix => CatRevErrorKind::AmbiguousPrefix, | |||
58 | RevlogError::Corrupted => CatRevErrorKind::CorruptedRevlog, |
|
61 | RevlogError::Corrupted => CatRevErrorKind::CorruptedRevlog, | |
59 | RevlogError::UnknowDataFormat(format) => { |
|
62 | RevlogError::UnknowDataFormat(format) => { | |
60 | CatRevErrorKind::UnknowRevlogDataFormat(format) |
|
63 | CatRevErrorKind::UnknowRevlogDataFormat(format) |
@@ -24,6 +24,8 b' pub enum DebugDataErrorKind {' | |||||
24 | IoError(std::io::Error), |
|
24 | IoError(std::io::Error), | |
25 | /// The revision has not been found. |
|
25 | /// The revision has not been found. | |
26 | InvalidRevision, |
|
26 | InvalidRevision, | |
|
27 | /// Found more than one revision whose ID match the requested prefix | |||
|
28 | AmbiguousPrefix, | |||
27 | /// A `revlog` file is corrupted. |
|
29 | /// A `revlog` file is corrupted. | |
28 | CorruptedRevlog, |
|
30 | CorruptedRevlog, | |
29 | /// The `revlog` format version is not supported. |
|
31 | /// The `revlog` format version is not supported. | |
@@ -69,6 +71,9 b' impl From<RevlogError> for DebugDataErro' | |||||
69 | RevlogError::InvalidRevision => { |
|
71 | RevlogError::InvalidRevision => { | |
70 | DebugDataErrorKind::InvalidRevision |
|
72 | DebugDataErrorKind::InvalidRevision | |
71 | } |
|
73 | } | |
|
74 | RevlogError::AmbiguousPrefix => { | |||
|
75 | DebugDataErrorKind::AmbiguousPrefix | |||
|
76 | } | |||
72 | RevlogError::Corrupted => DebugDataErrorKind::CorruptedRevlog, |
|
77 | RevlogError::Corrupted => DebugDataErrorKind::CorruptedRevlog, | |
73 | RevlogError::UnknowDataFormat(format) => { |
|
78 | RevlogError::UnknowDataFormat(format) => { | |
74 | DebugDataErrorKind::UnknowRevlogDataFormat(format) |
|
79 | DebugDataErrorKind::UnknowRevlogDataFormat(format) |
@@ -86,6 +86,8 b' pub enum ListRevTrackedFilesErrorKind {' | |||||
86 | IoError(std::io::Error), |
|
86 | IoError(std::io::Error), | |
87 | /// The revision has not been found. |
|
87 | /// The revision has not been found. | |
88 | InvalidRevision, |
|
88 | InvalidRevision, | |
|
89 | /// Found more than one revision whose ID match the requested prefix | |||
|
90 | AmbiguousPrefix, | |||
89 | /// A `revlog` file is corrupted. |
|
91 | /// A `revlog` file is corrupted. | |
90 | CorruptedRevlog, |
|
92 | CorruptedRevlog, | |
91 | /// The `revlog` format version is not supported. |
|
93 | /// The `revlog` format version is not supported. | |
@@ -119,6 +121,9 b' impl From<RevlogError> for ListRevTracke' | |||||
119 | RevlogError::InvalidRevision => { |
|
121 | RevlogError::InvalidRevision => { | |
120 | ListRevTrackedFilesErrorKind::InvalidRevision |
|
122 | ListRevTrackedFilesErrorKind::InvalidRevision | |
121 | } |
|
123 | } | |
|
124 | RevlogError::AmbiguousPrefix => { | |||
|
125 | ListRevTrackedFilesErrorKind::AmbiguousPrefix | |||
|
126 | } | |||
122 | RevlogError::Corrupted => { |
|
127 | RevlogError::Corrupted => { | |
123 | ListRevTrackedFilesErrorKind::CorruptedRevlog |
|
128 | ListRevTrackedFilesErrorKind::CorruptedRevlog | |
124 | } |
|
129 | } |
@@ -21,6 +21,8 b' pub enum RevlogError {' | |||||
21 | IoError(std::io::Error), |
|
21 | IoError(std::io::Error), | |
22 | UnsuportedVersion(u16), |
|
22 | UnsuportedVersion(u16), | |
23 | InvalidRevision, |
|
23 | InvalidRevision, | |
|
24 | /// Found more than one entry whose ID match the requested prefix | |||
|
25 | AmbiguousPrefix, | |||
24 | Corrupted, |
|
26 | Corrupted, | |
25 | UnknowDataFormat(u8), |
|
27 | UnknowDataFormat(u8), | |
26 | } |
|
28 | } | |
@@ -93,14 +95,21 b' impl Revlog {' | |||||
93 | pub fn get_node_rev(&self, node: &[u8]) -> Result<Revision, RevlogError> { |
|
95 | pub fn get_node_rev(&self, node: &[u8]) -> Result<Revision, RevlogError> { | |
94 | // This is brute force. But it is fast enough for now. |
|
96 | // This is brute force. But it is fast enough for now. | |
95 | // Optimization will come later. |
|
97 | // Optimization will come later. | |
|
98 | let mut found_by_prefix = None; | |||
96 | for rev in (0..self.len() as Revision).rev() { |
|
99 | for rev in (0..self.len() as Revision).rev() { | |
97 | let index_entry = |
|
100 | let index_entry = | |
98 | self.index.get_entry(rev).ok_or(RevlogError::Corrupted)?; |
|
101 | self.index.get_entry(rev).ok_or(RevlogError::Corrupted)?; | |
99 |
if |
|
102 | if index_entry.hash() == node { | |
100 | return Ok(rev); |
|
103 | return Ok(rev); | |
101 | } |
|
104 | } | |
|
105 | if index_entry.hash().starts_with(node) { | |||
|
106 | if found_by_prefix.is_some() { | |||
|
107 | return Err(RevlogError::AmbiguousPrefix); | |||
|
108 | } | |||
|
109 | found_by_prefix = Some(rev) | |||
|
110 | } | |||
102 | } |
|
111 | } | |
103 |
|
|
112 | found_by_prefix.ok_or(RevlogError::InvalidRevision) | |
104 | } |
|
113 | } | |
105 |
|
114 | |||
106 | /// Return the full data associated to a revision. |
|
115 | /// Return the full data associated to a revision. |
@@ -75,6 +75,13 b' fn map_rev_error(rev: &str, err: CatRevE' | |||||
75 | )) |
|
75 | )) | |
76 | .into(), |
|
76 | .into(), | |
77 | )), |
|
77 | )), | |
|
78 | CatRevErrorKind::AmbiguousPrefix => CommandErrorKind::Abort(Some( | |||
|
79 | utf8_to_local(&format!( | |||
|
80 | "abort: ambiguous revision identifier {}\n", | |||
|
81 | rev | |||
|
82 | )) | |||
|
83 | .into(), | |||
|
84 | )), | |||
78 | CatRevErrorKind::UnsuportedRevlogVersion(version) => { |
|
85 | CatRevErrorKind::UnsuportedRevlogVersion(version) => { | |
79 | CommandErrorKind::Abort(Some( |
|
86 | CommandErrorKind::Abort(Some( | |
80 | utf8_to_local(&format!( |
|
87 | utf8_to_local(&format!( |
@@ -55,6 +55,15 b' fn to_command_error(rev: &str, err: Debu' | |||||
55 | .into(), |
|
55 | .into(), | |
56 | )), |
|
56 | )), | |
57 | }, |
|
57 | }, | |
|
58 | DebugDataErrorKind::AmbiguousPrefix => CommandError { | |||
|
59 | kind: CommandErrorKind::Abort(Some( | |||
|
60 | utf8_to_local(&format!( | |||
|
61 | "abort: ambiguous revision identifier{}\n", | |||
|
62 | rev | |||
|
63 | )) | |||
|
64 | .into(), | |||
|
65 | )), | |||
|
66 | }, | |||
58 | DebugDataErrorKind::UnsuportedRevlogVersion(version) => CommandError { |
|
67 | DebugDataErrorKind::UnsuportedRevlogVersion(version) => CommandError { | |
59 | kind: CommandErrorKind::Abort(Some( |
|
68 | kind: CommandErrorKind::Abort(Some( | |
60 | utf8_to_local(&format!( |
|
69 | utf8_to_local(&format!( |
@@ -91,6 +91,15 b' fn map_rev_error(rev: &str, err: ListRev' | |||||
91 | .into(), |
|
91 | .into(), | |
92 | )) |
|
92 | )) | |
93 | } |
|
93 | } | |
|
94 | ListRevTrackedFilesErrorKind::AmbiguousPrefix => { | |||
|
95 | CommandErrorKind::Abort(Some( | |||
|
96 | utf8_to_local(&format!( | |||
|
97 | "abort: ambiguous revision identifier {}\n", | |||
|
98 | rev | |||
|
99 | )) | |||
|
100 | .into(), | |||
|
101 | )) | |||
|
102 | } | |||
94 | ListRevTrackedFilesErrorKind::UnsuportedRevlogVersion(version) => { |
|
103 | ListRevTrackedFilesErrorKind::UnsuportedRevlogVersion(version) => { | |
95 | CommandErrorKind::Abort(Some( |
|
104 | CommandErrorKind::Abort(Some( | |
96 | utf8_to_local(&format!( |
|
105 | utf8_to_local(&format!( |
@@ -74,31 +74,49 b' Debuging data in inline index' | |||||
74 | $ rm -rf repository |
|
74 | $ rm -rf repository | |
75 | $ hg init repository |
|
75 | $ hg init repository | |
76 | $ cd repository |
|
76 | $ cd repository | |
77 | $ for i in 1 2 3; do |
|
77 | $ for i in 1 2 3 4 5 6; do | |
78 | > echo $i >> file$i |
|
78 | > echo $i >> file-$i | |
79 | > hg add file$i |
|
79 | > hg add file-$i | |
80 |
> hg commit -m " |
|
80 | > hg commit -m "Commit $i" -q | |
81 | > done |
|
81 | > done | |
82 | $ rhg debugdata -c 2 |
|
82 | $ rhg debugdata -c 2 | |
83 | e36fa63d37a576b27a69057598351db6ee5746bd |
|
83 | 8d0267cb034247ebfa5ee58ce59e22e57a492297 | |
84 | test |
|
84 | test | |
85 | 0 0 |
|
85 | 0 0 | |
86 | file3 |
|
86 | file-3 | |
87 |
|
87 | |||
88 |
|
|
88 | Commit 3 (no-eol) | |
89 | $ rhg debugdata -m 2 |
|
89 | $ rhg debugdata -m 2 | |
90 | file1\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc) |
|
90 | file-1\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc) | |
91 | file2\x005d9299349fc01ddd25d0070d149b124d8f10411e (esc) |
|
91 | file-2\x005d9299349fc01ddd25d0070d149b124d8f10411e (esc) | |
92 | file3\x002661d26c649684b482d10f91960cc3db683c38b4 (esc) |
|
92 | file-3\x002661d26c649684b482d10f91960cc3db683c38b4 (esc) | |
93 |
|
93 | |||
94 | Debuging with full node id |
|
94 | Debuging with full node id | |
95 | $ rhg debugdata -c `hg log -r 0 -T '{node}'` |
|
95 | $ rhg debugdata -c `hg log -r 0 -T '{node}'` | |
96 | c8e64718e1ca0312eeee0f59d37f8dc612793856 |
|
96 | d1d1c679d3053e8926061b6f45ca52009f011e3f | |
97 | test |
|
97 | test | |
98 | 0 0 |
|
98 | 0 0 | |
99 | file1 |
|
99 | file-1 | |
100 |
|
100 | |||
101 |
|
|
101 | Commit 1 (no-eol) | |
|
102 | ||||
|
103 | Specifying revisions by changeset ID | |||
|
104 | $ hg log -T '{node}\n' | |||
|
105 | c6ad58c44207b6ff8a4fbbca7045a5edaa7e908b | |||
|
106 | d654274993d0149eecc3cc03214f598320211900 | |||
|
107 | f646af7e96481d3a5470b695cf30ad8e3ab6c575 | |||
|
108 | cf8b83f14ead62b374b6e91a0e9303b85dfd9ed7 | |||
|
109 | 91c6f6e73e39318534dc415ea4e8a09c99cd74d6 | |||
|
110 | 6ae9681c6d30389694d8701faf24b583cf3ccafe | |||
|
111 | $ rhg files -r cf8b83 | |||
|
112 | file-1 | |||
|
113 | file-2 | |||
|
114 | file-3 | |||
|
115 | $ rhg cat -r cf8b83 file-2 | |||
|
116 | 2 | |||
|
117 | $ rhg cat -r c file-2 | |||
|
118 | abort: invalid revision identifier c | |||
|
119 | [255] | |||
102 |
|
120 | |||
103 | Cat files |
|
121 | Cat files | |
104 | $ cd $TESTTMP |
|
122 | $ cd $TESTTMP | |
@@ -116,26 +134,6 b' Cat copied file should not display copy ' | |||||
116 | $ rhg cat -r 1 copy_of_original |
|
134 | $ rhg cat -r 1 copy_of_original | |
117 | original content |
|
135 | original content | |
118 |
|
136 | |||
119 | Specifying revisions by changeset ID |
|
|||
120 | $ hg log |
|
|||
121 | changeset: 1:41263439dc17 |
|
|||
122 | tag: tip |
|
|||
123 | user: test |
|
|||
124 | date: Thu Jan 01 00:00:00 1970 +0000 |
|
|||
125 | summary: add copy of original |
|
|||
126 |
|
||||
127 | changeset: 0:1c9e69808da7 |
|
|||
128 | user: test |
|
|||
129 | date: Thu Jan 01 00:00:00 1970 +0000 |
|
|||
130 | summary: add original |
|
|||
131 |
|
||||
132 | $ rhg files -r 41263439dc17 |
|
|||
133 | abort: invalid revision identifier 41263439dc17 |
|
|||
134 | [255] |
|
|||
135 | $ rhg cat -r 41263439dc17 original |
|
|||
136 | abort: invalid revision identifier 41263439dc17 |
|
|||
137 | [255] |
|
|||
138 |
|
||||
139 | Requirements |
|
137 | Requirements | |
140 | $ rhg debugrequirements |
|
138 | $ rhg debugrequirements | |
141 | dotencode |
|
139 | dotencode |
General Comments 0
You need to be logged in to leave comments.
Login now