Show More
@@ -175,3 +175,4 b' a91a2837150bdcb27ae76b3646e6c93cd6a15904' | |||||
175 | 1c8c54cf97256f4468da2eb4dbee24f7f3888e71 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlwG+eIQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91YqSD/9IAwdaPrOeiT+DVBW2x33oFeY1X1f5CBG/vCJptalOd2QDIsD0ANEzQHmzV25RKD851v155Txt/BPlkuBfO/kg0BbOoqTpGZk+5CcoFWeyhJct2CxtCLdEpyZ/98/htMR4VfWprCX2GHXPjS813l9pebsN3WgBUOc2VaUdHNRoAGsMVgWC5BWwNP4XSA9oixFL/O4aGLQ6pPfP3vmMFySWXWnIN8gUZ4sm53eKaT0QCICAgzFh+GzRd81uACDfoJn1d8RS9GK+h6j8x0crLY5CpQQy8lRVkokvc0h6XK44ofc57p9GHAOfprHY3DbBhD9H6fLAf5raUsqPkLRYVGqhg8bOsBr3vJ56hiXJYOYPZSYXGjnHRcUrgfPVrY+6mPTeCIQMPmWBHwYH5Tc5TLrPuxxCL4wVywqGbfmIVP+WFUikkykAAwuPOZAswxJJOB0gsnnxcApmTeXRznBXyvzscMlWVZiMjzflKRRJ9V5RI4Fdc6n1wQ4vuLSO4AUnIypIsV6ZFAOBuFKH7x6nPG0tP3FYzcICaMOPbxEx3LStnuU+UuEs6TIxM6IiR3LPiiDGZ2BA2gjJhDxQFV8hAl8KDO3LsYuyUQCv3RTAP+YejH21bIXdnwDlNqy8Hrd53rq7jZsdb2pMVvOZZ3VmIu64f+jVkD/r5msDUkQL3M9jwg== |
|
175 | 1c8c54cf97256f4468da2eb4dbee24f7f3888e71 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlwG+eIQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91YqSD/9IAwdaPrOeiT+DVBW2x33oFeY1X1f5CBG/vCJptalOd2QDIsD0ANEzQHmzV25RKD851v155Txt/BPlkuBfO/kg0BbOoqTpGZk+5CcoFWeyhJct2CxtCLdEpyZ/98/htMR4VfWprCX2GHXPjS813l9pebsN3WgBUOc2VaUdHNRoAGsMVgWC5BWwNP4XSA9oixFL/O4aGLQ6pPfP3vmMFySWXWnIN8gUZ4sm53eKaT0QCICAgzFh+GzRd81uACDfoJn1d8RS9GK+h6j8x0crLY5CpQQy8lRVkokvc0h6XK44ofc57p9GHAOfprHY3DbBhD9H6fLAf5raUsqPkLRYVGqhg8bOsBr3vJ56hiXJYOYPZSYXGjnHRcUrgfPVrY+6mPTeCIQMPmWBHwYH5Tc5TLrPuxxCL4wVywqGbfmIVP+WFUikkykAAwuPOZAswxJJOB0gsnnxcApmTeXRznBXyvzscMlWVZiMjzflKRRJ9V5RI4Fdc6n1wQ4vuLSO4AUnIypIsV6ZFAOBuFKH7x6nPG0tP3FYzcICaMOPbxEx3LStnuU+UuEs6TIxM6IiR3LPiiDGZ2BA2gjJhDxQFV8hAl8KDO3LsYuyUQCv3RTAP+YejH21bIXdnwDlNqy8Hrd53rq7jZsdb2pMVvOZZ3VmIu64f+jVkD/r5msDUkQL3M9jwg== | |
176 | 197f092b2cd9691e2a55d198f717b231af9be6f9 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlwz6DUQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91SbtD/47TJkSFuDJrvrpLuZROeR48opM8kPtMdbFKZxmeUtap/1q1ahBcA8cnkf5t5iEna57OkPfx0FVw7zupFZSD970q8KeQa1C1oRf+DV83rkOqMEzTLmDYZ5YWWILyDb2NrSkBzArhLNhEtWrFFo9uoigwJWiyNGXUkjVd7XUaYvxVYvnHJcmr98l9sW+RxgV2Cm/6ImeW6BkSUjfrJpZlHUecxcHIaDVniSCVzVF7T+tgG0+CxpehmRrPE/qlPTY2DVHuG6ogwjmu7pWr4kW3M6pTmOYICKjkojIhPTAfNDZGNYruJMukEeB2JyxSz+J9jhjPe//9x4JznpCzm/JzCHFO9CfONjHIcUqLa9qxqhmBFpr1U5J7vRir4ch7v8TGtGbcR3833HTUA7EEMu/Ca48XVfGNDmySQs8zgGpj1yzf/lBGbiAzTSp7Zp+ANLu+R3NjeiDUYQbgf3vcpoHL44duk4dzhD+ofFD75PF1SMTluWbeLCSENH9io2pxVDj3I5VhlNxHdbqY1WXb+sDBVr4niIGzQiKqVOV33ghyRpzVJFZ7SaQG7VR/mLL3UnvJuapLYtUV9+/7Si/CHl7m8NntPMvx1nM/Z4t/BN8Z5cdhPn2PLxp9f5VCmCqLlCQDSv94cCTLlatiCTfF7axgE0u7+CWiOUNyyqg/vu0pjTwIA== |
|
176 | 197f092b2cd9691e2a55d198f717b231af9be6f9 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlwz6DUQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91SbtD/47TJkSFuDJrvrpLuZROeR48opM8kPtMdbFKZxmeUtap/1q1ahBcA8cnkf5t5iEna57OkPfx0FVw7zupFZSD970q8KeQa1C1oRf+DV83rkOqMEzTLmDYZ5YWWILyDb2NrSkBzArhLNhEtWrFFo9uoigwJWiyNGXUkjVd7XUaYvxVYvnHJcmr98l9sW+RxgV2Cm/6ImeW6BkSUjfrJpZlHUecxcHIaDVniSCVzVF7T+tgG0+CxpehmRrPE/qlPTY2DVHuG6ogwjmu7pWr4kW3M6pTmOYICKjkojIhPTAfNDZGNYruJMukEeB2JyxSz+J9jhjPe//9x4JznpCzm/JzCHFO9CfONjHIcUqLa9qxqhmBFpr1U5J7vRir4ch7v8TGtGbcR3833HTUA7EEMu/Ca48XVfGNDmySQs8zgGpj1yzf/lBGbiAzTSp7Zp+ANLu+R3NjeiDUYQbgf3vcpoHL44duk4dzhD+ofFD75PF1SMTluWbeLCSENH9io2pxVDj3I5VhlNxHdbqY1WXb+sDBVr4niIGzQiKqVOV33ghyRpzVJFZ7SaQG7VR/mLL3UnvJuapLYtUV9+/7Si/CHl7m8NntPMvx1nM/Z4t/BN8Z5cdhPn2PLxp9f5VCmCqLlCQDSv94cCTLlatiCTfF7axgE0u7+CWiOUNyyqg/vu0pjTwIA== | |
177 | 593718ff5844cad7a27ee3eb5adad89ac8550949 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlxCG6EQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91YptD/9DG76IvubjzVsfX1UiQcV1mqWuSgz/idpeFCrc6Z1dyFB5UmbHKfAaZnrPBR7ly6bGD9+NZupB9A8QRxX92koiq0Hw2ywbwR5oWVrBaDiinIDLiTQTUCPnNMH0FSNrt4Kf9Gj4RqMufZvL+dR0pDYV0n6HP3aGOeTnowNhv0lUbw/Gx20YrcCU9uf3GbgRvMQiFNv9cTJAdQlH++98C8MVLfRU4ZxP11hI7sR8mp1q6ruJoozd0Cta67E6MyC/L2Rp3W89psvvY7DSTg9RwQwoS8I6U9iyQJ16Bb6UgZVV6jqQqOSxWUaPfKUhJLl2ENHH5f3rzoi3NH6jHuy5rq2v9XuvOpQ7LqSi1Ev0oq1xllZiyD4Zm69Z/Is0mxwqPskZGWR5Lh6Uq3Dh0zJW7O5M2m1IHdAYqffHpUr2NgEQVST4VDvO4fR2d7n6+ZNXYbZrpmQ1j4bpOZCEMqWXPfl4HY7a60hWa884mWxtVLGvhYycxnN8r1o5ouS0pAMAI6qEFFW1XFFN4eNDDWl83BkuDa32DTEthoyi15JM5jS7VPDYACdHE3IVqsTsZq7nn60uoFCGpdMcSqrD2mlUd9Z12x8NnCIrxKhlHLkq89OrQAcz8/0bbluGuzm3FHKb+8VQWr0MgkvOLTqqvOqn97oBdKqo0eyT0IPz8QeVYPbZfQ== |
|
177 | 593718ff5844cad7a27ee3eb5adad89ac8550949 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlxCG6EQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91YptD/9DG76IvubjzVsfX1UiQcV1mqWuSgz/idpeFCrc6Z1dyFB5UmbHKfAaZnrPBR7ly6bGD9+NZupB9A8QRxX92koiq0Hw2ywbwR5oWVrBaDiinIDLiTQTUCPnNMH0FSNrt4Kf9Gj4RqMufZvL+dR0pDYV0n6HP3aGOeTnowNhv0lUbw/Gx20YrcCU9uf3GbgRvMQiFNv9cTJAdQlH++98C8MVLfRU4ZxP11hI7sR8mp1q6ruJoozd0Cta67E6MyC/L2Rp3W89psvvY7DSTg9RwQwoS8I6U9iyQJ16Bb6UgZVV6jqQqOSxWUaPfKUhJLl2ENHH5f3rzoi3NH6jHuy5rq2v9XuvOpQ7LqSi1Ev0oq1xllZiyD4Zm69Z/Is0mxwqPskZGWR5Lh6Uq3Dh0zJW7O5M2m1IHdAYqffHpUr2NgEQVST4VDvO4fR2d7n6+ZNXYbZrpmQ1j4bpOZCEMqWXPfl4HY7a60hWa884mWxtVLGvhYycxnN8r1o5ouS0pAMAI6qEFFW1XFFN4eNDDWl83BkuDa32DTEthoyi15JM5jS7VPDYACdHE3IVqsTsZq7nn60uoFCGpdMcSqrD2mlUd9Z12x8NnCIrxKhlHLkq89OrQAcz8/0bbluGuzm3FHKb+8VQWr0MgkvOLTqqvOqn97oBdKqo0eyT0IPz8QeVYPbZfQ== | |
|
178 | 83377b4b4ae0e9a6b8e579f7b0a693b8cf5c3b10 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlxUk3gQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91aT7EACaycWeal53ShxaNyTNOa5IPZ71+iyWA9xEh7hK6cDDirpItarWLRVWoWqBlWRBBs6uU4BxnpPSCLFkJLu6ts/5p4R6/0Z04Pasd6sFi14bCGslmPJFlwrpfFDpQvFR6xZAtv1xGb8n+rjpK+wfstjRgyf84zn4//0dOdylY5EUXOk4/3zcXKAzPgZHBRper+PlQ0ICgYHiKQUlyDWrFrdSEis6OqBa+PbxdmgzLYbhXi0bvS5XRWM9EVJZa+5ITEVOEGPClRcoA7SJE5DiapMYlwNnB3U6TEazJoj5yuvGhrJzj9lx7/jx9tzZ/mhdOVsSRiSCBu46B/E63fnUDqaMw8KKlFKBRuzKnqnByZD8fuD34YJ6A82hta56W4SJ4pusa/X2nAJn1QbRjESY4wN4FEaNdYiMbpgbG2uBDhmEowAyhXtiuQAPCUra5o42a+E+tAgV5uNUAal8vk0DcPRmzc4UntQiQGwxL0fsTEpMQtG5ryxWRmOIBq6aKGuLVELllPCwOh8UIGLlpAoEynlNi9qJNT6kHpSmwquiU6TG6R1dA/ckBK2H90hewtb/jwLlenGugpylLQ2U/NsDdoWRyHNrdB4eUJiWD/BBPXktZQJVja97Js+Vn44ctCkNjui/53xcBQfIYdHGLttIEq56v/yZiSviCcTUhBPRSEdoUg== |
@@ -188,3 +188,4 b' a91a2837150bdcb27ae76b3646e6c93cd6a15904' | |||||
188 | 1c8c54cf97256f4468da2eb4dbee24f7f3888e71 4.8.1 |
|
188 | 1c8c54cf97256f4468da2eb4dbee24f7f3888e71 4.8.1 | |
189 | 197f092b2cd9691e2a55d198f717b231af9be6f9 4.8.2 |
|
189 | 197f092b2cd9691e2a55d198f717b231af9be6f9 4.8.2 | |
190 | 593718ff5844cad7a27ee3eb5adad89ac8550949 4.9rc0 |
|
190 | 593718ff5844cad7a27ee3eb5adad89ac8550949 4.9rc0 | |
|
191 | 83377b4b4ae0e9a6b8e579f7b0a693b8cf5c3b10 4.9 |
@@ -3,7 +3,7 b' Upstream-Name: mercurial' | |||||
3 | Source: https://www.mercurial-scm.org/ |
|
3 | Source: https://www.mercurial-scm.org/ | |
4 |
|
4 | |||
5 | Files: * |
|
5 | Files: * | |
6 |
Copyright: 2005-201 |
|
6 | Copyright: 2005-2019, Matt Mackall <mpm@selenic.com> and others. | |
7 | License: GPL-2+ |
|
7 | License: GPL-2+ | |
8 | This program is free software; you can redistribute it |
|
8 | This program is free software; you can redistribute it | |
9 | and/or modify it under the terms of the GNU General Public |
|
9 | and/or modify it under the terms of the GNU General Public |
@@ -140,7 +140,7 b' editor = whatever' | |||||
140 | </p> |
|
140 | </p> | |
141 |
|
141 | |||
142 | <p> |
|
142 | <p> | |
143 |
Mercurial is Copyright 2005-201 |
|
143 | Mercurial is Copyright 2005-2019 Matt Mackall and others. See | |
144 | the <tt>Contributors.txt</tt> file for a list of contributors. |
|
144 | the <tt>Contributors.txt</tt> file for a list of contributors. | |
145 | </p> |
|
145 | </p> | |
146 |
|
146 |
@@ -21,7 +21,7 b'' | |||||
21 | #endif |
|
21 | #endif | |
22 |
|
22 | |||
23 | [Setup] |
|
23 | [Setup] | |
24 |
AppCopyright=Copyright 2005-201 |
|
24 | AppCopyright=Copyright 2005-2019 Matt Mackall and others | |
25 | AppName=Mercurial |
|
25 | AppName=Mercurial | |
26 | AppVersion={#VERSION} |
|
26 | AppVersion={#VERSION} | |
27 | #if ARCH == "x64" |
|
27 | #if ARCH == "x64" | |
@@ -45,7 +45,7 b' AppContact=mercurial@mercurial-scm.org' | |||||
45 | DefaultDirName={pf}\Mercurial |
|
45 | DefaultDirName={pf}\Mercurial | |
46 | SourceDir=..\.. |
|
46 | SourceDir=..\.. | |
47 | VersionInfoDescription=Mercurial distributed SCM (version {#VERSION}) |
|
47 | VersionInfoDescription=Mercurial distributed SCM (version {#VERSION}) | |
48 |
VersionInfoCopyright=Copyright 2005-201 |
|
48 | VersionInfoCopyright=Copyright 2005-2019 Matt Mackall and others | |
49 | VersionInfoCompany=Matt Mackall and others |
|
49 | VersionInfoCompany=Matt Mackall and others | |
50 | InternalCompressLevel=max |
|
50 | InternalCompressLevel=max | |
51 | SolidCompression=true |
|
51 | SolidCompression=true |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
@@ -6173,7 +6173,7 b' def version_(ui, **opts):' | |||||
6173 | util.version()) |
|
6173 | util.version()) | |
6174 | license = _( |
|
6174 | license = _( | |
6175 | "(see https://mercurial-scm.org for more information)\n" |
|
6175 | "(see https://mercurial-scm.org for more information)\n" | |
6176 |
"\nCopyright (C) 2005-201 |
|
6176 | "\nCopyright (C) 2005-2019 Matt Mackall and others\n" | |
6177 | "This is free software; see the source for copying conditions. " |
|
6177 | "This is free software; see the source for copying conditions. " | |
6178 | "There is NO\nwarranty; " |
|
6178 | "There is NO\nwarranty; " | |
6179 | "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
|
6179 | "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
@@ -857,6 +857,16 b' https://www.mercurial-scm.org/wiki/Missi' | |||||
857 |
|
857 | |||
858 | Enabled by default. |
|
858 | Enabled by default. | |
859 |
|
859 | |||
|
860 | ``sparse-revlog`` | |||
|
861 | Enable or disable the ``sparse-revlog`` delta strategy. This format improves | |||
|
862 | delta re-use inside revlog. For very branchy repositories, it results in a | |||
|
863 | smaller store. For repositories with many revisions, it also helps | |||
|
864 | performance (by using shortened delta chains.) | |||
|
865 | ||||
|
866 | Repositories with this on-disk format require Mercurial version 4.7 | |||
|
867 | ||||
|
868 | Enabled by default. | |||
|
869 | ||||
860 | ``graph`` |
|
870 | ``graph`` | |
861 | --------- |
|
871 | --------- | |
862 |
|
872 |
@@ -112,7 +112,7 b' Mailing list: https://www.mercurial-scm.' | |||||
112 |
|
112 | |||
113 | Copying |
|
113 | Copying | |
114 | """"""" |
|
114 | """"""" | |
115 |
Copyright (C) 2005-201 |
|
115 | Copyright (C) 2005-2019 Matt Mackall. | |
116 | Free use of this software is granted under the terms of the GNU General |
|
116 | Free use of this software is granted under the terms of the GNU General | |
117 | Public License version 2 or any later version. |
|
117 | Public License version 2 or any later version. | |
118 |
|
118 |
@@ -26,7 +26,7 b' See Also' | |||||
26 | Copying |
|
26 | Copying | |
27 | ======= |
|
27 | ======= | |
28 | This manual page is copyright 2006 Vadim Gelfer. |
|
28 | This manual page is copyright 2006 Vadim Gelfer. | |
29 |
Mercurial is copyright 2005-201 |
|
29 | Mercurial is copyright 2005-2019 Matt Mackall. | |
30 | Free use of this software is granted under the terms of the GNU General |
|
30 | Free use of this software is granted under the terms of the GNU General | |
31 | Public License version 2 or any later version. |
|
31 | Public License version 2 or any later version. | |
32 |
|
32 |
@@ -34,7 +34,7 b' See Also' | |||||
34 | Copying |
|
34 | Copying | |
35 | ======= |
|
35 | ======= | |
36 | This manual page is copyright 2005 Bryan O'Sullivan. |
|
36 | This manual page is copyright 2005 Bryan O'Sullivan. | |
37 |
Mercurial is copyright 2005-201 |
|
37 | Mercurial is copyright 2005-2019 Matt Mackall. | |
38 | Free use of this software is granted under the terms of the GNU General |
|
38 | Free use of this software is granted under the terms of the GNU General | |
39 | Public License version 2 or any later version. |
|
39 | Public License version 2 or any later version. | |
40 |
|
40 |
@@ -2904,7 +2904,6 b' def newreporequirements(ui, createopts):' | |||||
2904 |
|
2904 | |||
2905 | if scmutil.gdinitconfig(ui): |
|
2905 | if scmutil.gdinitconfig(ui): | |
2906 | requirements.add('generaldelta') |
|
2906 | requirements.add('generaldelta') | |
2907 | # experimental config: format.sparse-revlog |
|
|||
2908 | if ui.configbool('format', 'sparse-revlog'): |
|
2907 | if ui.configbool('format', 'sparse-revlog'): | |
2909 | requirements.add(SPARSEREVLOG_REQUIREMENT) |
|
2908 | requirements.add(SPARSEREVLOG_REQUIREMENT) | |
2910 | if ui.configbool('experimental', 'treemanifest'): |
|
2909 | if ui.configbool('experimental', 'treemanifest'): |
@@ -497,6 +497,9 b' class revlog(object):' | |||||
497 | else: |
|
497 | else: | |
498 | raise error.RevlogError(_('unknown version (%d) in revlog %s') % |
|
498 | raise error.RevlogError(_('unknown version (%d) in revlog %s') % | |
499 | (fmt, self.indexfile)) |
|
499 | (fmt, self.indexfile)) | |
|
500 | # sparse-revlog can't be on without general-delta (issue6056) | |||
|
501 | if not self._generaldelta: | |||
|
502 | self._sparserevlog = False | |||
500 |
|
503 | |||
501 | self._storedeltachains = True |
|
504 | self._storedeltachains = True | |
502 |
|
505 |
@@ -755,7 +755,8 b' def _rawgroups(revlog, p1, p2, cachedelt' | |||||
755 | The group order aims at providing fast or small candidates first. |
|
755 | The group order aims at providing fast or small candidates first. | |
756 | """ |
|
756 | """ | |
757 | gdelta = revlog._generaldelta |
|
757 | gdelta = revlog._generaldelta | |
758 | sparse = revlog._sparserevlog |
|
758 | # gate sparse behind general-delta because of issue6056 | |
|
759 | sparse = gdelta and revlog._sparserevlog | |||
759 | curr = len(revlog) |
|
760 | curr = len(revlog) | |
760 | prev = curr - 1 |
|
761 | prev = curr - 1 | |
761 | deltachain = lambda rev: revlog._deltachain(rev)[0] |
|
762 | deltachain = lambda rev: revlog._deltachain(rev)[0] |
@@ -115,6 +115,10 b' def _sanitize(ui, vfs, ignore):' | |||||
115 | vfs.unlink(vfs.reljoin(dirname, f)) |
|
115 | vfs.unlink(vfs.reljoin(dirname, f)) | |
116 |
|
116 | |||
117 | def _auditsubrepopath(repo, path): |
|
117 | def _auditsubrepopath(repo, path): | |
|
118 | # sanity check for potentially unsafe paths such as '~' and '$FOO' | |||
|
119 | if path.startswith('~') or '$' in path or util.expandpath(path) != path: | |||
|
120 | raise error.Abort(_('subrepo path contains illegal component: %s') | |||
|
121 | % path) | |||
118 | # auditor doesn't check if the path itself is a symlink |
|
122 | # auditor doesn't check if the path itself is a symlink | |
119 | pathutil.pathauditor(repo.root)(path) |
|
123 | pathutil.pathauditor(repo.root)(path) | |
120 | if repo.wvfs.islink(path): |
|
124 | if repo.wvfs.islink(path): | |
@@ -403,7 +407,16 b' class hgsubrepo(abstractsubrepo):' | |||||
403 | r = ctx.repo() |
|
407 | r = ctx.repo() | |
404 | root = r.wjoin(path) |
|
408 | root = r.wjoin(path) | |
405 | create = allowcreate and not r.wvfs.exists('%s/.hg' % path) |
|
409 | create = allowcreate and not r.wvfs.exists('%s/.hg' % path) | |
|
410 | # repository constructor does expand variables in path, which is | |||
|
411 | # unsafe since subrepo path might come from untrusted source. | |||
|
412 | if os.path.realpath(util.expandpath(root)) != root: | |||
|
413 | raise error.Abort(_('subrepo path contains illegal component: %s') | |||
|
414 | % path) | |||
406 | self._repo = hg.repository(r.baseui, root, create=create) |
|
415 | self._repo = hg.repository(r.baseui, root, create=create) | |
|
416 | if self._repo.root != root: | |||
|
417 | raise error.ProgrammingError('failed to reject unsafe subrepo ' | |||
|
418 | 'path: %s (expanded to %s)' | |||
|
419 | % (root, self._repo.root)) | |||
407 |
|
420 | |||
408 | # Propagate the parent's --hidden option |
|
421 | # Propagate the parent's --hidden option | |
409 | if r is r.unfiltered(): |
|
422 | if r is r.unfiltered(): |
@@ -1134,7 +1134,7 b' if issetuptools:' | |||||
1134 | if py2exeloaded: |
|
1134 | if py2exeloaded: | |
1135 | extra['console'] = [ |
|
1135 | extra['console'] = [ | |
1136 | {'script':'hg', |
|
1136 | {'script':'hg', | |
1137 |
'copyright':'Copyright (C) 2005-201 |
|
1137 | 'copyright':'Copyright (C) 2005-2019 Matt Mackall and others', | |
1138 | 'product_version':version}] |
|
1138 | 'product_version':version}] | |
1139 | # sub command of 'build' because 'py2exe' does not handle sub_commands |
|
1139 | # sub command of 'build' because 'py2exe' does not handle sub_commands | |
1140 | build.sub_commands.insert(0, ('build_hgextindex', None)) |
|
1140 | build.sub_commands.insert(0, ('build_hgextindex', None)) |
This diff has been collapsed as it changes many lines, (530 lines changed) Show them Hide them | |||||
@@ -36,6 +36,372 b' on clone (and update):' | |||||
36 | abort: path 'sub/.hg' is inside nested repo 'sub' |
|
36 | abort: path 'sub/.hg' is inside nested repo 'sub' | |
37 | [255] |
|
37 | [255] | |
38 |
|
38 | |||
|
39 | Test absolute path | |||
|
40 | ------------------ | |||
|
41 | ||||
|
42 | on commit: | |||
|
43 | ||||
|
44 | $ hg init absolutepath | |||
|
45 | $ cd absolutepath | |||
|
46 | $ hg init sub | |||
|
47 | $ echo '/sub = sub' >> .hgsub | |||
|
48 | $ hg ci -qAm 'add subrepo "/sub"' | |||
|
49 | abort: path contains illegal component: /sub | |||
|
50 | [255] | |||
|
51 | ||||
|
52 | prepare tampered repo (including the commit above): | |||
|
53 | ||||
|
54 | $ hg import --bypass -qm 'add subrepo "/sub"' - <<'EOF' | |||
|
55 | > diff --git a/.hgsub b/.hgsub | |||
|
56 | > new file mode 100644 | |||
|
57 | > --- /dev/null | |||
|
58 | > +++ b/.hgsub | |||
|
59 | > @@ -0,0 +1,1 @@ | |||
|
60 | > +/sub = sub | |||
|
61 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
62 | > new file mode 100644 | |||
|
63 | > --- /dev/null | |||
|
64 | > +++ b/.hgsubstate | |||
|
65 | > @@ -0,0 +1,1 @@ | |||
|
66 | > +0000000000000000000000000000000000000000 /sub | |||
|
67 | > EOF | |||
|
68 | $ cd .. | |||
|
69 | ||||
|
70 | on clone (and update): | |||
|
71 | ||||
|
72 | $ hg clone -q absolutepath absolutepath2 | |||
|
73 | abort: path contains illegal component: /sub | |||
|
74 | [255] | |||
|
75 | ||||
|
76 | Test root path | |||
|
77 | -------------- | |||
|
78 | ||||
|
79 | on commit: | |||
|
80 | ||||
|
81 | $ hg init rootpath | |||
|
82 | $ cd rootpath | |||
|
83 | $ hg init sub | |||
|
84 | $ echo '/ = sub' >> .hgsub | |||
|
85 | $ hg ci -qAm 'add subrepo "/"' | |||
|
86 | abort: path ends in directory separator: / | |||
|
87 | [255] | |||
|
88 | ||||
|
89 | prepare tampered repo (including the commit above): | |||
|
90 | ||||
|
91 | $ hg import --bypass -qm 'add subrepo "/"' - <<'EOF' | |||
|
92 | > diff --git a/.hgsub b/.hgsub | |||
|
93 | > new file mode 100644 | |||
|
94 | > --- /dev/null | |||
|
95 | > +++ b/.hgsub | |||
|
96 | > @@ -0,0 +1,1 @@ | |||
|
97 | > +/ = sub | |||
|
98 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
99 | > new file mode 100644 | |||
|
100 | > --- /dev/null | |||
|
101 | > +++ b/.hgsubstate | |||
|
102 | > @@ -0,0 +1,1 @@ | |||
|
103 | > +0000000000000000000000000000000000000000 / | |||
|
104 | > EOF | |||
|
105 | $ cd .. | |||
|
106 | ||||
|
107 | on clone (and update): | |||
|
108 | ||||
|
109 | $ hg clone -q rootpath rootpath2 | |||
|
110 | abort: path ends in directory separator: / | |||
|
111 | [255] | |||
|
112 | ||||
|
113 | Test empty path | |||
|
114 | --------------- | |||
|
115 | ||||
|
116 | on commit: | |||
|
117 | ||||
|
118 | $ hg init emptypath | |||
|
119 | $ cd emptypath | |||
|
120 | $ hg init sub | |||
|
121 | $ echo '= sub' >> .hgsub | |||
|
122 | $ hg ci -qAm 'add subrepo ""' | |||
|
123 | hg: parse error at .hgsub:1: = sub | |||
|
124 | [255] | |||
|
125 | ||||
|
126 | prepare tampered repo (including the commit above): | |||
|
127 | ||||
|
128 | $ hg import --bypass -qm 'add subrepo ""' - <<'EOF' | |||
|
129 | > diff --git a/.hgsub b/.hgsub | |||
|
130 | > new file mode 100644 | |||
|
131 | > --- /dev/null | |||
|
132 | > +++ b/.hgsub | |||
|
133 | > @@ -0,0 +1,1 @@ | |||
|
134 | > += sub | |||
|
135 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
136 | > new file mode 100644 | |||
|
137 | > --- /dev/null | |||
|
138 | > +++ b/.hgsubstate | |||
|
139 | > @@ -0,0 +1,1 @@ | |||
|
140 | > +0000000000000000000000000000000000000000 | |||
|
141 | > EOF | |||
|
142 | $ cd .. | |||
|
143 | ||||
|
144 | on clone (and update): | |||
|
145 | ||||
|
146 | $ hg clone -q emptypath emptypath2 | |||
|
147 | hg: parse error at .hgsub:1: = sub | |||
|
148 | [255] | |||
|
149 | ||||
|
150 | Test current path | |||
|
151 | ----------------- | |||
|
152 | ||||
|
153 | on commit: | |||
|
154 | ||||
|
155 | $ hg init currentpath | |||
|
156 | $ cd currentpath | |||
|
157 | $ hg init sub | |||
|
158 | $ echo '. = sub' >> .hgsub | |||
|
159 | $ hg ci -qAm 'add subrepo "."' | |||
|
160 | abort: subrepo path contains illegal component: . | |||
|
161 | [255] | |||
|
162 | ||||
|
163 | prepare tampered repo (including the commit above): | |||
|
164 | ||||
|
165 | $ hg import --bypass -qm 'add subrepo "."' - <<'EOF' | |||
|
166 | > diff --git a/.hgsub b/.hgsub | |||
|
167 | > new file mode 100644 | |||
|
168 | > --- /dev/null | |||
|
169 | > +++ b/.hgsub | |||
|
170 | > @@ -0,0 +1,1 @@ | |||
|
171 | > +.= sub | |||
|
172 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
173 | > new file mode 100644 | |||
|
174 | > --- /dev/null | |||
|
175 | > +++ b/.hgsubstate | |||
|
176 | > @@ -0,0 +1,1 @@ | |||
|
177 | > +0000000000000000000000000000000000000000 . | |||
|
178 | > EOF | |||
|
179 | $ cd .. | |||
|
180 | ||||
|
181 | on clone (and update): | |||
|
182 | ||||
|
183 | $ hg clone -q currentpath currentpath2 | |||
|
184 | abort: subrepo path contains illegal component: . | |||
|
185 | [255] | |||
|
186 | ||||
|
187 | Test outer path | |||
|
188 | --------------- | |||
|
189 | ||||
|
190 | on commit: | |||
|
191 | ||||
|
192 | $ mkdir outerpath | |||
|
193 | $ cd outerpath | |||
|
194 | $ hg init main | |||
|
195 | $ cd main | |||
|
196 | $ hg init ../sub | |||
|
197 | $ echo '../sub = ../sub' >> .hgsub | |||
|
198 | $ hg ci -qAm 'add subrepo "../sub"' | |||
|
199 | abort: path contains illegal component: ../sub | |||
|
200 | [255] | |||
|
201 | ||||
|
202 | prepare tampered repo (including the commit above): | |||
|
203 | ||||
|
204 | $ hg import --bypass -qm 'add subrepo "../sub"' - <<'EOF' | |||
|
205 | > diff --git a/.hgsub b/.hgsub | |||
|
206 | > new file mode 100644 | |||
|
207 | > --- /dev/null | |||
|
208 | > +++ b/.hgsub | |||
|
209 | > @@ -0,0 +1,1 @@ | |||
|
210 | > +../sub = ../sub | |||
|
211 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
212 | > new file mode 100644 | |||
|
213 | > --- /dev/null | |||
|
214 | > +++ b/.hgsubstate | |||
|
215 | > @@ -0,0 +1,1 @@ | |||
|
216 | > +0000000000000000000000000000000000000000 ../sub | |||
|
217 | > EOF | |||
|
218 | $ cd .. | |||
|
219 | ||||
|
220 | on clone (and update): | |||
|
221 | ||||
|
222 | $ hg clone -q main main2 | |||
|
223 | abort: path contains illegal component: ../sub | |||
|
224 | [255] | |||
|
225 | $ cd .. | |||
|
226 | ||||
|
227 | Test variable expansion | |||
|
228 | ----------------------- | |||
|
229 | ||||
|
230 | Subrepository paths shouldn't be expanded, but we fail to handle them | |||
|
231 | properly. Any local repository paths are expanded. | |||
|
232 | ||||
|
233 | on commit: | |||
|
234 | ||||
|
235 | $ mkdir envvar | |||
|
236 | $ cd envvar | |||
|
237 | $ hg init main | |||
|
238 | $ cd main | |||
|
239 | $ hg init sub1 | |||
|
240 | $ cat <<'EOF' > sub1/hgrc | |||
|
241 | > [hooks] | |||
|
242 | > log = echo pwned | |||
|
243 | > EOF | |||
|
244 | $ hg -R sub1 ci -qAm 'add sub1 files' | |||
|
245 | $ hg -R sub1 log -r. -T '{node}\n' | |||
|
246 | 39eb4b4d3e096527668784893a9280578a8f38b8 | |||
|
247 | $ echo '$SUB = sub1' >> .hgsub | |||
|
248 | $ SUB=sub1 hg ci -qAm 'add subrepo "$SUB"' | |||
|
249 | abort: subrepo path contains illegal component: $SUB | |||
|
250 | [255] | |||
|
251 | ||||
|
252 | prepare tampered repo (including the changes above as two commits): | |||
|
253 | ||||
|
254 | $ hg import --bypass -qm 'add subrepo "$SUB"' - <<'EOF' | |||
|
255 | > diff --git a/.hgsub b/.hgsub | |||
|
256 | > new file mode 100644 | |||
|
257 | > --- /dev/null | |||
|
258 | > +++ b/.hgsub | |||
|
259 | > @@ -0,0 +1,1 @@ | |||
|
260 | > +$SUB = sub1 | |||
|
261 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
262 | > new file mode 100644 | |||
|
263 | > --- /dev/null | |||
|
264 | > +++ b/.hgsubstate | |||
|
265 | > @@ -0,0 +1,1 @@ | |||
|
266 | > +0000000000000000000000000000000000000000 $SUB | |||
|
267 | > EOF | |||
|
268 | $ hg debugsetparents 0 | |||
|
269 | $ hg import --bypass -qm 'update subrepo "$SUB"' - <<'EOF' | |||
|
270 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
271 | > --- a/.hgsubstate | |||
|
272 | > +++ b/.hgsubstate | |||
|
273 | > @@ -1,1 +1,1 @@ | |||
|
274 | > -0000000000000000000000000000000000000000 $SUB | |||
|
275 | > +39eb4b4d3e096527668784893a9280578a8f38b8 $SUB | |||
|
276 | > EOF | |||
|
277 | $ cd .. | |||
|
278 | ||||
|
279 | on clone (and update) with various substitutions: | |||
|
280 | ||||
|
281 | $ hg clone -q main main2 | |||
|
282 | abort: subrepo path contains illegal component: $SUB | |||
|
283 | [255] | |||
|
284 | $ ls main2 | |||
|
285 | ||||
|
286 | $ SUB=sub1 hg clone -q main main3 | |||
|
287 | abort: subrepo path contains illegal component: $SUB | |||
|
288 | [255] | |||
|
289 | $ ls main3 | |||
|
290 | ||||
|
291 | $ SUB=sub2 hg clone -q main main4 | |||
|
292 | abort: subrepo path contains illegal component: $SUB | |||
|
293 | [255] | |||
|
294 | $ ls main4 | |||
|
295 | ||||
|
296 | on clone empty subrepo into .hg, then pull (and update), which at least fails: | |||
|
297 | ||||
|
298 | $ SUB=.hg hg clone -qr0 main main5 | |||
|
299 | abort: subrepo path contains illegal component: $SUB | |||
|
300 | [255] | |||
|
301 | $ ls main5 | |||
|
302 | $ test -d main5/.hg/.hg | |||
|
303 | [1] | |||
|
304 | $ SUB=.hg hg -R main5 pull -u | |||
|
305 | pulling from $TESTTMP/envvar/main | |||
|
306 | searching for changes | |||
|
307 | adding changesets | |||
|
308 | adding manifests | |||
|
309 | adding file changes | |||
|
310 | added 1 changesets with 1 changes to 1 files | |||
|
311 | new changesets 7a2f0e59146f | |||
|
312 | .hgsubstate: untracked file differs | |||
|
313 | abort: untracked files in working directory differ from files in requested revision | |||
|
314 | [255] | |||
|
315 | $ cat main5/.hg/hgrc | grep pwned | |||
|
316 | [1] | |||
|
317 | ||||
|
318 | on clone (and update) into .hg, which at least fails: | |||
|
319 | ||||
|
320 | $ SUB=.hg hg clone -q main main6 | |||
|
321 | abort: subrepo path contains illegal component: $SUB | |||
|
322 | [255] | |||
|
323 | $ ls main6 | |||
|
324 | $ cat main6/.hg/hgrc | grep pwned | |||
|
325 | [1] | |||
|
326 | ||||
|
327 | on clone (and update) into .hg/* subdir: | |||
|
328 | ||||
|
329 | $ SUB=.hg/foo hg clone -q main main7 | |||
|
330 | abort: subrepo path contains illegal component: $SUB | |||
|
331 | [255] | |||
|
332 | $ ls main7 | |||
|
333 | $ test -d main7/.hg/.hg | |||
|
334 | [1] | |||
|
335 | ||||
|
336 | on clone (and update) into outer tree: | |||
|
337 | ||||
|
338 | $ SUB=../out-of-tree-write hg clone -q main main8 | |||
|
339 | abort: subrepo path contains illegal component: $SUB | |||
|
340 | [255] | |||
|
341 | $ ls main8 | |||
|
342 | ||||
|
343 | on clone (and update) into e.g. $HOME, which doesn't work since subrepo paths | |||
|
344 | are concatenated prior to variable expansion: | |||
|
345 | ||||
|
346 | $ SUB="$TESTTMP/envvar/fakehome" hg clone -q main main9 | |||
|
347 | abort: subrepo path contains illegal component: $SUB | |||
|
348 | [255] | |||
|
349 | $ ls main9 | wc -l | |||
|
350 | \s*0 (re) | |||
|
351 | ||||
|
352 | $ ls | |||
|
353 | main | |||
|
354 | main2 | |||
|
355 | main3 | |||
|
356 | main4 | |||
|
357 | main5 | |||
|
358 | main6 | |||
|
359 | main7 | |||
|
360 | main8 | |||
|
361 | main9 | |||
|
362 | $ cd .. | |||
|
363 | ||||
|
364 | Test tilde | |||
|
365 | ---------- | |||
|
366 | ||||
|
367 | The leading tilde may be expanded to $HOME, but it can be a valid subrepo | |||
|
368 | path in theory. However, we want to prohibit it as there might be unsafe | |||
|
369 | handling of such paths. | |||
|
370 | ||||
|
371 | on commit: | |||
|
372 | ||||
|
373 | $ hg init tilde | |||
|
374 | $ cd tilde | |||
|
375 | $ hg init './~' | |||
|
376 | $ echo '~ = ~' >> .hgsub | |||
|
377 | $ hg ci -qAm 'add subrepo "~"' | |||
|
378 | abort: subrepo path contains illegal component: ~ | |||
|
379 | [255] | |||
|
380 | ||||
|
381 | prepare tampered repo (including the commit above): | |||
|
382 | ||||
|
383 | $ hg import --bypass -qm 'add subrepo "~"' - <<'EOF' | |||
|
384 | > diff --git a/.hgsub b/.hgsub | |||
|
385 | > new file mode 100644 | |||
|
386 | > --- /dev/null | |||
|
387 | > +++ b/.hgsub | |||
|
388 | > @@ -0,0 +1,1 @@ | |||
|
389 | > +~ = ~ | |||
|
390 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
391 | > new file mode 100644 | |||
|
392 | > --- /dev/null | |||
|
393 | > +++ b/.hgsubstate | |||
|
394 | > @@ -0,0 +1,1 @@ | |||
|
395 | > +0000000000000000000000000000000000000000 ~ | |||
|
396 | > EOF | |||
|
397 | $ cd .. | |||
|
398 | ||||
|
399 | on clone (and update): | |||
|
400 | ||||
|
401 | $ hg clone -q tilde tilde2 | |||
|
402 | abort: subrepo path contains illegal component: ~ | |||
|
403 | [255] | |||
|
404 | ||||
39 | Test direct symlink traversal |
|
405 | Test direct symlink traversal | |
40 | ----------------------------- |
|
406 | ----------------------------- | |
41 |
|
407 | |||
@@ -130,3 +496,167 b' on clone (and update):' | |||||
130 | root |
|
496 | root | |
131 |
|
497 | |||
132 | #endif |
|
498 | #endif | |
|
499 | ||||
|
500 | Test symlink traversal by variable expansion | |||
|
501 | -------------------------------------------- | |||
|
502 | ||||
|
503 | #if symlink | |||
|
504 | ||||
|
505 | $ FAKEHOME="$TESTTMP/envvarsym/fakehome" | |||
|
506 | ||||
|
507 | on commit: | |||
|
508 | ||||
|
509 | $ mkdir envvarsym | |||
|
510 | $ cd envvarsym | |||
|
511 | $ hg init main | |||
|
512 | $ cd main | |||
|
513 | $ ln -s "`echo "$FAKEHOME" | sed 's|\(.\)/.*|\1|'`" | |||
|
514 | $ hg ci -qAm 'add symlink to top-level system directory' | |||
|
515 | ||||
|
516 | $ hg init sub1 | |||
|
517 | $ echo pwned > sub1/pwned | |||
|
518 | $ hg -R sub1 ci -qAm 'add sub1 files' | |||
|
519 | $ hg -R sub1 log -r. -T '{node}\n' | |||
|
520 | f40c9134ba1b6961e12f250868823f0092fb68a8 | |||
|
521 | $ echo '$SUB = sub1' >> .hgsub | |||
|
522 | $ SUB="$FAKEHOME" hg ci -qAm 'add subrepo "$SUB"' | |||
|
523 | abort: subrepo path contains illegal component: $SUB | |||
|
524 | [255] | |||
|
525 | ||||
|
526 | prepare tampered repo (including the changes above as two commits): | |||
|
527 | ||||
|
528 | $ hg import --bypass -qm 'add subrepo "$SUB"' - <<'EOF' | |||
|
529 | > diff --git a/.hgsub b/.hgsub | |||
|
530 | > new file mode 100644 | |||
|
531 | > --- /dev/null | |||
|
532 | > +++ b/.hgsub | |||
|
533 | > @@ -0,0 +1,1 @@ | |||
|
534 | > +$SUB = sub1 | |||
|
535 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
536 | > new file mode 100644 | |||
|
537 | > --- /dev/null | |||
|
538 | > +++ b/.hgsubstate | |||
|
539 | > @@ -0,0 +1,1 @@ | |||
|
540 | > +0000000000000000000000000000000000000000 $SUB | |||
|
541 | > EOF | |||
|
542 | $ hg debugsetparents 1 | |||
|
543 | $ hg import --bypass -qm 'update subrepo "$SUB"' - <<'EOF' | |||
|
544 | > diff --git a/.hgsubstate b/.hgsubstate | |||
|
545 | > --- a/.hgsubstate | |||
|
546 | > +++ b/.hgsubstate | |||
|
547 | > @@ -1,1 +1,1 @@ | |||
|
548 | > -0000000000000000000000000000000000000000 $SUB | |||
|
549 | > +f40c9134ba1b6961e12f250868823f0092fb68a8 $SUB | |||
|
550 | > EOF | |||
|
551 | $ cd .. | |||
|
552 | ||||
|
553 | on clone (and update) without fakehome directory: | |||
|
554 | ||||
|
555 | $ rm -fR "$FAKEHOME" | |||
|
556 | $ SUB="$FAKEHOME" hg clone -q main main2 | |||
|
557 | abort: subrepo path contains illegal component: $SUB | |||
|
558 | [255] | |||
|
559 | $ test -d "$FAKEHOME" | |||
|
560 | [1] | |||
|
561 | ||||
|
562 | on clone (and update) with empty fakehome directory: | |||
|
563 | ||||
|
564 | $ rm -fR "$FAKEHOME" | |||
|
565 | $ mkdir "$FAKEHOME" | |||
|
566 | $ SUB="$FAKEHOME" hg clone -q main main3 | |||
|
567 | abort: subrepo path contains illegal component: $SUB | |||
|
568 | [255] | |||
|
569 | $ ls "$FAKEHOME" | |||
|
570 | ||||
|
571 | on clone (and update) with non-empty fakehome directory: | |||
|
572 | ||||
|
573 | $ rm -fR "$FAKEHOME" | |||
|
574 | $ mkdir "$FAKEHOME" | |||
|
575 | $ touch "$FAKEHOME/a" | |||
|
576 | $ SUB="$FAKEHOME" hg clone -q main main4 | |||
|
577 | abort: subrepo path contains illegal component: $SUB | |||
|
578 | [255] | |||
|
579 | $ ls "$FAKEHOME" | |||
|
580 | a | |||
|
581 | ||||
|
582 | on clone empty subrepo with non-empty fakehome directory, | |||
|
583 | then pull (and update): | |||
|
584 | ||||
|
585 | $ rm -fR "$FAKEHOME" | |||
|
586 | $ mkdir "$FAKEHOME" | |||
|
587 | $ touch "$FAKEHOME/a" | |||
|
588 | $ SUB="$FAKEHOME" hg clone -qr1 main main5 | |||
|
589 | abort: subrepo path contains illegal component: $SUB | |||
|
590 | [255] | |||
|
591 | $ ls "$FAKEHOME" | |||
|
592 | a | |||
|
593 | $ test -d "$FAKEHOME/.hg" | |||
|
594 | [1] | |||
|
595 | $ SUB="$FAKEHOME" hg -R main5 pull -u | |||
|
596 | pulling from $TESTTMP/envvarsym/main | |||
|
597 | searching for changes | |||
|
598 | adding changesets | |||
|
599 | adding manifests | |||
|
600 | adding file changes | |||
|
601 | added 1 changesets with 1 changes to 1 files | |||
|
602 | new changesets * (glob) | |||
|
603 | .hgsubstate: untracked file differs | |||
|
604 | abort: untracked files in working directory differ from files in requested revision | |||
|
605 | [255] | |||
|
606 | $ ls "$FAKEHOME" | |||
|
607 | a | |||
|
608 | $ test -d "$FAKEHOME/.hg" | |||
|
609 | [1] | |||
|
610 | ||||
|
611 | on clone empty subrepo with hg-managed fakehome directory, | |||
|
612 | then pull (and update): | |||
|
613 | ||||
|
614 | $ rm -fR "$FAKEHOME" | |||
|
615 | $ hg init "$FAKEHOME" | |||
|
616 | $ touch "$FAKEHOME/a" | |||
|
617 | $ hg -R "$FAKEHOME" ci -qAm 'add fakehome file' | |||
|
618 | $ SUB="$FAKEHOME" hg clone -qr1 main main6 | |||
|
619 | abort: subrepo path contains illegal component: $SUB | |||
|
620 | [255] | |||
|
621 | $ ls "$FAKEHOME" | |||
|
622 | a | |||
|
623 | $ SUB="$FAKEHOME" hg -R main6 pull -u | |||
|
624 | pulling from $TESTTMP/envvarsym/main | |||
|
625 | searching for changes | |||
|
626 | adding changesets | |||
|
627 | adding manifests | |||
|
628 | adding file changes | |||
|
629 | added 1 changesets with 1 changes to 1 files | |||
|
630 | new changesets * (glob) | |||
|
631 | .hgsubstate: untracked file differs | |||
|
632 | abort: untracked files in working directory differ from files in requested revision | |||
|
633 | [255] | |||
|
634 | $ ls "$FAKEHOME" | |||
|
635 | a | |||
|
636 | ||||
|
637 | on clone only symlink with hg-managed fakehome directory, | |||
|
638 | then pull (and update): | |||
|
639 | ||||
|
640 | $ rm -fR "$FAKEHOME" | |||
|
641 | $ hg init "$FAKEHOME" | |||
|
642 | $ touch "$FAKEHOME/a" | |||
|
643 | $ hg -R "$FAKEHOME" ci -qAm 'add fakehome file' | |||
|
644 | $ SUB="$FAKEHOME" hg clone -qr0 main main7 | |||
|
645 | $ ls "$FAKEHOME" | |||
|
646 | a | |||
|
647 | $ SUB="$FAKEHOME" hg -R main7 pull -uf | |||
|
648 | pulling from $TESTTMP/envvarsym/main | |||
|
649 | searching for changes | |||
|
650 | adding changesets | |||
|
651 | adding manifests | |||
|
652 | adding file changes | |||
|
653 | added 2 changesets with 3 changes to 2 files | |||
|
654 | new changesets * (glob) | |||
|
655 | abort: subrepo path contains illegal component: $SUB | |||
|
656 | [255] | |||
|
657 | $ ls "$FAKEHOME" | |||
|
658 | a | |||
|
659 | ||||
|
660 | $ cd .. | |||
|
661 | ||||
|
662 | #endif |
@@ -1504,6 +1504,8 b' Separate sections from subsections' | |||||
1504 |
|
1504 | |||
1505 | "usestore" |
|
1505 | "usestore" | |
1506 |
|
1506 | |||
|
1507 | "sparse-revlog" | |||
|
1508 | ||||
1507 | "profiling" |
|
1509 | "profiling" | |
1508 | ----------- |
|
1510 | ----------- | |
1509 |
|
1511 |
@@ -268,3 +268,25 b' clone bookmarks' | |||||
268 | exporting bookmark test |
|
268 | exporting bookmark test | |
269 | $ hg -R remote-bookmarks bookmarks |
|
269 | $ hg -R remote-bookmarks bookmarks | |
270 | test 0:08b9e9f63b32 |
|
270 | test 0:08b9e9f63b32 | |
|
271 | ||||
|
272 | Check format constraint | |||
|
273 | ----------------------- | |||
|
274 | ||||
|
275 | $ hg init issue6056 --config format.usegeneraldelta=0 --config format.sparse-revlog=0 | |||
|
276 | $ cd issue6056 | |||
|
277 | $ echo foo > 1 | |||
|
278 | $ echo foo > 2 | |||
|
279 | $ echo foo > 3 | |||
|
280 | $ echo foo > 4 | |||
|
281 | $ echo foo > 5 | |||
|
282 | $ hg add * | |||
|
283 | ||||
|
284 | Build a bogus repository (sparserevlog without general delta) | |||
|
285 | ||||
|
286 | $ hg commit -m 'initial changesets' | |||
|
287 | $ echo 'sparserevlog' >> .hg/requires | |||
|
288 | $ for x in `$TESTDIR/seq.py 100`; do | |||
|
289 | > echo $x >> `expr $x % 5 + 1` | |||
|
290 | > hg commit -m $x | |||
|
291 | > done | |||
|
292 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now