Show More
@@ -253,3 +253,4 b' 5a8b5420103937fca97c584c5162178eed828ada' | |||||
253 | c083d9776cb2fb6056715b2988d1ea48055f3162 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVI+lgZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVu9jC/0c3oGNY1FweOc6CQGNTGWQL4NLROgLNi4YuGlN+QLnjO5pFsfqVXXHeySz4jnBF8u1bYEnnkKIUOUAEz171e/AEpzTxNMA//hK4JJk9zVfesb+wbXh3JwMHdQPLYF0/ZMUgW1vkxCvh4pqSmYjOSgYTqGe2wJfgUd4P3CxucUf7KoWYfFN2GpPxhDAGYsiu36beWuBaMdjTq9NieVGpwOZzSZ4dx+Rg19pEUgb0qQoOGRyBc+RjNEoAeNldcvQFg8J+YJbpjKrg61oe86wqA+9t3J/k/JDfMiSMqIYe4h1uIM2/rhcnt+EynZQBWrch4q8L5Kkvu0DkEc2AkpWoTgp6EksRw4tTk31RLqV+hi4klAFH1PSWCu+EyMFWcUNdQ+Lpy+cICxL7+P9kjx05MbU2cRWitf3q/hBBP4r3drLlsFlC+SPbq/zFfoRnjnmClOLth3oEgHuVNu4cdvzJGffTBmO+wiCixvZPkrDlnrhDnvQB0wWkmz3El8GqkxYic0= |
|
253 | c083d9776cb2fb6056715b2988d1ea48055f3162 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVI+lgZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVu9jC/0c3oGNY1FweOc6CQGNTGWQL4NLROgLNi4YuGlN+QLnjO5pFsfqVXXHeySz4jnBF8u1bYEnnkKIUOUAEz171e/AEpzTxNMA//hK4JJk9zVfesb+wbXh3JwMHdQPLYF0/ZMUgW1vkxCvh4pqSmYjOSgYTqGe2wJfgUd4P3CxucUf7KoWYfFN2GpPxhDAGYsiu36beWuBaMdjTq9NieVGpwOZzSZ4dx+Rg19pEUgb0qQoOGRyBc+RjNEoAeNldcvQFg8J+YJbpjKrg61oe86wqA+9t3J/k/JDfMiSMqIYe4h1uIM2/rhcnt+EynZQBWrch4q8L5Kkvu0DkEc2AkpWoTgp6EksRw4tTk31RLqV+hi4klAFH1PSWCu+EyMFWcUNdQ+Lpy+cICxL7+P9kjx05MbU2cRWitf3q/hBBP4r3drLlsFlC+SPbq/zFfoRnjnmClOLth3oEgHuVNu4cdvzJGffTBmO+wiCixvZPkrDlnrhDnvQB0wWkmz3El8GqkxYic0= | |
254 | 27055614b68538576fb0439007009acf93fe0a49 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVKXukZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVg5UDACTnRyxApQMQLaRX9khRB6E5XkSJqpR3wqXr5yMLaqgaUGzUUaupA8zTjWoIDM730V1hWliWinQGD/3XA7qUQ31VALRQq8PlvzMEkSz0NB2IDBU6uHdhNAkZQeYm7qJwpzCIuPs/diVm97oUJr0+Y7KJKV7ZxUtZ1bEBHq/FUgyVnLkVQJdb1p28ECIKQ8SS7XY5C8rdYGa1fHYpsLAfTbAunVOEl6Phi3Y3ZqNgcet8WAP+6MwXpgf6ye9O1p2HSaM4BFq2d8AizksjSCuVTTRtuCkpcLDGCtvb6dOJxb4TpMyaYWXerolEGF3ZJsaVgOi/bH7aDsoJP0I5IJnmxiyVjOvOUDd5o3nn0SElsp45r0udGlos5r6tW+kZ9OBBH8nv3AcFxuGD8YFPB3AMRcqIBG1tNLa02bOAaF+uFKVB+YGWHowZtC+SdN2XZ1tp7BD/3CQo+PrpZzEDdVs9S30wef5k+2Nrj2/8tOF/XULy1BRxQV+k2PTlE1/mTaEY60= |
|
254 | 27055614b68538576fb0439007009acf93fe0a49 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVKXukZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVg5UDACTnRyxApQMQLaRX9khRB6E5XkSJqpR3wqXr5yMLaqgaUGzUUaupA8zTjWoIDM730V1hWliWinQGD/3XA7qUQ31VALRQq8PlvzMEkSz0NB2IDBU6uHdhNAkZQeYm7qJwpzCIuPs/diVm97oUJr0+Y7KJKV7ZxUtZ1bEBHq/FUgyVnLkVQJdb1p28ECIKQ8SS7XY5C8rdYGa1fHYpsLAfTbAunVOEl6Phi3Y3ZqNgcet8WAP+6MwXpgf6ye9O1p2HSaM4BFq2d8AizksjSCuVTTRtuCkpcLDGCtvb6dOJxb4TpMyaYWXerolEGF3ZJsaVgOi/bH7aDsoJP0I5IJnmxiyVjOvOUDd5o3nn0SElsp45r0udGlos5r6tW+kZ9OBBH8nv3AcFxuGD8YFPB3AMRcqIBG1tNLa02bOAaF+uFKVB+YGWHowZtC+SdN2XZ1tp7BD/3CQo+PrpZzEDdVs9S30wef5k+2Nrj2/8tOF/XULy1BRxQV+k2PTlE1/mTaEY60= | |
255 | 26c57e7a0890b96e2c473b394de380d6753c9230 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVcykAZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVoGeC/0Uvynfd4xJMSa3ef4lOrw3l0PsOMzLwcITC5b4SlMfo8sHDq1Vr169z/IvI/FhJ8LmK/Spg7OK6TkqJ33fOmpnKZji8oCstM8q0P6xZh55RIE4St8Px/TuC99HvB41sPgcBDQf/dfvXqUKHImxH5C21p93AkvdCie9sdeYzy23VSn1URBBRkfToB6U7QDvktiKE4Hy/mJolNd0FlTOrRiD7K4bzstaLZP8kO1gJQPCPBjqN8glXN/arebcdu8zD7sE22JZA87pJljY7Wy3P6O1zRol2qDPCBshK2zDbrljyOaKR10ciHUBJV0V11nK6xIZ4XE2N4xes3fYlBNsudHXvLutCv40e1VDVjRe2X6ayRZCnKkYI0s4oTl9oFo5olrsfeC5+b/exqB8oTCCqmMFdz3/QFO7/pQ3xck2XaWucG+o3R/y91t6Uy+5LPtIOsR5IevvPIiebpQgIMJkOIRrz5j59U+MafTSGfaDel/niPISQPWZ9T0ORS6q9uNRHCo= |
|
255 | 26c57e7a0890b96e2c473b394de380d6753c9230 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVcykAZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVoGeC/0Uvynfd4xJMSa3ef4lOrw3l0PsOMzLwcITC5b4SlMfo8sHDq1Vr169z/IvI/FhJ8LmK/Spg7OK6TkqJ33fOmpnKZji8oCstM8q0P6xZh55RIE4St8Px/TuC99HvB41sPgcBDQf/dfvXqUKHImxH5C21p93AkvdCie9sdeYzy23VSn1URBBRkfToB6U7QDvktiKE4Hy/mJolNd0FlTOrRiD7K4bzstaLZP8kO1gJQPCPBjqN8glXN/arebcdu8zD7sE22JZA87pJljY7Wy3P6O1zRol2qDPCBshK2zDbrljyOaKR10ciHUBJV0V11nK6xIZ4XE2N4xes3fYlBNsudHXvLutCv40e1VDVjRe2X6ayRZCnKkYI0s4oTl9oFo5olrsfeC5+b/exqB8oTCCqmMFdz3/QFO7/pQ3xck2XaWucG+o3R/y91t6Uy+5LPtIOsR5IevvPIiebpQgIMJkOIRrz5j59U+MafTSGfaDel/niPISQPWZ9T0ORS6q9uNRHCo= | |
|
256 | 71bd09bebbe36a09569cbfb388f371433360056b 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVxxyYZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVrr4C/9UvrFMEo1DOzFP6RpGDnRUEl6ejUBy2cjQ1HXCLZV8zYQxpBK9dMqoLwjv1FKgIwCXEJCWs0qedCZgJ0fd5xZnVPIfb6FzziWYhK3MNUAAzb2ptXrYNUpCGpPyLmaC8YinP+3XmGLkUA4en5Ff1C5aVxQfUgb/FXJQjseBlRXpPxasOs3zKYN1xJXJsJzapqeEI5NJNrjIbwvbFCCr/uPe7FgT65kvcn4SSuGUO2Bg9jMPKiWritJQ83Mdzzw0eJGsKduF2ZTo4R4h1C2z0VdGWtNLg5nXaJT1ZxcsvjJDIfWA/Ds/b/EiMzPL5pHk230/kBbyu/1Q6A+Riy2J1zQLSt5FeRssOEXZD4jCQ/Xs9zptttFTDu7rorcSE+tis8GybGvFgX7JzTcBout6/QfUovpaXuu3IUwaS1U0gaTxKbjnEXZqVY1w4RkdUnhEm42RBlMsa9/TBbgkFacvWMi70VDDATJMPh7dQSi1fylSiYD2HEySAnaBxXU5aPfefbQ= |
@@ -269,3 +269,4 b' 5a8b5420103937fca97c584c5162178eed828ada' | |||||
269 | c083d9776cb2fb6056715b2988d1ea48055f3162 6.5.3 |
|
269 | c083d9776cb2fb6056715b2988d1ea48055f3162 6.5.3 | |
270 | 27055614b68538576fb0439007009acf93fe0a49 6.6rc0 |
|
270 | 27055614b68538576fb0439007009acf93fe0a49 6.6rc0 | |
271 | 26c57e7a0890b96e2c473b394de380d6753c9230 6.6 |
|
271 | 26c57e7a0890b96e2c473b394de380d6753c9230 6.6 | |
|
272 | 71bd09bebbe36a09569cbfb388f371433360056b 6.6.1 |
@@ -973,11 +973,10 b' def perftags(ui, repo, **opts):' | |||||
973 | "clear_cache_on_disk", |
|
973 | "clear_cache_on_disk", | |
974 | _default_clear_on_disk_tags_cache, |
|
974 | _default_clear_on_disk_tags_cache, | |
975 | ) |
|
975 | ) | |
976 | clear_fnodes_fn = getattr( |
|
976 | if getattr(tags, 'clear_cache_fnodes_is_working', False): | |
977 | tags, |
|
977 | clear_fnodes_fn = tags.clear_cache_fnodes | |
978 | "clear_cache_fnodes", |
|
978 | else: | |
979 |
_default_clear_on_disk_tags_fnodes_cache |
|
979 | clear_fnodes_fn = _default_clear_on_disk_tags_fnodes_cache | |
980 | ) |
|
|||
981 | clear_fnodes_rev_fn = getattr( |
|
980 | clear_fnodes_rev_fn = getattr( | |
982 | tags, |
|
981 | tags, | |
983 | "forget_fnodes", |
|
982 | "forget_fnodes", | |
@@ -986,7 +985,7 b' def perftags(ui, repo, **opts):' | |||||
986 |
|
985 | |||
987 | clear_revs = [] |
|
986 | clear_revs = [] | |
988 | if clear_fnode_revs: |
|
987 | if clear_fnode_revs: | |
989 |
clear_revs.extend |
|
988 | clear_revs.extend(scmutil.revrange(repo, clear_fnode_revs)) | |
990 |
|
989 | |||
991 | if update_last: |
|
990 | if update_last: | |
992 | revset = b'last(all(), %d)' % update_last |
|
991 | revset = b'last(all(), %d)' % update_last |
@@ -1926,7 +1926,9 b' def querydrev(ui, spec):' | |||||
1926 | raise error.Abort(_(b'unknown symbol: %s') % tree[1]) |
|
1926 | raise error.Abort(_(b'unknown symbol: %s') % tree[1]) | |
1927 | elif op in {b'and_', b'add', b'sub'}: |
|
1927 | elif op in {b'and_', b'add', b'sub'}: | |
1928 | assert len(tree) == 3 |
|
1928 | assert len(tree) == 3 | |
1929 |
return getattr(operator, op)( |
|
1929 | return getattr(operator, pycompat.sysstr(op))( | |
|
1930 | walk(tree[1]), walk(tree[2]) | |||
|
1931 | ) | |||
1930 | elif op == b'group': |
|
1932 | elif op == b'group': | |
1931 | return walk(tree[1]) |
|
1933 | return walk(tree[1]) | |
1932 | elif op == b'ancestors': |
|
1934 | elif op == b'ancestors': |
@@ -1859,7 +1859,7 b" if __name__ == '__main__':" | |||||
1859 | info = ServiceInfo( |
|
1859 | info = ServiceInfo( | |
1860 | b"_http._tcp.local.", |
|
1860 | b"_http._tcp.local.", | |
1861 | b"My Service Name._http._tcp.local.", |
|
1861 | b"My Service Name._http._tcp.local.", | |
1862 |
socket.inet_aton( |
|
1862 | socket.inet_aton("127.0.0.1"), | |
1863 | 1234, |
|
1863 | 1234, | |
1864 | 0, |
|
1864 | 0, | |
1865 | 0, |
|
1865 | 0, |
@@ -783,6 +783,7 b' class _InnerRevlog:' | |||||
783 |
|
783 | |||
784 | def split_inline(self, tr, header, new_index_file_path=None): |
|
784 | def split_inline(self, tr, header, new_index_file_path=None): | |
785 | """split the data of an inline revlog into an index and a data file""" |
|
785 | """split the data of an inline revlog into an index and a data file""" | |
|
786 | assert self._delay_buffer is None | |||
786 | existing_handles = False |
|
787 | existing_handles = False | |
787 | if self._writinghandles is not None: |
|
788 | if self._writinghandles is not None: | |
788 | existing_handles = True |
|
789 | existing_handles = True | |
@@ -1165,14 +1166,15 b' class _InnerRevlog:' | |||||
1165 | elif len(self.index) == 0: |
|
1166 | elif len(self.index) == 0: | |
1166 | self._orig_index_file = self.index_file |
|
1167 | self._orig_index_file = self.index_file | |
1167 | self.index_file = self._divert_index() |
|
1168 | self.index_file = self._divert_index() | |
1168 | self._segmentfile.filename = self.index_file |
|
|||
1169 | assert self._orig_index_file is not None |
|
1169 | assert self._orig_index_file is not None | |
1170 | assert self.index_file is not None |
|
1170 | assert self.index_file is not None | |
1171 | if self.opener.exists(self.index_file): |
|
1171 | if self.opener.exists(self.index_file): | |
1172 | self.opener.unlink(self.index_file) |
|
1172 | self.opener.unlink(self.index_file) | |
1173 | return self.index_file |
|
1173 | return self.index_file | |
1174 | else: |
|
1174 | else: | |
1175 |
|
|
1175 | self._delay_buffer = [] | |
|
1176 | if self.inline: | |||
|
1177 | self._segmentfile._delay_buffer = self._delay_buffer | |||
1176 | return None |
|
1178 | return None | |
1177 |
|
1179 | |||
1178 | def write_pending(self): |
|
1180 | def write_pending(self): | |
@@ -1192,10 +1194,13 b' class _InnerRevlog:' | |||||
1192 | ifh.seek(0, os.SEEK_END) |
|
1194 | ifh.seek(0, os.SEEK_END) | |
1193 | ifh.write(b"".join(self._delay_buffer)) |
|
1195 | ifh.write(b"".join(self._delay_buffer)) | |
1194 | any_pending = True |
|
1196 | any_pending = True | |
1195 |
|
|
1197 | self._delay_buffer = None | |
|
1198 | if self.inline: | |||
|
1199 | self._segmentfile._delay_buffer = self._delay_buffer | |||
|
1200 | else: | |||
|
1201 | assert self._segmentfile._delay_buffer is None | |||
1196 | self._orig_index_file = self.index_file |
|
1202 | self._orig_index_file = self.index_file | |
1197 | self.index_file = pending_index_file |
|
1203 | self.index_file = pending_index_file | |
1198 | self._segmentfile.filename = self.index_file |
|
|||
1199 | return self.index_file, any_pending |
|
1204 | return self.index_file, any_pending | |
1200 |
|
1205 | |||
1201 | def finalize_pending(self): |
|
1206 | def finalize_pending(self): | |
@@ -1221,7 +1226,6 b' class _InnerRevlog:' | |||||
1221 | ) |
|
1226 | ) | |
1222 | self.index_file = self._orig_index_file |
|
1227 | self.index_file = self._orig_index_file | |
1223 | self._orig_index_file = None |
|
1228 | self._orig_index_file = None | |
1224 | self._segmentfile.filename = self.index_file |
|
|||
1225 | else: |
|
1229 | else: | |
1226 | msg = b"not delay or divert found on this revlog" |
|
1230 | msg = b"not delay or divert found on this revlog" | |
1227 | raise error.ProgrammingError(msg) |
|
1231 | raise error.ProgrammingError(msg) | |
@@ -1305,6 +1309,10 b' class revlog:' | |||||
1305 | trypending=False, |
|
1309 | trypending=False, | |
1306 | try_split=False, |
|
1310 | try_split=False, | |
1307 | canonical_parent_order=True, |
|
1311 | canonical_parent_order=True, | |
|
1312 | data_config=None, | |||
|
1313 | delta_config=None, | |||
|
1314 | feature_config=None, | |||
|
1315 | may_inline=True, # may inline new revlog | |||
1308 | ): |
|
1316 | ): | |
1309 | """ |
|
1317 | """ | |
1310 | create a revlog object |
|
1318 | create a revlog object | |
@@ -1330,6 +1338,7 b' class revlog:' | |||||
1330 | self.postfix = postfix |
|
1338 | self.postfix = postfix | |
1331 | self._trypending = trypending |
|
1339 | self._trypending = trypending | |
1332 | self._try_split = try_split |
|
1340 | self._try_split = try_split | |
|
1341 | self._may_inline = may_inline | |||
1333 | self.opener = opener |
|
1342 | self.opener = opener | |
1334 | if persistentnodemap: |
|
1343 | if persistentnodemap: | |
1335 | self._nodemap_file = nodemaputil.get_nodemap_file(self) |
|
1344 | self._nodemap_file = nodemaputil.get_nodemap_file(self) | |
@@ -1337,19 +1346,25 b' class revlog:' | |||||
1337 | assert target[0] in ALL_KINDS |
|
1346 | assert target[0] in ALL_KINDS | |
1338 | assert len(target) == 2 |
|
1347 | assert len(target) == 2 | |
1339 | self.target = target |
|
1348 | self.target = target | |
1340 |
if |
|
1349 | if feature_config is not None: | |
|
1350 | self.feature_config = feature_config.copy() | |||
|
1351 | elif b'feature-config' in self.opener.options: | |||
1341 | self.feature_config = self.opener.options[b'feature-config'].copy() |
|
1352 | self.feature_config = self.opener.options[b'feature-config'].copy() | |
1342 | else: |
|
1353 | else: | |
1343 | self.feature_config = FeatureConfig() |
|
1354 | self.feature_config = FeatureConfig() | |
1344 | self.feature_config.censorable = censorable |
|
1355 | self.feature_config.censorable = censorable | |
1345 | self.feature_config.canonical_parent_order = canonical_parent_order |
|
1356 | self.feature_config.canonical_parent_order = canonical_parent_order | |
1346 |
if |
|
1357 | if data_config is not None: | |
|
1358 | self.data_config = data_config.copy() | |||
|
1359 | elif b'data-config' in self.opener.options: | |||
1347 | self.data_config = self.opener.options[b'data-config'].copy() |
|
1360 | self.data_config = self.opener.options[b'data-config'].copy() | |
1348 | else: |
|
1361 | else: | |
1349 | self.data_config = DataConfig() |
|
1362 | self.data_config = DataConfig() | |
1350 | self.data_config.check_ambig = checkambig |
|
1363 | self.data_config.check_ambig = checkambig | |
1351 | self.data_config.mmap_large_index = mmaplargeindex |
|
1364 | self.data_config.mmap_large_index = mmaplargeindex | |
1352 |
if |
|
1365 | if delta_config is not None: | |
|
1366 | self.delta_config = delta_config.copy() | |||
|
1367 | elif b'delta-config' in self.opener.options: | |||
1353 | self.delta_config = self.opener.options[b'delta-config'].copy() |
|
1368 | self.delta_config = self.opener.options[b'delta-config'].copy() | |
1354 | else: |
|
1369 | else: | |
1355 | self.delta_config = DeltaConfig() |
|
1370 | self.delta_config = DeltaConfig() | |
@@ -1401,7 +1416,9 b' class revlog:' | |||||
1401 | elif b'revlogv2' in opts: |
|
1416 | elif b'revlogv2' in opts: | |
1402 | new_header = REVLOGV2 |
|
1417 | new_header = REVLOGV2 | |
1403 | elif b'revlogv1' in opts: |
|
1418 | elif b'revlogv1' in opts: | |
1404 |
new_header = REVLOGV1 |
|
1419 | new_header = REVLOGV1 | |
|
1420 | if self._may_inline: | |||
|
1421 | new_header |= FLAG_INLINE_DATA | |||
1405 | if b'generaldelta' in opts: |
|
1422 | if b'generaldelta' in opts: | |
1406 | new_header |= FLAG_GENERALDELTA |
|
1423 | new_header |= FLAG_GENERALDELTA | |
1407 | elif b'revlogv0' in self.opener.options: |
|
1424 | elif b'revlogv0' in self.opener.options: |
@@ -72,11 +72,16 b' def v1_censor(rl, tr, censornode, tombst' | |||||
72 | radix=rl.radix, |
|
72 | radix=rl.radix, | |
73 | postfix=b'tmpcensored', |
|
73 | postfix=b'tmpcensored', | |
74 | censorable=True, |
|
74 | censorable=True, | |
|
75 | data_config=rl.data_config, | |||
|
76 | delta_config=rl.delta_config, | |||
|
77 | feature_config=rl.feature_config, | |||
|
78 | may_inline=rl._inline, | |||
75 | ) |
|
79 | ) | |
76 | newrl._format_version = rl._format_version |
|
80 | # inline splitting will prepare some transaction work that will get | |
77 | newrl._format_flags = rl._format_flags |
|
81 | # confused by the final file move. So if there is a risk of not being | |
78 | newrl.delta_config.general_delta = rl.delta_config.general_delta |
|
82 | # inline at the end, we prevent the new revlog to be inline in the first | |
79 | newrl._parse_index = rl._parse_index |
|
83 | # place. | |
|
84 | assert not (newrl._inline and not rl._inline) | |||
80 |
|
85 | |||
81 | for rev in rl.revs(): |
|
86 | for rev in rl.revs(): | |
82 | node = rl.node(rev) |
|
87 | node = rl.node(rev) | |
@@ -122,7 +127,10 b' def v1_censor(rl, tr, censornode, tombst' | |||||
122 | tr.addbackup(rl._datafile, location=b'store') |
|
127 | tr.addbackup(rl._datafile, location=b'store') | |
123 |
|
128 | |||
124 | rl.opener.rename(newrl._indexfile, rl._indexfile) |
|
129 | rl.opener.rename(newrl._indexfile, rl._indexfile) | |
125 |
if n |
|
130 | if newrl._inline: | |
|
131 | assert rl._inline | |||
|
132 | else: | |||
|
133 | assert not rl._inline | |||
126 | rl.opener.rename(newrl._datafile, rl._datafile) |
|
134 | rl.opener.rename(newrl._datafile, rl._datafile) | |
127 |
|
135 | |||
128 | rl.clearcaches() |
|
136 | rl.clearcaches() |
@@ -916,9 +916,13 b' def clear_cache_on_disk(repo):' | |||||
916 | repo.cachevfs.tryunlink(_filename(repo)) |
|
916 | repo.cachevfs.tryunlink(_filename(repo)) | |
917 |
|
917 | |||
918 |
|
918 | |||
|
919 | # a small attribute to help `hg perf::tags` to detect a fixed version. | |||
|
920 | clear_cache_fnodes_is_working = True | |||
|
921 | ||||
|
922 | ||||
919 | def clear_cache_fnodes(repo): |
|
923 | def clear_cache_fnodes(repo): | |
920 | """function used by the perf extension to clear "file node cache""" |
|
924 | """function used by the perf extension to clear "file node cache""" | |
921 |
repo.cachevfs.tryunlink(_f |
|
925 | repo.cachevfs.tryunlink(_fnodescachefile) | |
922 |
|
926 | |||
923 |
|
927 | |||
924 | def forget_fnodes(repo, revs): |
|
928 | def forget_fnodes(repo, revs): |
@@ -686,8 +686,9 b' if pycompat.iswindows:' | |||||
686 | # we can't use close_fds *and* redirect stdin. I'm not sure that we |
|
686 | # we can't use close_fds *and* redirect stdin. I'm not sure that we | |
687 | # need to because the detached process has no console connection. |
|
687 | # need to because the detached process has no console connection. | |
688 |
|
688 | |||
|
689 | stdin = None | |||
|
690 | ||||
689 | try: |
|
691 | try: | |
690 | stdin = None |
|
|||
691 | if stdin_bytes is not None: |
|
692 | if stdin_bytes is not None: | |
692 | stdin = pycompat.unnamedtempfile() |
|
693 | stdin = pycompat.unnamedtempfile() | |
693 | stdin.write(stdin_bytes) |
|
694 | stdin.write(stdin_bytes) |
@@ -1,3 +1,16 b'' | |||||
|
1 | = Mercurial 6.6.1 = | |||
|
2 | ||||
|
3 | The first two patches fix aborted transactions that could happen since 6.6. | |||
|
4 | ||||
|
5 | * revlog: avoid exposing delayed index entry too widely in non-inline revlog | |||
|
6 | * revlog: avoid wrongly updating the data file location on "divert" | |||
|
7 | * tests: do not fail tests in a state with uncommitted .py file removal | |||
|
8 | * perf-tags: fix the --clear-fnode-cache-rev code | |||
|
9 | * perf-tags: fix clear_cache_fnodes to actually clear that cache | |||
|
10 | * censor: fix things around inlining | |||
|
11 | * Various Python 3 cleanups | |||
|
12 | * Various Windows test suite fixes | |||
|
13 | ||||
1 | = Mercurial 6.6 = |
|
14 | = Mercurial 6.6 = | |
2 |
|
15 | |||
3 | As usual, a *lot* of patches don't make it to this list. |
|
16 | As usual, a *lot* of patches don't make it to this list. |
@@ -170,6 +170,7 b' substitutions = [' | |||||
170 | br'Cannot assign requested address', |
|
170 | br'Cannot assign requested address', | |
171 | br'Can\'t assign requested address', |
|
171 | br'Can\'t assign requested address', | |
172 | # FormatMessage(WSAEADDRNOTAVAIL) |
|
172 | # FormatMessage(WSAEADDRNOTAVAIL) | |
|
173 | br'The requested address is not valid in its context', | |||
173 | ), |
|
174 | ), | |
174 | } |
|
175 | } | |
175 |
|
176 |
@@ -294,22 +294,40 b' Can re-add file after being deleted + ce' | |||||
294 | $ hg cat -r "$H2^^^" target | head -n 10 |
|
294 | $ hg cat -r "$H2^^^" target | head -n 10 | |
295 | Tainted file now super sanitized |
|
295 | Tainted file now super sanitized | |
296 |
|
296 | |||
297 |
Can censor |
|
297 | Can censor enough revision to move back to inline storage | |
298 |
|
298 | |||
299 | $ for x in `"$PYTHON" $TESTDIR/seq.py 0 50000` |
|
299 | $ hg debugrevlogstats | grep target | |
300 | > do |
|
300 | rev-count data-size inl type target | |
301 | > echo "Password: hunter$x" >> target |
|
301 | 8 ??? no file target (glob) (revlogv2 !) | |
302 | > done |
|
302 | 8 ??? yes file target (glob) (revlogv1 !) | |
|
303 | $ cat /dev/rand?m | dd status=none count=200 | f --hexdump > target | |||
303 |
$ |
|
304 | $ hg ci -m 'add 100k passwords' | |
304 | $ H2=`hg id --debug -i` |
|
305 | $ H2=`hg id --debug -i` | |
305 | $ C5=$H2 |
|
306 | $ C5=$H2 | |
306 | $ hg revert -r "$H2^" target |
|
307 | $ hg revert -r "$H2^" target | |
307 | $ hg ci -m 'cleaned 100k passwords' |
|
308 | $ hg ci -m 'cleaned 100k passwords' | |
308 | $ H2=`hg id --debug -i` |
|
309 | $ H2=`hg id --debug -i` | |
|
310 | $ hg debugrevlogstats | grep target | |||
|
311 | rev-count data-size inl type target | |||
|
312 | 10 ?????? no file target (glob) | |||
309 | $ hg --config extensions.censor= censor -r $C5 target |
|
313 | $ hg --config extensions.censor= censor -r $C5 target | |
|
314 | ||||
|
315 | The important part is for the censor operation to not crash and the repository | |||
|
316 | to not be corrupted. Right now this involve keeping the revlog split. | |||
|
317 | ||||
|
318 | $ hg debugrevlogstats | grep target | |||
|
319 | rev-count data-size inl type target | |||
|
320 | 10 ??? no file target (glob) | |||
310 | $ hg cat -r $C5 target | head -n 10 |
|
321 | $ hg cat -r $C5 target | head -n 10 | |
311 | $ hg cat -r $H2 target | head -n 10 |
|
322 | $ hg cat -r $H2 target | head -n 10 | |
312 | fresh start |
|
323 | fresh start | |
|
324 | $ hg verify | |||
|
325 | checking changesets | |||
|
326 | checking manifests | |||
|
327 | crosschecking files in changesets and manifests | |||
|
328 | checking files | |||
|
329 | checking dirstate | |||
|
330 | checked 12 changesets with 13 changes to 2 files | |||
313 |
|
331 | |||
314 | Repo with censored nodes can be cloned and cloned nodes are censored |
|
332 | Repo with censored nodes can be cloned and cloned nodes are censored | |
315 |
|
333 | |||
@@ -341,7 +359,7 b' Repo cloned before tainted content intro' | |||||
341 | adding manifests |
|
359 | adding manifests | |
342 | adding file changes |
|
360 | adding file changes | |
343 | added 11 changesets with 11 changes to 2 files (+1 heads) |
|
361 | added 11 changesets with 11 changes to 2 files (+1 heads) | |
344 | new changesets 186fb27560c3:683e4645fded |
|
362 | new changesets * (glob) | |
345 | (run 'hg heads' to see heads, 'hg merge' to merge) |
|
363 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
346 | $ hg update 4 |
|
364 | $ hg update 4 | |
347 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
365 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
@@ -401,7 +419,7 b' Censored nodes can be bundled up and unb' | |||||
401 | adding manifests |
|
419 | adding manifests | |
402 | adding file changes |
|
420 | adding file changes | |
403 | added 2 changesets with 2 changes to 2 files (+1 heads) |
|
421 | added 2 changesets with 2 changes to 2 files (+1 heads) | |
404 | new changesets 075be80ac777:dcbaf17bf3a1 (2 drafts) |
|
422 | new changesets * (glob) | |
405 | (run 'hg heads .' to see heads, 'hg merge' to merge) |
|
423 | (run 'hg heads .' to see heads, 'hg merge' to merge) | |
406 | $ hg cat -r $REV target | head -n 10 |
|
424 | $ hg cat -r $REV target | head -n 10 | |
407 | $ hg cat -r $CLEANREV target | head -n 10 |
|
425 | $ hg cat -r $CLEANREV target | head -n 10 | |
@@ -458,7 +476,7 b' Censored nodes can be imported on top of' | |||||
458 | adding manifests |
|
476 | adding manifests | |
459 | adding file changes |
|
477 | adding file changes | |
460 | added 6 changesets with 5 changes to 2 files (+1 heads) |
|
478 | added 6 changesets with 5 changes to 2 files (+1 heads) | |
461 | new changesets efbe78065929:683e4645fded (6 drafts) |
|
479 | new changesets * (glob) | |
462 | (run 'hg heads .' to see heads, 'hg merge' to merge) |
|
480 | (run 'hg heads .' to see heads, 'hg merge' to merge) | |
463 | $ hg update $H2 |
|
481 | $ hg update $H2 | |
464 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
482 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
@@ -1,4 +1,4 b'' | |||||
1 |
#require test-repo hg |
|
1 | #require test-repo hg32 | |
2 |
|
2 | |||
3 | $ . "$TESTDIR/helpers-testrepo.sh" |
|
3 | $ . "$TESTDIR/helpers-testrepo.sh" | |
4 | $ import_checker="$TESTDIR"/../contrib/import-checker.py |
|
4 | $ import_checker="$TESTDIR"/../contrib/import-checker.py | |
@@ -14,12 +14,12 b' these may expose other cycles.' | |||||
14 | Known-bad files are excluded by -X as some of them would produce unstable |
|
14 | Known-bad files are excluded by -X as some of them would produce unstable | |
15 | outputs, which should be fixed later. |
|
15 | outputs, which should be fixed later. | |
16 |
|
16 | |||
17 |
NOTE: the `hg l |
|
17 | NOTE: the `hg files` command here only works on files that are known to | |
18 | Mercurial. If you add an import of a new file and haven't yet `hg add`ed it, you |
|
18 | Mercurial. If you add an import of a new file and haven't yet `hg add`ed it, you | |
19 | will likely receive warnings about a direct import. |
|
19 | will likely receive warnings about a direct import. | |
20 |
|
20 | |||
21 |
$ testrepohg l |
|
21 | $ testrepohg files 'set:**.py or grep(r"^#!.*?python")' \ | |
22 | > 'tests/**.t' \ |
|
22 | > 'glob:tests/**.t' \ | |
23 | > -X hgweb.cgi \ |
|
23 | > -X hgweb.cgi \ | |
24 | > -X setup.py \ |
|
24 | > -X setup.py \ | |
25 | > -X contrib/automation/ \ |
|
25 | > -X contrib/automation/ \ |
@@ -72,7 +72,7 b' Try corrupting the cache' | |||||
72 |
|
72 | |||
73 | Create local tag with long name: |
|
73 | Create local tag with long name: | |
74 |
|
74 | |||
75 |
$ T=`hg identify - |
|
75 | $ T=`hg identify -r . -T '{node}'` | |
76 | $ hg tag -l "This is a local tag with a really long name!" |
|
76 | $ hg tag -l "This is a local tag with a really long name!" | |
77 | $ hg tags |
|
77 | $ hg tags | |
78 | tip 0:acb14030fe0a |
|
78 | tip 0:acb14030fe0a |
General Comments 0
You need to be logged in to leave comments.
Login now