##// END OF EJS Templates
branching: merge with stable
Martin von Zweigbergk -
r50075:c577d394 merge default
parent child Browse files
Show More
@@ -0,0 +1,22 b''
1 $ cat >> $HGRCPATH <<EOF
2 > [censor]
3 > policy=ignore
4 > EOF
5
6 $ mkdir r
7 $ cd r
8 $ hg init
9 $ echo secret > target
10 $ hg commit -Am "secret"
11 adding target
12 $ touch bystander
13 $ hg commit -Am "innocent"
14 adding bystander
15 $ echo erased-secret > target
16 $ hg commit -m "erased secret"
17 $ hg censor target --config extensions.censor= -r ".^^"
18 $ hg update ".^"
19 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 $ cat target
21 $ hg update tip
22 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -1,228 +1,229 b''
1 35fb62a3a673d5322f6274a44ba6456e5e4b3b37 0 iD8DBQBEYmO2ywK+sNU5EO8RAnaYAKCO7x15xUn5mnhqWNXqk/ehlhRt2QCfRDfY0LrUq2q4oK/KypuJYPHgq1A=
1 35fb62a3a673d5322f6274a44ba6456e5e4b3b37 0 iD8DBQBEYmO2ywK+sNU5EO8RAnaYAKCO7x15xUn5mnhqWNXqk/ehlhRt2QCfRDfY0LrUq2q4oK/KypuJYPHgq1A=
2 2be3001847cb18a23c403439d9e7d0ace30804e9 0 iD8DBQBExUbjywK+sNU5EO8RAhzxAKCtyHAQUzcTSZTqlfJ0by6vhREwWQCghaQFHfkfN0l9/40EowNhuMOKnJk=
2 2be3001847cb18a23c403439d9e7d0ace30804e9 0 iD8DBQBExUbjywK+sNU5EO8RAhzxAKCtyHAQUzcTSZTqlfJ0by6vhREwWQCghaQFHfkfN0l9/40EowNhuMOKnJk=
3 36a957364b1b89c150f2d0e60a99befe0ee08bd3 0 iD8DBQBFfL2QywK+sNU5EO8RAjYFAKCoGlaWRTeMsjdmxAjUYx6diZxOBwCfY6IpBYsKvPTwB3oktnPt5Rmrlys=
3 36a957364b1b89c150f2d0e60a99befe0ee08bd3 0 iD8DBQBFfL2QywK+sNU5EO8RAjYFAKCoGlaWRTeMsjdmxAjUYx6diZxOBwCfY6IpBYsKvPTwB3oktnPt5Rmrlys=
4 27230c29bfec36d5540fbe1c976810aefecfd1d2 0 iD8DBQBFheweywK+sNU5EO8RAt7VAKCrqJQWT2/uo2RWf0ZI4bLp6v82jACgjrMdsaTbxRsypcmEsdPhlG6/8F4=
4 27230c29bfec36d5540fbe1c976810aefecfd1d2 0 iD8DBQBFheweywK+sNU5EO8RAt7VAKCrqJQWT2/uo2RWf0ZI4bLp6v82jACgjrMdsaTbxRsypcmEsdPhlG6/8F4=
5 fb4b6d5fe100b0886f8bc3d6731ec0e5ed5c4694 0 iD8DBQBGgHicywK+sNU5EO8RAgNxAJ0VG8ixAaeudx4sZbhngI1syu49HQCeNUJQfWBgA8bkJ2pvsFpNxwYaX3I=
5 fb4b6d5fe100b0886f8bc3d6731ec0e5ed5c4694 0 iD8DBQBGgHicywK+sNU5EO8RAgNxAJ0VG8ixAaeudx4sZbhngI1syu49HQCeNUJQfWBgA8bkJ2pvsFpNxwYaX3I=
6 23889160905a1b09fffe1c07378e9fc1827606eb 0 iD8DBQBHGTzoywK+sNU5EO8RAr/UAJ0Y8s4jQtzgS+G9vM8z6CWBThZ8fwCcCT5XDj2XwxKkz/0s6UELwjsO3LU=
6 23889160905a1b09fffe1c07378e9fc1827606eb 0 iD8DBQBHGTzoywK+sNU5EO8RAr/UAJ0Y8s4jQtzgS+G9vM8z6CWBThZ8fwCcCT5XDj2XwxKkz/0s6UELwjsO3LU=
7 bae2e9c838e90a393bae3973a7850280413e091a 0 iD8DBQBH6DO5ywK+sNU5EO8RAsfrAJ0e4r9c9GF/MJsM7Xjd3NesLRC3+ACffj6+6HXdZf8cswAoFPO+DY00oD0=
7 bae2e9c838e90a393bae3973a7850280413e091a 0 iD8DBQBH6DO5ywK+sNU5EO8RAsfrAJ0e4r9c9GF/MJsM7Xjd3NesLRC3+ACffj6+6HXdZf8cswAoFPO+DY00oD0=
8 d5cbbe2c49cee22a9fbeb9ea41daa0ac4e26b846 0 iD8DBQBINdwsywK+sNU5EO8RAjIUAKCPmlFJSpsPAAUKF+iNHAwVnwmzeQCdEXrL27CWclXuUKdbQC8De7LICtE=
8 d5cbbe2c49cee22a9fbeb9ea41daa0ac4e26b846 0 iD8DBQBINdwsywK+sNU5EO8RAjIUAKCPmlFJSpsPAAUKF+iNHAwVnwmzeQCdEXrL27CWclXuUKdbQC8De7LICtE=
9 d2375bbee6d47e62ba8e415c86e83a465dc4dce9 0 iD8DBQBIo1wpywK+sNU5EO8RAmRNAJ94x3OFt6blbqu/yBoypm/AJ44fuACfUaldXcV5z9tht97hSp22DVTEPGc=
9 d2375bbee6d47e62ba8e415c86e83a465dc4dce9 0 iD8DBQBIo1wpywK+sNU5EO8RAmRNAJ94x3OFt6blbqu/yBoypm/AJ44fuACfUaldXcV5z9tht97hSp22DVTEPGc=
10 2a67430f92f15ea5159c26b09ec4839a0c549a26 0 iEYEABECAAYFAkk1hykACgkQywK+sNU5EO85QACeNJNUanjc2tl4wUoPHNuv+lSj0ZMAoIm93wSTc/feyYnO2YCaQ1iyd9Nu
10 2a67430f92f15ea5159c26b09ec4839a0c549a26 0 iEYEABECAAYFAkk1hykACgkQywK+sNU5EO85QACeNJNUanjc2tl4wUoPHNuv+lSj0ZMAoIm93wSTc/feyYnO2YCaQ1iyd9Nu
11 3773e510d433969e277b1863c317b674cbee2065 0 iEYEABECAAYFAklNbbAACgkQywK+sNU5EO8o+gCfeb2/lfIJZMvyDA1m+G1CsBAxfFsAoIa6iAMG8SBY7hW1Q85Yf/LXEvaE
11 3773e510d433969e277b1863c317b674cbee2065 0 iEYEABECAAYFAklNbbAACgkQywK+sNU5EO8o+gCfeb2/lfIJZMvyDA1m+G1CsBAxfFsAoIa6iAMG8SBY7hW1Q85Yf/LXEvaE
12 11a4eb81fb4f4742451591489e2797dc47903277 0 iEYEABECAAYFAklcAnsACgkQywK+sNU5EO+uXwCbBVHNNsLy1g7BlAyQJwadYVyHOXoAoKvtAVO71+bv7EbVoukwTzT+P4Sx
12 11a4eb81fb4f4742451591489e2797dc47903277 0 iEYEABECAAYFAklcAnsACgkQywK+sNU5EO+uXwCbBVHNNsLy1g7BlAyQJwadYVyHOXoAoKvtAVO71+bv7EbVoukwTzT+P4Sx
13 11efa41037e280d08cfb07c09ad485df30fb0ea8 0 iEYEABECAAYFAkmvJRQACgkQywK+sNU5EO9XZwCeLMgDgPSMWMm6vgjL4lDs2pEc5+0AnRxfiFbpbBfuEFTqKz9nbzeyoBlx
13 11efa41037e280d08cfb07c09ad485df30fb0ea8 0 iEYEABECAAYFAkmvJRQACgkQywK+sNU5EO9XZwCeLMgDgPSMWMm6vgjL4lDs2pEc5+0AnRxfiFbpbBfuEFTqKz9nbzeyoBlx
14 02981000012e3adf40c4849bd7b3d5618f9ce82d 0 iEYEABECAAYFAknEH3wACgkQywK+sNU5EO+uXwCeI+LbLMmhjU1lKSfU3UWJHjjUC7oAoIZLvYDGOL/tNZFUuatc3RnZ2eje
14 02981000012e3adf40c4849bd7b3d5618f9ce82d 0 iEYEABECAAYFAknEH3wACgkQywK+sNU5EO+uXwCeI+LbLMmhjU1lKSfU3UWJHjjUC7oAoIZLvYDGOL/tNZFUuatc3RnZ2eje
15 196d40e7c885fa6e95f89134809b3ec7bdbca34b 0 iEYEABECAAYFAkpL2X4ACgkQywK+sNU5EO9FOwCfXJycjyKJXsvQqKkHrglwOQhEKS4An36GfKzptfN8b1qNc3+ya/5c2WOM
15 196d40e7c885fa6e95f89134809b3ec7bdbca34b 0 iEYEABECAAYFAkpL2X4ACgkQywK+sNU5EO9FOwCfXJycjyKJXsvQqKkHrglwOQhEKS4An36GfKzptfN8b1qNc3+ya/5c2WOM
16 3ef6c14a1e8e83a31226f5881b7fe6095bbfa6f6 0 iEYEABECAAYFAkpopLIACgkQywK+sNU5EO8QSgCfZ0ztsd071rOa2lhmp9Fyue/WoI0AoLTei80/xrhRlB8L/rZEf2KBl8dA
16 3ef6c14a1e8e83a31226f5881b7fe6095bbfa6f6 0 iEYEABECAAYFAkpopLIACgkQywK+sNU5EO8QSgCfZ0ztsd071rOa2lhmp9Fyue/WoI0AoLTei80/xrhRlB8L/rZEf2KBl8dA
17 31ec469f9b556f11819937cf68ee53f2be927ebf 0 iEYEABECAAYFAksBuxAACgkQywK+sNU5EO+mBwCfagB+A0txzWZ6dRpug3LEoK7Z1QsAoKpbk8vsLjv6/oRDicSk/qBu33+m
17 31ec469f9b556f11819937cf68ee53f2be927ebf 0 iEYEABECAAYFAksBuxAACgkQywK+sNU5EO+mBwCfagB+A0txzWZ6dRpug3LEoK7Z1QsAoKpbk8vsLjv6/oRDicSk/qBu33+m
18 439d7ea6fe3aa4ab9ec274a68846779153789de9 0 iEYEABECAAYFAksVw0kACgkQywK+sNU5EO/oZwCfdfBEkgp38xq6wN2F4nj+SzofrJIAnjmxt04vaJSeOOeHylHvk6lzuQsw
18 439d7ea6fe3aa4ab9ec274a68846779153789de9 0 iEYEABECAAYFAksVw0kACgkQywK+sNU5EO/oZwCfdfBEkgp38xq6wN2F4nj+SzofrJIAnjmxt04vaJSeOOeHylHvk6lzuQsw
19 296a0b14a68621f6990c54fdba0083f6f20935bf 0 iEYEABECAAYFAks+jCoACgkQywK+sNU5EO9J8wCeMUGF9E/gS2UBsqIz56WS4HMPRPUAoI5J95mwEIK8Clrl7qFRidNI6APq
19 296a0b14a68621f6990c54fdba0083f6f20935bf 0 iEYEABECAAYFAks+jCoACgkQywK+sNU5EO9J8wCeMUGF9E/gS2UBsqIz56WS4HMPRPUAoI5J95mwEIK8Clrl7qFRidNI6APq
20 4aa619c4c2c09907034d9824ebb1dd0e878206eb 0 iEYEABECAAYFAktm9IsACgkQywK+sNU5EO9XGgCgk4HclRQhexEtooPE5GcUCdB6M8EAn2ptOhMVbIoO+JncA+tNACPFXh0O
20 4aa619c4c2c09907034d9824ebb1dd0e878206eb 0 iEYEABECAAYFAktm9IsACgkQywK+sNU5EO9XGgCgk4HclRQhexEtooPE5GcUCdB6M8EAn2ptOhMVbIoO+JncA+tNACPFXh0O
21 ff2704a8ded37fbebd8b6eb5ec733731d725da8a 0 iEYEABECAAYFAkuRoSQACgkQywK+sNU5EO//3QCeJDc5r2uFyFCtAlpSA27DEE5rrxAAn2FSwTy9fhrB3QAdDQlwkEZcQzDh
21 ff2704a8ded37fbebd8b6eb5ec733731d725da8a 0 iEYEABECAAYFAkuRoSQACgkQywK+sNU5EO//3QCeJDc5r2uFyFCtAlpSA27DEE5rrxAAn2FSwTy9fhrB3QAdDQlwkEZcQzDh
22 2b01dab594167bc0dd33331dbaa6dca3dca1b3aa 0 iEYEABECAAYFAku1IwIACgkQywK+sNU5EO9MjgCdHLVwkTZlNHxhcznZKBL1rjN+J7cAoLLWi9LTL6f/TgBaPSKOy1ublbaW
22 2b01dab594167bc0dd33331dbaa6dca3dca1b3aa 0 iEYEABECAAYFAku1IwIACgkQywK+sNU5EO9MjgCdHLVwkTZlNHxhcznZKBL1rjN+J7cAoLLWi9LTL6f/TgBaPSKOy1ublbaW
23 39f725929f0c48c5fb3b90c071fc3066012456ca 0 iEYEABECAAYFAkvclvsACgkQywK+sNU5EO9FSwCeL9i5x8ALW/LE5+lCX6MFEAe4MhwAn1ev5o6SX6GrNdDfKweiemfO2VBk
23 39f725929f0c48c5fb3b90c071fc3066012456ca 0 iEYEABECAAYFAkvclvsACgkQywK+sNU5EO9FSwCeL9i5x8ALW/LE5+lCX6MFEAe4MhwAn1ev5o6SX6GrNdDfKweiemfO2VBk
24 fdcf80f26604f233dc4d8f0a5ef9d7470e317e8a 0 iEYEABECAAYFAkvsKTkACgkQywK+sNU5EO9qEACgiSiRGvTG2vXGJ65tUSOIYihTuFAAnRzRIqEVSw8M8/RGeUXRps0IzaCO
24 fdcf80f26604f233dc4d8f0a5ef9d7470e317e8a 0 iEYEABECAAYFAkvsKTkACgkQywK+sNU5EO9qEACgiSiRGvTG2vXGJ65tUSOIYihTuFAAnRzRIqEVSw8M8/RGeUXRps0IzaCO
25 24fe2629c6fd0c74c90bd066e77387c2b02e8437 0 iEYEABECAAYFAkwFLRsACgkQywK+sNU5EO+pJACgp13tPI+pbwKZV+LeMjcQ4H6tCZYAoJebzhd6a8yYx6qiwpJxA9BXZNXy
25 24fe2629c6fd0c74c90bd066e77387c2b02e8437 0 iEYEABECAAYFAkwFLRsACgkQywK+sNU5EO+pJACgp13tPI+pbwKZV+LeMjcQ4H6tCZYAoJebzhd6a8yYx6qiwpJxA9BXZNXy
26 f786fc4b8764cd2a5526d259cf2f94d8a66924d9 0 iEYEABECAAYFAkwsyxcACgkQywK+sNU5EO+crACfUpNAF57PmClkSri9nJcBjb2goN4AniPCNaKvnki7TnUsi1u2oxltpKKL
26 f786fc4b8764cd2a5526d259cf2f94d8a66924d9 0 iEYEABECAAYFAkwsyxcACgkQywK+sNU5EO+crACfUpNAF57PmClkSri9nJcBjb2goN4AniPCNaKvnki7TnUsi1u2oxltpKKL
27 bf1774d95bde614af3956d92b20e2a0c68c5fec7 0 iEYEABECAAYFAkxVwccACgkQywK+sNU5EO+oFQCeJzwZ+we1fIIyBGCddHceOUAN++cAnjvT6A8ZWW0zV21NXIFF1qQmjxJd
27 bf1774d95bde614af3956d92b20e2a0c68c5fec7 0 iEYEABECAAYFAkxVwccACgkQywK+sNU5EO+oFQCeJzwZ+we1fIIyBGCddHceOUAN++cAnjvT6A8ZWW0zV21NXIFF1qQmjxJd
28 c00f03a4982e467fb6b6bd45908767db6df4771d 0 iEYEABECAAYFAkxXDqsACgkQywK+sNU5EO/GJACfT9Rz4hZOxPQEs91JwtmfjevO84gAmwSmtfo5mmWSm8gtTUebCcdTv0Kf
28 c00f03a4982e467fb6b6bd45908767db6df4771d 0 iEYEABECAAYFAkxXDqsACgkQywK+sNU5EO/GJACfT9Rz4hZOxPQEs91JwtmfjevO84gAmwSmtfo5mmWSm8gtTUebCcdTv0Kf
29 ff5cec76b1c5b6be9c3bb923aae8c3c6d079d6b9 0 iD8DBQBMdo+qywK+sNU5EO8RAqQpAJ975BL2CCAiWMz9SXthNQ9xG181IwCgp4O+KViHPkufZVFn2aTKMNvcr1A=
29 ff5cec76b1c5b6be9c3bb923aae8c3c6d079d6b9 0 iD8DBQBMdo+qywK+sNU5EO8RAqQpAJ975BL2CCAiWMz9SXthNQ9xG181IwCgp4O+KViHPkufZVFn2aTKMNvcr1A=
30 93d8bff78c96fe7e33237b257558ee97290048a4 0 iD8DBQBMpfvdywK+sNU5EO8RAsxVAJ0UaL1XB51C76JUBhafc9GBefuMxwCdEWkTOzwvE0SarJBe9i008jhbqW4=
30 93d8bff78c96fe7e33237b257558ee97290048a4 0 iD8DBQBMpfvdywK+sNU5EO8RAsxVAJ0UaL1XB51C76JUBhafc9GBefuMxwCdEWkTOzwvE0SarJBe9i008jhbqW4=
31 333421b9e0f96c7bc788e5667c146a58a9440a55 0 iD8DBQBMz0HOywK+sNU5EO8RAlsEAJ0USh6yOG7OrWkADGunVt9QimBQnwCbBqeMnKgSbwEw8jZwE3Iz1mdrYlo=
31 333421b9e0f96c7bc788e5667c146a58a9440a55 0 iD8DBQBMz0HOywK+sNU5EO8RAlsEAJ0USh6yOG7OrWkADGunVt9QimBQnwCbBqeMnKgSbwEw8jZwE3Iz1mdrYlo=
32 4438875ec01bd0fc32be92b0872eb6daeed4d44f 0 iD8DBQBM4WYUywK+sNU5EO8RAhCVAJ0dJswachwFAHALmk1x0RJehxzqPQCbBNskP9n/X689jB+btNTZTyKU/fw=
32 4438875ec01bd0fc32be92b0872eb6daeed4d44f 0 iD8DBQBM4WYUywK+sNU5EO8RAhCVAJ0dJswachwFAHALmk1x0RJehxzqPQCbBNskP9n/X689jB+btNTZTyKU/fw=
33 6aff4f144ad356311318b0011df0bb21f2c97429 0 iD8DBQBM9uxXywK+sNU5EO8RAv+4AKCDj4qKP16GdPaq1tP6BUwpM/M1OACfRyzLPp/qiiN8xJTWoWYSe/XjJug=
33 6aff4f144ad356311318b0011df0bb21f2c97429 0 iD8DBQBM9uxXywK+sNU5EO8RAv+4AKCDj4qKP16GdPaq1tP6BUwpM/M1OACfRyzLPp/qiiN8xJTWoWYSe/XjJug=
34 e3bf16703e2601de99e563cdb3a5d50b64e6d320 0 iD8DBQBNH8WqywK+sNU5EO8RAiQTAJ9sBO+TeiGro4si77VVaQaA6jcRUgCfSA28dBbjj0oFoQwvPoZjANiZBH8=
34 e3bf16703e2601de99e563cdb3a5d50b64e6d320 0 iD8DBQBNH8WqywK+sNU5EO8RAiQTAJ9sBO+TeiGro4si77VVaQaA6jcRUgCfSA28dBbjj0oFoQwvPoZjANiZBH8=
35 a6c855c32ea081da3c3b8ff628f1847ff271482f 0 iD8DBQBNSJJ+ywK+sNU5EO8RAoJaAKCweDEF70fu+r1Zn7pYDXdlk5RuSgCeO9gK/eit8Lin/1n3pO7aYguFLok=
35 a6c855c32ea081da3c3b8ff628f1847ff271482f 0 iD8DBQBNSJJ+ywK+sNU5EO8RAoJaAKCweDEF70fu+r1Zn7pYDXdlk5RuSgCeO9gK/eit8Lin/1n3pO7aYguFLok=
36 2b2155623ee2559caf288fd333f30475966c4525 0 iD8DBQBNSJeBywK+sNU5EO8RAm1KAJ4hW9Cm9nHaaGJguchBaPLlAr+O3wCgqgmMok8bdAS06N6PL60PSTM//Gg=
36 2b2155623ee2559caf288fd333f30475966c4525 0 iD8DBQBNSJeBywK+sNU5EO8RAm1KAJ4hW9Cm9nHaaGJguchBaPLlAr+O3wCgqgmMok8bdAS06N6PL60PSTM//Gg=
37 2616325766e3504c8ae7c84bd15ee610901fe91d 0 iD8DBQBNbWy9ywK+sNU5EO8RAlWCAJ4mW8HbzjJj9GpK98muX7k+7EvEHwCfaTLbC/DH3QEsZBhEP+M8tzL6RU4=
37 2616325766e3504c8ae7c84bd15ee610901fe91d 0 iD8DBQBNbWy9ywK+sNU5EO8RAlWCAJ4mW8HbzjJj9GpK98muX7k+7EvEHwCfaTLbC/DH3QEsZBhEP+M8tzL6RU4=
38 aa1f3be38ab127280761889d2dca906ca465b5f4 0 iD8DBQBNeQq7ywK+sNU5EO8RAlEOAJ4tlEDdetE9lKfjGgjbkcR8PrC3egCfXCfF3qNVvU/2YYjpgvRwevjvDy0=
38 aa1f3be38ab127280761889d2dca906ca465b5f4 0 iD8DBQBNeQq7ywK+sNU5EO8RAlEOAJ4tlEDdetE9lKfjGgjbkcR8PrC3egCfXCfF3qNVvU/2YYjpgvRwevjvDy0=
39 b032bec2c0a651ca0ddecb65714bfe6770f67d70 0 iD8DBQBNlg5kywK+sNU5EO8RAnGEAJ9gmEx6MfaR4XcG2m/93vwtfyzs3gCgltzx8/YdHPwqDwRX/WbpYgi33is=
39 b032bec2c0a651ca0ddecb65714bfe6770f67d70 0 iD8DBQBNlg5kywK+sNU5EO8RAnGEAJ9gmEx6MfaR4XcG2m/93vwtfyzs3gCgltzx8/YdHPwqDwRX/WbpYgi33is=
40 3cb1e95676ad089596bd81d0937cad37d6e3b7fb 0 iD8DBQBNvTy4ywK+sNU5EO8RAmp8AJ9QnxK4jTJ7G722MyeBxf0UXEdGwACgtlM7BKtNQfbEH/fOW5y+45W88VI=
40 3cb1e95676ad089596bd81d0937cad37d6e3b7fb 0 iD8DBQBNvTy4ywK+sNU5EO8RAmp8AJ9QnxK4jTJ7G722MyeBxf0UXEdGwACgtlM7BKtNQfbEH/fOW5y+45W88VI=
41 733af5d9f6b22387913e1d11350fb8cb7c1487dd 0 iD8DBQBN5q/8ywK+sNU5EO8RArRGAKCNGT94GKIYtSuwZ57z1sQbcw6uLACfffpbMV4NAPMl8womAwg+7ZPKnIU=
41 733af5d9f6b22387913e1d11350fb8cb7c1487dd 0 iD8DBQBN5q/8ywK+sNU5EO8RArRGAKCNGT94GKIYtSuwZ57z1sQbcw6uLACfffpbMV4NAPMl8womAwg+7ZPKnIU=
42 de9eb6b1da4fc522b1cab16d86ca166204c24f25 0 iD8DBQBODhfhywK+sNU5EO8RAr2+AJ4ugbAj8ae8/K0bYZzx3sascIAg1QCeK3b+zbbVVqd3b7CDpwFnaX8kTd4=
42 de9eb6b1da4fc522b1cab16d86ca166204c24f25 0 iD8DBQBODhfhywK+sNU5EO8RAr2+AJ4ugbAj8ae8/K0bYZzx3sascIAg1QCeK3b+zbbVVqd3b7CDpwFnaX8kTd4=
43 4a43e23b8c55b4566b8200bf69fe2158485a2634 0 iD8DBQBONzIMywK+sNU5EO8RAj5SAJ0aPS3+JHnyI6bHB2Fl0LImbDmagwCdGbDLp1S7TFobxXudOH49bX45Iik=
43 4a43e23b8c55b4566b8200bf69fe2158485a2634 0 iD8DBQBONzIMywK+sNU5EO8RAj5SAJ0aPS3+JHnyI6bHB2Fl0LImbDmagwCdGbDLp1S7TFobxXudOH49bX45Iik=
44 d629f1e89021103f1753addcef6b310e4435b184 0 iD8DBQBOWAsBywK+sNU5EO8RAht4AJwJl9oNFopuGkj5m8aKuf7bqPkoAQCeNrEm7UhFsZKYT5iUOjnMV7s2LaM=
44 d629f1e89021103f1753addcef6b310e4435b184 0 iD8DBQBOWAsBywK+sNU5EO8RAht4AJwJl9oNFopuGkj5m8aKuf7bqPkoAQCeNrEm7UhFsZKYT5iUOjnMV7s2LaM=
45 351a9292e430e35766c552066ed3e87c557b803b 0 iD8DBQBOh3zUywK+sNU5EO8RApFMAKCD3Y/u3avDFndznwqfG5UeTHMlvACfUivPIVQZyDZnhZMq0UhC6zhCEQg=
45 351a9292e430e35766c552066ed3e87c557b803b 0 iD8DBQBOh3zUywK+sNU5EO8RApFMAKCD3Y/u3avDFndznwqfG5UeTHMlvACfUivPIVQZyDZnhZMq0UhC6zhCEQg=
46 384082750f2c51dc917d85a7145748330fa6ef4d 0 iD8DBQBOmd+OywK+sNU5EO8RAgDgAJ9V/X+G7VLwhTpHrZNiOHabzSyzYQCdE2kKfIevJUYB9QLAWCWP6DPwrwI=
46 384082750f2c51dc917d85a7145748330fa6ef4d 0 iD8DBQBOmd+OywK+sNU5EO8RAgDgAJ9V/X+G7VLwhTpHrZNiOHabzSyzYQCdE2kKfIevJUYB9QLAWCWP6DPwrwI=
47 41453d55b481ddfcc1dacb445179649e24ca861d 0 iD8DBQBOsFhpywK+sNU5EO8RAqM6AKCyfxUae3/zLuiLdQz+JR78690eMACfQ6JTBQib4AbE+rUDdkeFYg9K/+4=
47 41453d55b481ddfcc1dacb445179649e24ca861d 0 iD8DBQBOsFhpywK+sNU5EO8RAqM6AKCyfxUae3/zLuiLdQz+JR78690eMACfQ6JTBQib4AbE+rUDdkeFYg9K/+4=
48 195dbd1cef0c2f9f8bcf4ea303238105f716bda3 0 iD8DBQBO1/fWywK+sNU5EO8RAmoPAKCR5lpv1D6JLURHD8KVLSV4GRVEBgCgnd0Sy78ligNfqAMafmACRDvj7vo=
48 195dbd1cef0c2f9f8bcf4ea303238105f716bda3 0 iD8DBQBO1/fWywK+sNU5EO8RAmoPAKCR5lpv1D6JLURHD8KVLSV4GRVEBgCgnd0Sy78ligNfqAMafmACRDvj7vo=
49 6344043924497cd06d781d9014c66802285072e4 0 iD8DBQBPALgmywK+sNU5EO8RAlfhAJ9nYOdWnhfVDHYtDTJAyJtXBAQS9wCgnefoSQt7QABkbGxM+Q85UYEBuD0=
49 6344043924497cd06d781d9014c66802285072e4 0 iD8DBQBPALgmywK+sNU5EO8RAlfhAJ9nYOdWnhfVDHYtDTJAyJtXBAQS9wCgnefoSQt7QABkbGxM+Q85UYEBuD0=
50 db33555eafeaf9df1e18950e29439eaa706d399b 0 iD8DBQBPGdzxywK+sNU5EO8RAppkAJ9jOXhUVE/97CPgiMA0pMGiIYnesQCfengAszcBiSiKGugiI8Okc9ghU+Y=
50 db33555eafeaf9df1e18950e29439eaa706d399b 0 iD8DBQBPGdzxywK+sNU5EO8RAppkAJ9jOXhUVE/97CPgiMA0pMGiIYnesQCfengAszcBiSiKGugiI8Okc9ghU+Y=
51 2aa5b51f310fb3befd26bed99c02267f5c12c734 0 iD8DBQBPKZ9bywK+sNU5EO8RAt1TAJ45r1eJ0YqSkInzrrayg4TVCh0SnQCgm0GA/Ua74jnnDwVQ60lAwROuz1Q=
51 2aa5b51f310fb3befd26bed99c02267f5c12c734 0 iD8DBQBPKZ9bywK+sNU5EO8RAt1TAJ45r1eJ0YqSkInzrrayg4TVCh0SnQCgm0GA/Ua74jnnDwVQ60lAwROuz1Q=
52 53e2cd303ecf8ca7c7eeebd785c34e5ed6b0f4a4 0 iD8DBQBPT/fvywK+sNU5EO8RAnfYAKCn7d0vwqIb100YfWm1F7nFD5B+FACeM02YHpQLSNsztrBCObtqcnfod7Q=
52 53e2cd303ecf8ca7c7eeebd785c34e5ed6b0f4a4 0 iD8DBQBPT/fvywK+sNU5EO8RAnfYAKCn7d0vwqIb100YfWm1F7nFD5B+FACeM02YHpQLSNsztrBCObtqcnfod7Q=
53 b9bd95e61b49c221c4cca24e6da7c946fc02f992 0 iD8DBQBPeLsIywK+sNU5EO8RAvpNAKCtKe2gitz8dYn52IRF0hFOPCR7AQCfRJL/RWCFweu2T1vH/mUOCf8SXXc=
53 b9bd95e61b49c221c4cca24e6da7c946fc02f992 0 iD8DBQBPeLsIywK+sNU5EO8RAvpNAKCtKe2gitz8dYn52IRF0hFOPCR7AQCfRJL/RWCFweu2T1vH/mUOCf8SXXc=
54 d9e2f09d5488c395ae9ddbb320ceacd24757e055 0 iD8DBQBPju/dywK+sNU5EO8RArBYAJ9xtifdbk+hCOJO8OZa4JfHX8OYZQCeKPMBaBWiT8N/WHoOm1XU0q+iono=
54 d9e2f09d5488c395ae9ddbb320ceacd24757e055 0 iD8DBQBPju/dywK+sNU5EO8RArBYAJ9xtifdbk+hCOJO8OZa4JfHX8OYZQCeKPMBaBWiT8N/WHoOm1XU0q+iono=
55 00182b3d087909e3c3ae44761efecdde8f319ef3 0 iD8DBQBPoFhIywK+sNU5EO8RAhzhAKCBj1n2jxPTkZNJJ5pSp3soa+XHIgCgsZZpAQxOpXwCp0eCdNGe0+pmxmg=
55 00182b3d087909e3c3ae44761efecdde8f319ef3 0 iD8DBQBPoFhIywK+sNU5EO8RAhzhAKCBj1n2jxPTkZNJJ5pSp3soa+XHIgCgsZZpAQxOpXwCp0eCdNGe0+pmxmg=
56 5983de86462c5a9f42a3ad0f5e90ce5b1d221d25 0 iD8DBQBPovNWywK+sNU5EO8RAhgiAJ980T91FdPTRMmVONDhpkMsZwVIMACgg3bKvoWSeuCW28llUhAJtUjrMv0=
56 5983de86462c5a9f42a3ad0f5e90ce5b1d221d25 0 iD8DBQBPovNWywK+sNU5EO8RAhgiAJ980T91FdPTRMmVONDhpkMsZwVIMACgg3bKvoWSeuCW28llUhAJtUjrMv0=
57 85a358df5bbbe404ca25730c9c459b34263441dc 0 iD8DBQBPyZsWywK+sNU5EO8RAnpLAJ48qrGDJRT+pteS0mSQ11haqHstPwCdG4ccGbk+0JHb7aNy8/NRGAOqn9w=
57 85a358df5bbbe404ca25730c9c459b34263441dc 0 iD8DBQBPyZsWywK+sNU5EO8RAnpLAJ48qrGDJRT+pteS0mSQ11haqHstPwCdG4ccGbk+0JHb7aNy8/NRGAOqn9w=
58 b013baa3898e117959984fc64c29d8c784d2f28b 0 iD8DBQBP8QOPywK+sNU5EO8RAqimAKCFRSx0lvG6y8vne2IhNG062Hn0dACeMLI5/zhpWpHBIVeAAquYfx2XFeA=
58 b013baa3898e117959984fc64c29d8c784d2f28b 0 iD8DBQBP8QOPywK+sNU5EO8RAqimAKCFRSx0lvG6y8vne2IhNG062Hn0dACeMLI5/zhpWpHBIVeAAquYfx2XFeA=
59 7f5094bb3f423fc799e471aac2aee81a7ce57a0b 0 iD8DBQBQGiL8ywK+sNU5EO8RAq5oAJ4rMMCPx6O+OuzNXVOexogedWz/QgCeIiIxLd76I4pXO48tdXhr0hQcBuM=
59 7f5094bb3f423fc799e471aac2aee81a7ce57a0b 0 iD8DBQBQGiL8ywK+sNU5EO8RAq5oAJ4rMMCPx6O+OuzNXVOexogedWz/QgCeIiIxLd76I4pXO48tdXhr0hQcBuM=
60 072209ae4ddb654eb2d5fd35bff358c738414432 0 iD8DBQBQQkq0ywK+sNU5EO8RArDTAJ9nk5CySnNAjAXYvqvx4uWCw9ThZwCgqmFRehH/l+oTwj3f8nw8u8qTCdc=
60 072209ae4ddb654eb2d5fd35bff358c738414432 0 iD8DBQBQQkq0ywK+sNU5EO8RArDTAJ9nk5CySnNAjAXYvqvx4uWCw9ThZwCgqmFRehH/l+oTwj3f8nw8u8qTCdc=
61 b3f0f9a39c4e1d0250048cd803ab03542d6f140a 0 iD8DBQBQamltywK+sNU5EO8RAlsqAJ4qF/m6aFu4mJCOKTiAP5RvZFK02ACfawYShUZO6OXEFfveU0aAxDR0M1k=
61 b3f0f9a39c4e1d0250048cd803ab03542d6f140a 0 iD8DBQBQamltywK+sNU5EO8RAlsqAJ4qF/m6aFu4mJCOKTiAP5RvZFK02ACfawYShUZO6OXEFfveU0aAxDR0M1k=
62 d118a4f4fd16d9b558ec3f3e87bfee772861d2b7 0 iD8DBQBQgPV5ywK+sNU5EO8RArylAJ0abcx5NlDjyv3ZDWpAfRIHyRsJtQCgn4TMuEayqgxzrvadQZHdTEU2g38=
62 d118a4f4fd16d9b558ec3f3e87bfee772861d2b7 0 iD8DBQBQgPV5ywK+sNU5EO8RArylAJ0abcx5NlDjyv3ZDWpAfRIHyRsJtQCgn4TMuEayqgxzrvadQZHdTEU2g38=
63 195ad823b5d58c68903a6153a25e3fb4ed25239d 0 iD8DBQBQkuT9ywK+sNU5EO8RAhB4AKCeerItoK2Jipm2cVf4euGofAa/WACeJj3TVd4pFILpb+ogj7ebweFLJi0=
63 195ad823b5d58c68903a6153a25e3fb4ed25239d 0 iD8DBQBQkuT9ywK+sNU5EO8RAhB4AKCeerItoK2Jipm2cVf4euGofAa/WACeJj3TVd4pFILpb+ogj7ebweFLJi0=
64 0c10cf8191469e7c3c8844922e17e71a176cb7cb 0 iD8DBQBQvQWoywK+sNU5EO8RAnq3AJoCn98u4geFx5YaQaeh99gFhCd7bQCgjoBwBSUyOvGd0yBy60E3Vv3VZhM=
64 0c10cf8191469e7c3c8844922e17e71a176cb7cb 0 iD8DBQBQvQWoywK+sNU5EO8RAnq3AJoCn98u4geFx5YaQaeh99gFhCd7bQCgjoBwBSUyOvGd0yBy60E3Vv3VZhM=
65 a4765077b65e6ae29ba42bab7834717b5072d5ba 0 iD8DBQBQ486sywK+sNU5EO8RAhmJAJ90aLfLKZhmcZN7kqphigQJxiFOQACeJ5IUZxjGKH4xzi3MrgIcx9n+dB0=
65 a4765077b65e6ae29ba42bab7834717b5072d5ba 0 iD8DBQBQ486sywK+sNU5EO8RAhmJAJ90aLfLKZhmcZN7kqphigQJxiFOQACeJ5IUZxjGKH4xzi3MrgIcx9n+dB0=
66 f5fbe15ca7449f2c9a3cf817c86d0ae68b307214 0 iD8DBQBQ+yuYywK+sNU5EO8RAm9JAJoD/UciWvpGeKBcpGtZJBFJVcL/HACghDXSgQ+xQDjB+6uGrdgAQsRR1Lg=
66 f5fbe15ca7449f2c9a3cf817c86d0ae68b307214 0 iD8DBQBQ+yuYywK+sNU5EO8RAm9JAJoD/UciWvpGeKBcpGtZJBFJVcL/HACghDXSgQ+xQDjB+6uGrdgAQsRR1Lg=
67 a6088c05e43a8aee0472ca3a4f6f8d7dd914ebbf 0 iD8DBQBRDDROywK+sNU5EO8RAh75AJ9uJCGoCWnP0Lv/+XuYs4hvUl+sAgCcD36QgAnuw8IQXrvv684BAXAnHcA=
67 a6088c05e43a8aee0472ca3a4f6f8d7dd914ebbf 0 iD8DBQBRDDROywK+sNU5EO8RAh75AJ9uJCGoCWnP0Lv/+XuYs4hvUl+sAgCcD36QgAnuw8IQXrvv684BAXAnHcA=
68 7511d4df752e61fe7ae4f3682e0a0008573b0402 0 iD8DBQBRFYaoywK+sNU5EO8RAuErAJoDyhXn+lptU3+AevVdwAIeNFyR2gCdHzPHyWd+JDeWCUR+pSOBi8O2ppM=
68 7511d4df752e61fe7ae4f3682e0a0008573b0402 0 iD8DBQBRFYaoywK+sNU5EO8RAuErAJoDyhXn+lptU3+AevVdwAIeNFyR2gCdHzPHyWd+JDeWCUR+pSOBi8O2ppM=
69 5b7175377babacce80a6c1e12366d8032a6d4340 0 iD8DBQBRMCYgywK+sNU5EO8RAq1/AKCWKlt9ysibyQgYwoxxIOZv5J8rpwCcDSHQaaf1fFZUTnQsOePwcM2Y/Sg=
69 5b7175377babacce80a6c1e12366d8032a6d4340 0 iD8DBQBRMCYgywK+sNU5EO8RAq1/AKCWKlt9ysibyQgYwoxxIOZv5J8rpwCcDSHQaaf1fFZUTnQsOePwcM2Y/Sg=
70 50c922c1b5145dab8baefefb0437d363b6a6c21c 0 iD8DBQBRWnUnywK+sNU5EO8RAuQRAJwM42cJqJPeqJ0jVNdMqKMDqr4dSACeP0cRVGz1gitMuV0x8f3mrZrqc7I=
70 50c922c1b5145dab8baefefb0437d363b6a6c21c 0 iD8DBQBRWnUnywK+sNU5EO8RAuQRAJwM42cJqJPeqJ0jVNdMqKMDqr4dSACeP0cRVGz1gitMuV0x8f3mrZrqc7I=
71 8a7bd2dccd44ed571afe7424cd7f95594f27c092 0 iD8DBQBRXfBvywK+sNU5EO8RAn+LAKCsMmflbuXjYRxlzFwId5ptm8TZcwCdGkyLbZcASBOkzQUm/WW1qfknJHU=
71 8a7bd2dccd44ed571afe7424cd7f95594f27c092 0 iD8DBQBRXfBvywK+sNU5EO8RAn+LAKCsMmflbuXjYRxlzFwId5ptm8TZcwCdGkyLbZcASBOkzQUm/WW1qfknJHU=
72 292cd385856d98bacb2c3086f8897bc660c2beea 0 iD8DBQBRcM0BywK+sNU5EO8RAjp4AKCJBykQbvXhKuvLSMxKx3a2TBiXcACfbr/kLg5GlZTF/XDPmY+PyHgI/GM=
72 292cd385856d98bacb2c3086f8897bc660c2beea 0 iD8DBQBRcM0BywK+sNU5EO8RAjp4AKCJBykQbvXhKuvLSMxKx3a2TBiXcACfbr/kLg5GlZTF/XDPmY+PyHgI/GM=
73 23f785b38af38d2fca6b8f3db56b8007a84cd73a 0 iD8DBQBRgZwNywK+sNU5EO8RAmO4AJ4u2ILGuimRP6MJgE2t65LZ5dAdkACgiENEstIdrlFC80p+sWKD81kKIYI=
73 23f785b38af38d2fca6b8f3db56b8007a84cd73a 0 iD8DBQBRgZwNywK+sNU5EO8RAmO4AJ4u2ILGuimRP6MJgE2t65LZ5dAdkACgiENEstIdrlFC80p+sWKD81kKIYI=
74 ddc7a6be20212d18f3e27d9d7e6f079a66d96f21 0 iD8DBQBRkswvywK+sNU5EO8RAiYYAJsHTHyHbJeAgmGvBTmDrfcKu4doUgCeLm7eGBjx7yAPUvEtxef8rAkQmXI=
74 ddc7a6be20212d18f3e27d9d7e6f079a66d96f21 0 iD8DBQBRkswvywK+sNU5EO8RAiYYAJsHTHyHbJeAgmGvBTmDrfcKu4doUgCeLm7eGBjx7yAPUvEtxef8rAkQmXI=
75 cceaf7af4c9e9e6fa2dbfdcfe9856c5da69c4ffd 0 iD8DBQBRqnFLywK+sNU5EO8RAsWNAJ9RR6t+y1DLFc2HeH0eN9VfZAKF9gCeJ8ezvhtKq/LMs0/nvcgKQc/d5jk=
75 cceaf7af4c9e9e6fa2dbfdcfe9856c5da69c4ffd 0 iD8DBQBRqnFLywK+sNU5EO8RAsWNAJ9RR6t+y1DLFc2HeH0eN9VfZAKF9gCeJ8ezvhtKq/LMs0/nvcgKQc/d5jk=
76 009794acc6e37a650f0fae37872e733382ac1c0c 0 iD8DBQBR0guxywK+sNU5EO8RArNkAKCq9pMihVzP8Os5kCmgbWpe5C37wgCgqzuPZTHvAsXF5wTyaSTMVa9Ccq4=
76 009794acc6e37a650f0fae37872e733382ac1c0c 0 iD8DBQBR0guxywK+sNU5EO8RArNkAKCq9pMihVzP8Os5kCmgbWpe5C37wgCgqzuPZTHvAsXF5wTyaSTMVa9Ccq4=
77 f0d7721d7322dcfb5af33599c2543f27335334bb 0 iD8DBQBR8taaywK+sNU5EO8RAqeEAJ4idDhhDuEsgsUjeQgWNj498matHACfT67gSF5w0ylsrBx1Hb52HkGXDm0=
77 f0d7721d7322dcfb5af33599c2543f27335334bb 0 iD8DBQBR8taaywK+sNU5EO8RAqeEAJ4idDhhDuEsgsUjeQgWNj498matHACfT67gSF5w0ylsrBx1Hb52HkGXDm0=
78 f37b5a17e6a0ee17afde2cdde5393dd74715fb58 0 iD8DBQBR+ymFywK+sNU5EO8RAuSdAJkBMcd9DAZ3rWE9WGKPm2YZ8LBoXACfXn/wbEsVy7ZgJoUwiWmHSnQaWCI=
78 f37b5a17e6a0ee17afde2cdde5393dd74715fb58 0 iD8DBQBR+ymFywK+sNU5EO8RAuSdAJkBMcd9DAZ3rWE9WGKPm2YZ8LBoXACfXn/wbEsVy7ZgJoUwiWmHSnQaWCI=
79 335a558f81dc73afeab4d7be63617392b130117f 0 iQIVAwUAUiZrIyBXgaxoKi1yAQK2iw//cquNqqSkc8Re5/TZT9I6NH+lh6DbOKjJP0Xl1Wqq0K+KSIUgZG4G32ovaEb2l5X0uY+3unRPiZ0ebl0YSw4Fb2ZiPIADXLBTOYRrY2Wwd3tpJeGI6wEgZt3SfcITV/g7NJrCjT3FlYoSOIayrExM80InSdcEM0Q3Rx6HKzY2acyxzgZeAtAW5ohFvHilSvY6p5Gcm4+QptMxvw45GPdreUmjeXZxNXNXZ8P+MjMz/QJbai/N7PjmK8lqnhkBsT48Ng/KhhmOkGntNJ2/ImBWLFGcWngSvJ7sfWwnyhndvGhe0Hq1NcCf7I8TjNDxU5TR+m+uW7xjXdLoDbUjBdX4sKXnh8ZjbYiODKBOrrDq25cf8nA/tnpKyE/qsVy60kOk6loY4XKiYmn1V49Ta0emmDx0hqo3HgxHHsHX0NDnGdWGol7cPRET0RzVobKq1A0jnrhPooWidvLh9bPzLonrWDo+ib+DuySoRkuYUK4pgZJ2mbg6daFOBEZygkSyRB8bo1UQUP7EgQDrWe4khb/5GHEfDkrQz3qu/sXvc0Ir1mOUWBFPHC2DjjCn/oMJuUkG1SwM8l2Bfv7h67ssES6YQ2+RjOix4yid7EXS/Ogl45PzCIPSI5+BbNs10JhE0w5uErBHlF53EDTe/TSLc+GU6DB6PP6dH912Njdr3jpNSUQ=
79 335a558f81dc73afeab4d7be63617392b130117f 0 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
@@ -1,241 +1,242 b''
1 d40cc5aacc31ed673d9b5b24f98bee78c283062c 0.4f
1 d40cc5aacc31ed673d9b5b24f98bee78c283062c 0.4f
2 1c590d34bf61e2ea12c71738e5a746cd74586157 0.4e
2 1c590d34bf61e2ea12c71738e5a746cd74586157 0.4e
3 7eca4cfa8aad5fce9a04f7d8acadcd0452e2f34e 0.4d
3 7eca4cfa8aad5fce9a04f7d8acadcd0452e2f34e 0.4d
4 b4d0c3786ad3e47beacf8412157326a32b6d25a4 0.4c
4 b4d0c3786ad3e47beacf8412157326a32b6d25a4 0.4c
5 f40273b0ad7b3a6d3012fd37736d0611f41ecf54 0.5
5 f40273b0ad7b3a6d3012fd37736d0611f41ecf54 0.5
6 0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 0.5b
6 0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 0.5b
7 12e0fdbc57a0be78f0e817fd1d170a3615cd35da 0.6
7 12e0fdbc57a0be78f0e817fd1d170a3615cd35da 0.6
8 4ccf3de52989b14c3d84e1097f59e39a992e00bd 0.6b
8 4ccf3de52989b14c3d84e1097f59e39a992e00bd 0.6b
9 eac9c8efcd9bd8244e72fb6821f769f450457a32 0.6c
9 eac9c8efcd9bd8244e72fb6821f769f450457a32 0.6c
10 979c049974485125e1f9357f6bbe9c1b548a64c3 0.7
10 979c049974485125e1f9357f6bbe9c1b548a64c3 0.7
11 3a56574f329a368d645853e0f9e09472aee62349 0.8
11 3a56574f329a368d645853e0f9e09472aee62349 0.8
12 6a03cff2b0f5d30281e6addefe96b993582f2eac 0.8.1
12 6a03cff2b0f5d30281e6addefe96b993582f2eac 0.8.1
13 35fb62a3a673d5322f6274a44ba6456e5e4b3b37 0.9
13 35fb62a3a673d5322f6274a44ba6456e5e4b3b37 0.9
14 2be3001847cb18a23c403439d9e7d0ace30804e9 0.9.1
14 2be3001847cb18a23c403439d9e7d0ace30804e9 0.9.1
15 36a957364b1b89c150f2d0e60a99befe0ee08bd3 0.9.2
15 36a957364b1b89c150f2d0e60a99befe0ee08bd3 0.9.2
16 27230c29bfec36d5540fbe1c976810aefecfd1d2 0.9.3
16 27230c29bfec36d5540fbe1c976810aefecfd1d2 0.9.3
17 fb4b6d5fe100b0886f8bc3d6731ec0e5ed5c4694 0.9.4
17 fb4b6d5fe100b0886f8bc3d6731ec0e5ed5c4694 0.9.4
18 23889160905a1b09fffe1c07378e9fc1827606eb 0.9.5
18 23889160905a1b09fffe1c07378e9fc1827606eb 0.9.5
19 bae2e9c838e90a393bae3973a7850280413e091a 1.0
19 bae2e9c838e90a393bae3973a7850280413e091a 1.0
20 d5cbbe2c49cee22a9fbeb9ea41daa0ac4e26b846 1.0.1
20 d5cbbe2c49cee22a9fbeb9ea41daa0ac4e26b846 1.0.1
21 d2375bbee6d47e62ba8e415c86e83a465dc4dce9 1.0.2
21 d2375bbee6d47e62ba8e415c86e83a465dc4dce9 1.0.2
22 2a67430f92f15ea5159c26b09ec4839a0c549a26 1.1
22 2a67430f92f15ea5159c26b09ec4839a0c549a26 1.1
23 3773e510d433969e277b1863c317b674cbee2065 1.1.1
23 3773e510d433969e277b1863c317b674cbee2065 1.1.1
24 11a4eb81fb4f4742451591489e2797dc47903277 1.1.2
24 11a4eb81fb4f4742451591489e2797dc47903277 1.1.2
25 11efa41037e280d08cfb07c09ad485df30fb0ea8 1.2
25 11efa41037e280d08cfb07c09ad485df30fb0ea8 1.2
26 02981000012e3adf40c4849bd7b3d5618f9ce82d 1.2.1
26 02981000012e3adf40c4849bd7b3d5618f9ce82d 1.2.1
27 196d40e7c885fa6e95f89134809b3ec7bdbca34b 1.3
27 196d40e7c885fa6e95f89134809b3ec7bdbca34b 1.3
28 3ef6c14a1e8e83a31226f5881b7fe6095bbfa6f6 1.3.1
28 3ef6c14a1e8e83a31226f5881b7fe6095bbfa6f6 1.3.1
29 31ec469f9b556f11819937cf68ee53f2be927ebf 1.4
29 31ec469f9b556f11819937cf68ee53f2be927ebf 1.4
30 439d7ea6fe3aa4ab9ec274a68846779153789de9 1.4.1
30 439d7ea6fe3aa4ab9ec274a68846779153789de9 1.4.1
31 296a0b14a68621f6990c54fdba0083f6f20935bf 1.4.2
31 296a0b14a68621f6990c54fdba0083f6f20935bf 1.4.2
32 4aa619c4c2c09907034d9824ebb1dd0e878206eb 1.4.3
32 4aa619c4c2c09907034d9824ebb1dd0e878206eb 1.4.3
33 ff2704a8ded37fbebd8b6eb5ec733731d725da8a 1.5
33 ff2704a8ded37fbebd8b6eb5ec733731d725da8a 1.5
34 2b01dab594167bc0dd33331dbaa6dca3dca1b3aa 1.5.1
34 2b01dab594167bc0dd33331dbaa6dca3dca1b3aa 1.5.1
35 39f725929f0c48c5fb3b90c071fc3066012456ca 1.5.2
35 39f725929f0c48c5fb3b90c071fc3066012456ca 1.5.2
36 fdcf80f26604f233dc4d8f0a5ef9d7470e317e8a 1.5.3
36 fdcf80f26604f233dc4d8f0a5ef9d7470e317e8a 1.5.3
37 24fe2629c6fd0c74c90bd066e77387c2b02e8437 1.5.4
37 24fe2629c6fd0c74c90bd066e77387c2b02e8437 1.5.4
38 f786fc4b8764cd2a5526d259cf2f94d8a66924d9 1.6
38 f786fc4b8764cd2a5526d259cf2f94d8a66924d9 1.6
39 bf1774d95bde614af3956d92b20e2a0c68c5fec7 1.6.1
39 bf1774d95bde614af3956d92b20e2a0c68c5fec7 1.6.1
40 c00f03a4982e467fb6b6bd45908767db6df4771d 1.6.2
40 c00f03a4982e467fb6b6bd45908767db6df4771d 1.6.2
41 ff5cec76b1c5b6be9c3bb923aae8c3c6d079d6b9 1.6.3
41 ff5cec76b1c5b6be9c3bb923aae8c3c6d079d6b9 1.6.3
42 93d8bff78c96fe7e33237b257558ee97290048a4 1.6.4
42 93d8bff78c96fe7e33237b257558ee97290048a4 1.6.4
43 333421b9e0f96c7bc788e5667c146a58a9440a55 1.7
43 333421b9e0f96c7bc788e5667c146a58a9440a55 1.7
44 4438875ec01bd0fc32be92b0872eb6daeed4d44f 1.7.1
44 4438875ec01bd0fc32be92b0872eb6daeed4d44f 1.7.1
45 6aff4f144ad356311318b0011df0bb21f2c97429 1.7.2
45 6aff4f144ad356311318b0011df0bb21f2c97429 1.7.2
46 e3bf16703e2601de99e563cdb3a5d50b64e6d320 1.7.3
46 e3bf16703e2601de99e563cdb3a5d50b64e6d320 1.7.3
47 a6c855c32ea081da3c3b8ff628f1847ff271482f 1.7.4
47 a6c855c32ea081da3c3b8ff628f1847ff271482f 1.7.4
48 2b2155623ee2559caf288fd333f30475966c4525 1.7.5
48 2b2155623ee2559caf288fd333f30475966c4525 1.7.5
49 2616325766e3504c8ae7c84bd15ee610901fe91d 1.8
49 2616325766e3504c8ae7c84bd15ee610901fe91d 1.8
50 aa1f3be38ab127280761889d2dca906ca465b5f4 1.8.1
50 aa1f3be38ab127280761889d2dca906ca465b5f4 1.8.1
51 b032bec2c0a651ca0ddecb65714bfe6770f67d70 1.8.2
51 b032bec2c0a651ca0ddecb65714bfe6770f67d70 1.8.2
52 3cb1e95676ad089596bd81d0937cad37d6e3b7fb 1.8.3
52 3cb1e95676ad089596bd81d0937cad37d6e3b7fb 1.8.3
53 733af5d9f6b22387913e1d11350fb8cb7c1487dd 1.8.4
53 733af5d9f6b22387913e1d11350fb8cb7c1487dd 1.8.4
54 de9eb6b1da4fc522b1cab16d86ca166204c24f25 1.9
54 de9eb6b1da4fc522b1cab16d86ca166204c24f25 1.9
55 4a43e23b8c55b4566b8200bf69fe2158485a2634 1.9.1
55 4a43e23b8c55b4566b8200bf69fe2158485a2634 1.9.1
56 d629f1e89021103f1753addcef6b310e4435b184 1.9.2
56 d629f1e89021103f1753addcef6b310e4435b184 1.9.2
57 351a9292e430e35766c552066ed3e87c557b803b 1.9.3
57 351a9292e430e35766c552066ed3e87c557b803b 1.9.3
58 384082750f2c51dc917d85a7145748330fa6ef4d 2.0-rc
58 384082750f2c51dc917d85a7145748330fa6ef4d 2.0-rc
59 41453d55b481ddfcc1dacb445179649e24ca861d 2.0
59 41453d55b481ddfcc1dacb445179649e24ca861d 2.0
60 195dbd1cef0c2f9f8bcf4ea303238105f716bda3 2.0.1
60 195dbd1cef0c2f9f8bcf4ea303238105f716bda3 2.0.1
61 6344043924497cd06d781d9014c66802285072e4 2.0.2
61 6344043924497cd06d781d9014c66802285072e4 2.0.2
62 db33555eafeaf9df1e18950e29439eaa706d399b 2.1-rc
62 db33555eafeaf9df1e18950e29439eaa706d399b 2.1-rc
63 2aa5b51f310fb3befd26bed99c02267f5c12c734 2.1
63 2aa5b51f310fb3befd26bed99c02267f5c12c734 2.1
64 53e2cd303ecf8ca7c7eeebd785c34e5ed6b0f4a4 2.1.1
64 53e2cd303ecf8ca7c7eeebd785c34e5ed6b0f4a4 2.1.1
65 b9bd95e61b49c221c4cca24e6da7c946fc02f992 2.1.2
65 b9bd95e61b49c221c4cca24e6da7c946fc02f992 2.1.2
66 d9e2f09d5488c395ae9ddbb320ceacd24757e055 2.2-rc
66 d9e2f09d5488c395ae9ddbb320ceacd24757e055 2.2-rc
67 00182b3d087909e3c3ae44761efecdde8f319ef3 2.2
67 00182b3d087909e3c3ae44761efecdde8f319ef3 2.2
68 5983de86462c5a9f42a3ad0f5e90ce5b1d221d25 2.2.1
68 5983de86462c5a9f42a3ad0f5e90ce5b1d221d25 2.2.1
69 85a358df5bbbe404ca25730c9c459b34263441dc 2.2.2
69 85a358df5bbbe404ca25730c9c459b34263441dc 2.2.2
70 b013baa3898e117959984fc64c29d8c784d2f28b 2.2.3
70 b013baa3898e117959984fc64c29d8c784d2f28b 2.2.3
71 a06e2681dd1786e2354d84a5fa9c1c88dd4fa3e0 2.3-rc
71 a06e2681dd1786e2354d84a5fa9c1c88dd4fa3e0 2.3-rc
72 7f5094bb3f423fc799e471aac2aee81a7ce57a0b 2.3
72 7f5094bb3f423fc799e471aac2aee81a7ce57a0b 2.3
73 072209ae4ddb654eb2d5fd35bff358c738414432 2.3.1
73 072209ae4ddb654eb2d5fd35bff358c738414432 2.3.1
74 b3f0f9a39c4e1d0250048cd803ab03542d6f140a 2.3.2
74 b3f0f9a39c4e1d0250048cd803ab03542d6f140a 2.3.2
75 d118a4f4fd16d9b558ec3f3e87bfee772861d2b7 2.4-rc
75 d118a4f4fd16d9b558ec3f3e87bfee772861d2b7 2.4-rc
76 195ad823b5d58c68903a6153a25e3fb4ed25239d 2.4
76 195ad823b5d58c68903a6153a25e3fb4ed25239d 2.4
77 0c10cf8191469e7c3c8844922e17e71a176cb7cb 2.4.1
77 0c10cf8191469e7c3c8844922e17e71a176cb7cb 2.4.1
78 a4765077b65e6ae29ba42bab7834717b5072d5ba 2.4.2
78 a4765077b65e6ae29ba42bab7834717b5072d5ba 2.4.2
79 f5fbe15ca7449f2c9a3cf817c86d0ae68b307214 2.5-rc
79 f5fbe15ca7449f2c9a3cf817c86d0ae68b307214 2.5-rc
80 a6088c05e43a8aee0472ca3a4f6f8d7dd914ebbf 2.5
80 a6088c05e43a8aee0472ca3a4f6f8d7dd914ebbf 2.5
81 7511d4df752e61fe7ae4f3682e0a0008573b0402 2.5.1
81 7511d4df752e61fe7ae4f3682e0a0008573b0402 2.5.1
82 5b7175377babacce80a6c1e12366d8032a6d4340 2.5.2
82 5b7175377babacce80a6c1e12366d8032a6d4340 2.5.2
83 50c922c1b5145dab8baefefb0437d363b6a6c21c 2.5.3
83 50c922c1b5145dab8baefefb0437d363b6a6c21c 2.5.3
84 8a7bd2dccd44ed571afe7424cd7f95594f27c092 2.5.4
84 8a7bd2dccd44ed571afe7424cd7f95594f27c092 2.5.4
85 292cd385856d98bacb2c3086f8897bc660c2beea 2.6-rc
85 292cd385856d98bacb2c3086f8897bc660c2beea 2.6-rc
86 23f785b38af38d2fca6b8f3db56b8007a84cd73a 2.6
86 23f785b38af38d2fca6b8f3db56b8007a84cd73a 2.6
87 ddc7a6be20212d18f3e27d9d7e6f079a66d96f21 2.6.1
87 ddc7a6be20212d18f3e27d9d7e6f079a66d96f21 2.6.1
88 cceaf7af4c9e9e6fa2dbfdcfe9856c5da69c4ffd 2.6.2
88 cceaf7af4c9e9e6fa2dbfdcfe9856c5da69c4ffd 2.6.2
89 009794acc6e37a650f0fae37872e733382ac1c0c 2.6.3
89 009794acc6e37a650f0fae37872e733382ac1c0c 2.6.3
90 f0d7721d7322dcfb5af33599c2543f27335334bb 2.7-rc
90 f0d7721d7322dcfb5af33599c2543f27335334bb 2.7-rc
91 f37b5a17e6a0ee17afde2cdde5393dd74715fb58 2.7
91 f37b5a17e6a0ee17afde2cdde5393dd74715fb58 2.7
92 335a558f81dc73afeab4d7be63617392b130117f 2.7.1
92 335a558f81dc73afeab4d7be63617392b130117f 2.7.1
93 e7fa36d2ad3a7944a52dca126458d6f482db3524 2.7.2
93 e7fa36d2ad3a7944a52dca126458d6f482db3524 2.7.2
94 1596f2d8f2421314b1ddead8f7d0c91009358994 2.8-rc
94 1596f2d8f2421314b1ddead8f7d0c91009358994 2.8-rc
95 d825e4025e39d1c39db943cdc89818abd0a87c27 2.8
95 d825e4025e39d1c39db943cdc89818abd0a87c27 2.8
96 209e04a06467e2969c0cc6501335be0406d46ef0 2.8.1
96 209e04a06467e2969c0cc6501335be0406d46ef0 2.8.1
97 ca387377df7a3a67dbb90b6336b781cdadc3ef41 2.8.2
97 ca387377df7a3a67dbb90b6336b781cdadc3ef41 2.8.2
98 8862469e16f9236208581b20de5f96bd13cc039d 2.9-rc
98 8862469e16f9236208581b20de5f96bd13cc039d 2.9-rc
99 3cec5134e9c4bceab6a00c60f52a4f80677a78f2 2.9
99 3cec5134e9c4bceab6a00c60f52a4f80677a78f2 2.9
100 b96cb15ec9e04d8ac5ee08b34fcbbe4200588965 2.9.1
100 b96cb15ec9e04d8ac5ee08b34fcbbe4200588965 2.9.1
101 3f83fc5cfe715d292069ee8417c83804f6c6c1e4 2.9.2
101 3f83fc5cfe715d292069ee8417c83804f6c6c1e4 2.9.2
102 564f55b251224f16508dd1311452db7780dafe2b 3.0-rc
102 564f55b251224f16508dd1311452db7780dafe2b 3.0-rc
103 2195ac506c6ababe86985b932f4948837c0891b5 3.0
103 2195ac506c6ababe86985b932f4948837c0891b5 3.0
104 269c80ee5b3cb3684fa8edc61501b3506d02eb10 3.0.1
104 269c80ee5b3cb3684fa8edc61501b3506d02eb10 3.0.1
105 2d8cd3d0e83c7336c0cb45a9f88638363f993848 3.0.2
105 2d8cd3d0e83c7336c0cb45a9f88638363f993848 3.0.2
106 6c36dc6cd61a0e1b563f1d51e55bdf4dacf12162 3.1-rc
106 6c36dc6cd61a0e1b563f1d51e55bdf4dacf12162 3.1-rc
107 3178e49892020336491cdc6945885c4de26ffa8b 3.1
107 3178e49892020336491cdc6945885c4de26ffa8b 3.1
108 5dc91146f35369949ea56b40172308158b59063a 3.1.1
108 5dc91146f35369949ea56b40172308158b59063a 3.1.1
109 f768c888aaa68d12dd7f509dcc7f01c9584357d0 3.1.2
109 f768c888aaa68d12dd7f509dcc7f01c9584357d0 3.1.2
110 7f8d16af8cae246fa5a48e723d48d58b015aed94 3.2-rc
110 7f8d16af8cae246fa5a48e723d48d58b015aed94 3.2-rc
111 ced632394371a36953ce4d394f86278ae51a2aae 3.2
111 ced632394371a36953ce4d394f86278ae51a2aae 3.2
112 643c58303fb0ec020907af28b9e486be299ba043 3.2.1
112 643c58303fb0ec020907af28b9e486be299ba043 3.2.1
113 902554884335e5ca3661d63be9978eb4aec3f68a 3.2.2
113 902554884335e5ca3661d63be9978eb4aec3f68a 3.2.2
114 6dad422ecc5adb63d9fa649eeb8e05a5f9bc4900 3.2.3
114 6dad422ecc5adb63d9fa649eeb8e05a5f9bc4900 3.2.3
115 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 3.2.4
115 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 3.2.4
116 db8e3f7948b1fdeb9ad12d448fc3525759908b9f 3.3-rc
116 db8e3f7948b1fdeb9ad12d448fc3525759908b9f 3.3-rc
117 fbdd5195528fae4f41feebc1838215c110b25d6a 3.3
117 fbdd5195528fae4f41feebc1838215c110b25d6a 3.3
118 5b4ed033390bf6e2879c8f5c28c84e1ee3b87231 3.3.1
118 5b4ed033390bf6e2879c8f5c28c84e1ee3b87231 3.3.1
119 07a92bbd02e5e3a625e0820389b47786b02b2cea 3.3.2
119 07a92bbd02e5e3a625e0820389b47786b02b2cea 3.3.2
120 2e2e9a0750f91a6fe0ad88e4de34f8efefdcab08 3.3.3
120 2e2e9a0750f91a6fe0ad88e4de34f8efefdcab08 3.3.3
121 e89f909edffad558b56f4affa8239e4832f88de0 3.4-rc
121 e89f909edffad558b56f4affa8239e4832f88de0 3.4-rc
122 8cc6036bca532e06681c5a8fa37efaa812de67b5 3.4
122 8cc6036bca532e06681c5a8fa37efaa812de67b5 3.4
123 ed18f4acf435a2824c6f49fba40f42b9df5da7ad 3.4.1
123 ed18f4acf435a2824c6f49fba40f42b9df5da7ad 3.4.1
124 540cd0ddac49c1125b2e013aa2ff18ecbd4dd954 3.4.2
124 540cd0ddac49c1125b2e013aa2ff18ecbd4dd954 3.4.2
125 96a38d44ba093bd1d1ecfd34119e94056030278b 3.5-rc
125 96a38d44ba093bd1d1ecfd34119e94056030278b 3.5-rc
126 21aa1c313b05b1a85f8ffa1120d51579ddf6bf24 3.5
126 21aa1c313b05b1a85f8ffa1120d51579ddf6bf24 3.5
127 1a45e49a6bed023deb229102a8903234d18054d3 3.5.1
127 1a45e49a6bed023deb229102a8903234d18054d3 3.5.1
128 9a466b9f9792e3ad7ae3fc6c43c3ff2e136b718d 3.5.2
128 9a466b9f9792e3ad7ae3fc6c43c3ff2e136b718d 3.5.2
129 b66e3ca0b90c3095ea28dfd39aa24247bebf5c20 3.6-rc
129 b66e3ca0b90c3095ea28dfd39aa24247bebf5c20 3.6-rc
130 47dd34f2e7272be9e3b2a5a83cd0d20be44293f4 3.6
130 47dd34f2e7272be9e3b2a5a83cd0d20be44293f4 3.6
131 1aa5083cbebbe7575c88f3402ab377539b484897 3.6.1
131 1aa5083cbebbe7575c88f3402ab377539b484897 3.6.1
132 2d437a0f3355834a9485bbbeb30a52a052c98f19 3.6.2
132 2d437a0f3355834a9485bbbeb30a52a052c98f19 3.6.2
133 ea389970c08449440587712117f178d33bab3f1e 3.6.3
133 ea389970c08449440587712117f178d33bab3f1e 3.6.3
134 158bdc8965720ca4061f8f8d806563cfc7cdb62e 3.7-rc
134 158bdc8965720ca4061f8f8d806563cfc7cdb62e 3.7-rc
135 2408645de650d8a29a6ce9e7dce601d8dd0d1474 3.7
135 2408645de650d8a29a6ce9e7dce601d8dd0d1474 3.7
136 b698abf971e7377d9b7ec7fc8c52df45255b0329 3.7.1
136 b698abf971e7377d9b7ec7fc8c52df45255b0329 3.7.1
137 d493d64757eb45ada99fcb3693e479a51b7782da 3.7.2
137 d493d64757eb45ada99fcb3693e479a51b7782da 3.7.2
138 ae279d4a19e9683214cbd1fe8298cf0b50571432 3.7.3
138 ae279d4a19e9683214cbd1fe8298cf0b50571432 3.7.3
139 740156eedf2c450aee58b1a90b0e826f47c5da64 3.8-rc
139 740156eedf2c450aee58b1a90b0e826f47c5da64 3.8-rc
140 f85de28eae32e7d3064b1a1321309071bbaaa069 3.8
140 f85de28eae32e7d3064b1a1321309071bbaaa069 3.8
141 a56296f55a5e1038ea5016dace2076b693c28a56 3.8.1
141 a56296f55a5e1038ea5016dace2076b693c28a56 3.8.1
142 aaabed77791a75968a12b8c43ad263631a23ee81 3.8.2
142 aaabed77791a75968a12b8c43ad263631a23ee81 3.8.2
143 a9764ab80e11bcf6a37255db7dd079011f767c6c 3.8.3
143 a9764ab80e11bcf6a37255db7dd079011f767c6c 3.8.3
144 26a5d605b8683a292bb89aea11f37a81b06ac016 3.8.4
144 26a5d605b8683a292bb89aea11f37a81b06ac016 3.8.4
145 519bb4f9d3a47a6e83c2b414d58811ed38f503c2 3.9-rc
145 519bb4f9d3a47a6e83c2b414d58811ed38f503c2 3.9-rc
146 299546f84e68dbb9bd026f0f3a974ce4bdb93686 3.9
146 299546f84e68dbb9bd026f0f3a974ce4bdb93686 3.9
147 ccd436f7db6d5d7b9af89715179b911d031d44f1 3.9.1
147 ccd436f7db6d5d7b9af89715179b911d031d44f1 3.9.1
148 149433e68974eb5c63ccb03f794d8b57339a80c4 3.9.2
148 149433e68974eb5c63ccb03f794d8b57339a80c4 3.9.2
149 438173c415874f6ac653efc1099dec9c9150e90f 4.0-rc
149 438173c415874f6ac653efc1099dec9c9150e90f 4.0-rc
150 eab27446995210c334c3d06f1a659e3b9b5da769 4.0
150 eab27446995210c334c3d06f1a659e3b9b5da769 4.0
151 b3b1ae98f6a0e14c1e1ba806a6c18e193b6dae5c 4.0.1
151 b3b1ae98f6a0e14c1e1ba806a6c18e193b6dae5c 4.0.1
152 e69874dc1f4e142746ff3df91e678a09c6fc208c 4.0.2
152 e69874dc1f4e142746ff3df91e678a09c6fc208c 4.0.2
153 a1dd2c0c479e0550040542e392e87bc91262517e 4.1-rc
153 a1dd2c0c479e0550040542e392e87bc91262517e 4.1-rc
154 e1526da1e6d84e03146151c9b6e6950fe9a83d7d 4.1
154 e1526da1e6d84e03146151c9b6e6950fe9a83d7d 4.1
155 25703b624d27e3917d978af56d6ad59331e0464a 4.1.1
155 25703b624d27e3917d978af56d6ad59331e0464a 4.1.1
156 ed5b25874d998ababb181a939dd37a16ea644435 4.1.2
156 ed5b25874d998ababb181a939dd37a16ea644435 4.1.2
157 77eaf9539499a1b8be259ffe7ada787d07857f80 4.1.3
157 77eaf9539499a1b8be259ffe7ada787d07857f80 4.1.3
158 616e788321cc4ae9975b7f0c54c849f36d82182b 4.2-rc
158 616e788321cc4ae9975b7f0c54c849f36d82182b 4.2-rc
159 bb96d4a497432722623ae60d9bc734a1e360179e 4.2
159 bb96d4a497432722623ae60d9bc734a1e360179e 4.2
160 c850f0ed54c1d42f9aa079ad528f8127e5775217 4.2.1
160 c850f0ed54c1d42f9aa079ad528f8127e5775217 4.2.1
161 26c49ed51a698ec016d2b4c6b44ca3c3f73cc788 4.2.2
161 26c49ed51a698ec016d2b4c6b44ca3c3f73cc788 4.2.2
162 857876ebaed4e315f63157bd157d6ce553c7ab73 4.3-rc
162 857876ebaed4e315f63157bd157d6ce553c7ab73 4.3-rc
163 5544af8622863796a0027566f6b646e10d522c4c 4.3
163 5544af8622863796a0027566f6b646e10d522c4c 4.3
164 943c91326b23954e6e1c6960d0239511f9530258 4.2.3
164 943c91326b23954e6e1c6960d0239511f9530258 4.2.3
165 3fee7f7d2da04226914c2258cc2884dc27384fd7 4.3.1
165 3fee7f7d2da04226914c2258cc2884dc27384fd7 4.3.1
166 920977f72c7b70acfdaf56ab35360584d7845827 4.3.2
166 920977f72c7b70acfdaf56ab35360584d7845827 4.3.2
167 2f427b57bf9019c6dc3750baa539dc22c1be50f6 4.3.3
167 2f427b57bf9019c6dc3750baa539dc22c1be50f6 4.3.3
168 1e2454b60e5936f5e77498cab2648db469504487 4.4-rc
168 1e2454b60e5936f5e77498cab2648db469504487 4.4-rc
169 0ccb43d4cf01d013ae05917ec4f305509f851b2d 4.4
169 0ccb43d4cf01d013ae05917ec4f305509f851b2d 4.4
170 cabc840ffdee8a72f3689fb77dd74d04fdc2bc04 4.4.1
170 cabc840ffdee8a72f3689fb77dd74d04fdc2bc04 4.4.1
171 a92b9f8e11ba330614cdfd6af0e03b15c1ff3797 4.4.2
171 a92b9f8e11ba330614cdfd6af0e03b15c1ff3797 4.4.2
172 27b6df1b5adbdf647cf5c6675b40575e1b197c60 4.5-rc
172 27b6df1b5adbdf647cf5c6675b40575e1b197c60 4.5-rc
173 d334afc585e29577f271c5eda03378736a16ca6b 4.5
173 d334afc585e29577f271c5eda03378736a16ca6b 4.5
174 369aadf7a3264b03c8b09efce715bc41e6ab4a9b 4.5.1
174 369aadf7a3264b03c8b09efce715bc41e6ab4a9b 4.5.1
175 8bba684efde7f45add05f737952093bb2aa07155 4.5.2
175 8bba684efde7f45add05f737952093bb2aa07155 4.5.2
176 7de7bd407251af2bc98e5b809c8598ee95830daf 4.5.3
176 7de7bd407251af2bc98e5b809c8598ee95830daf 4.5.3
177 ed5448edcbfa747b9154099e18630e49024fd47b 4.6rc0
177 ed5448edcbfa747b9154099e18630e49024fd47b 4.6rc0
178 1ec874717d8a93b19e0d50628443e0ee5efab3a9 4.6rc1
178 1ec874717d8a93b19e0d50628443e0ee5efab3a9 4.6rc1
179 6614cac550aea66d19c601e45efd1b7bd08d7c40 4.6
179 6614cac550aea66d19c601e45efd1b7bd08d7c40 4.6
180 9c5ced5276d6e7d54f7c3dadf5247b7ee98ec79c 4.6.1
180 9c5ced5276d6e7d54f7c3dadf5247b7ee98ec79c 4.6.1
181 0b63a6743010dfdbf8a8154186e119949bdaa1cc 4.6.2
181 0b63a6743010dfdbf8a8154186e119949bdaa1cc 4.6.2
182 e90130af47ce8dd53a3109aed9d15876b3e7dee8 4.7rc0
182 e90130af47ce8dd53a3109aed9d15876b3e7dee8 4.7rc0
183 33ac6a72308a215e6086fbced347ec10aa963b0a 4.7
183 33ac6a72308a215e6086fbced347ec10aa963b0a 4.7
184 ede3bf31fe63677fdf5bd8db687977d4e3d792ed 4.7.1
184 ede3bf31fe63677fdf5bd8db687977d4e3d792ed 4.7.1
185 5405cb1a79010ac50c58cd84e6f50c4556bf2a4c 4.7.2
185 5405cb1a79010ac50c58cd84e6f50c4556bf2a4c 4.7.2
186 956ec6f1320df26f3133ec40f3de866ea0695fd7 4.8rc0
186 956ec6f1320df26f3133ec40f3de866ea0695fd7 4.8rc0
187 a91a2837150bdcb27ae76b3646e6c93cd6a15904 4.8
187 a91a2837150bdcb27ae76b3646e6c93cd6a15904 4.8
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
191 83377b4b4ae0e9a6b8e579f7b0a693b8cf5c3b10 4.9
192 4ea21df312ec7159c5b3633096b6ecf68750b0dd 4.9.1
192 4ea21df312ec7159c5b3633096b6ecf68750b0dd 4.9.1
193 4a8d9ed864754837a185a642170cde24392f9abf 5.0rc0
193 4a8d9ed864754837a185a642170cde24392f9abf 5.0rc0
194 07e479ef7c9639be0029f00e6a722b96dcc05fee 5.0
194 07e479ef7c9639be0029f00e6a722b96dcc05fee 5.0
195 c3484ddbdb9621256d597ed86b90d229c59c2af9 5.0.1
195 c3484ddbdb9621256d597ed86b90d229c59c2af9 5.0.1
196 97ada9b8d51bef24c5cb4cdca4243f0db694ab6e 5.0.2
196 97ada9b8d51bef24c5cb4cdca4243f0db694ab6e 5.0.2
197 e386b5f4f8360dbb43a576dd9b1368e386fefa5b 5.1rc0
197 e386b5f4f8360dbb43a576dd9b1368e386fefa5b 5.1rc0
198 e91930d712e8507d1bc1b2dffd96c83edc4cbed3 5.1
198 e91930d712e8507d1bc1b2dffd96c83edc4cbed3 5.1
199 a4e32fd539ab41489a51b2aa88bda9a73b839562 5.1.1
199 a4e32fd539ab41489a51b2aa88bda9a73b839562 5.1.1
200 181e52f2b62f4768aa0d988936c929dc7c4a41a0 5.1.2
200 181e52f2b62f4768aa0d988936c929dc7c4a41a0 5.1.2
201 59338f9561099de77c684c00f76507f11e46ebe8 5.2rc0
201 59338f9561099de77c684c00f76507f11e46ebe8 5.2rc0
202 ca3dca416f8d5863ca6f5a4a6a6bb835dcd5feeb 5.2
202 ca3dca416f8d5863ca6f5a4a6a6bb835dcd5feeb 5.2
203 a50fecefa691c9b72a99e49aa6fe9dd13943c2bf 5.2.1
203 a50fecefa691c9b72a99e49aa6fe9dd13943c2bf 5.2.1
204 b4c82b70418022e67cc0e69b1aa3c3aa43aa1d29 5.2.2
204 b4c82b70418022e67cc0e69b1aa3c3aa43aa1d29 5.2.2
205 84a0102c05c7852c8215ef6cf21d809927586b69 5.3rc0
205 84a0102c05c7852c8215ef6cf21d809927586b69 5.3rc0
206 e4344e463c0c888a2f437b78b5982ecdf3f6650a 5.3rc1
206 e4344e463c0c888a2f437b78b5982ecdf3f6650a 5.3rc1
207 7f5410dfc8a64bb587d19637deb95d378fd1eb5c 5.3
207 7f5410dfc8a64bb587d19637deb95d378fd1eb5c 5.3
208 6d121acbb82e65fe4dd3c2318a1b61981b958492 5.3.1
208 6d121acbb82e65fe4dd3c2318a1b61981b958492 5.3.1
209 8fca7e8449a847e3cf1054f2c07b51237699fad3 5.3.2
209 8fca7e8449a847e3cf1054f2c07b51237699fad3 5.3.2
210 26ce8e7515036d3431a03aaeb7bc72dd96cb1112 5.4rc0
210 26ce8e7515036d3431a03aaeb7bc72dd96cb1112 5.4rc0
211 cf3e07d7648a4371ce584d15dd692e7a6845792f 5.4
211 cf3e07d7648a4371ce584d15dd692e7a6845792f 5.4
212 065704cbdbdbb05dcd6bb814eb9bbdd982211b28 5.4.1
212 065704cbdbdbb05dcd6bb814eb9bbdd982211b28 5.4.1
213 0ea9c86fac8974cd74dc12ea681c8986eb6da6c4 5.4.2
213 0ea9c86fac8974cd74dc12ea681c8986eb6da6c4 5.4.2
214 28163c5de797e5416f9b588940f4608269b4d50a 5.5rc0
214 28163c5de797e5416f9b588940f4608269b4d50a 5.5rc0
215 7fc3c5fbc65f6fe85d70ea63923b8767dda4f2e0 5.5
215 7fc3c5fbc65f6fe85d70ea63923b8767dda4f2e0 5.5
216 f62bb5d07848ca598aa860a517394130b61bf2ee 5.5.1
216 f62bb5d07848ca598aa860a517394130b61bf2ee 5.5.1
217 07731064ac41dacdf0ec869ebd05c2e848c14fbf 5.5.2
217 07731064ac41dacdf0ec869ebd05c2e848c14fbf 5.5.2
218 0e06a7ab9e0d5c65af4e511aee1e0342998799df 5.6rc0
218 0e06a7ab9e0d5c65af4e511aee1e0342998799df 5.6rc0
219 18c17d63fdabd009e70bf994e5efb7db422f4f7f 5.6
219 18c17d63fdabd009e70bf994e5efb7db422f4f7f 5.6
220 1d5189a57405ceca5aa244052c9f948977f4699b 5.6.1
220 1d5189a57405ceca5aa244052c9f948977f4699b 5.6.1
221 9da65e3cf3706ff41e08b311381c588440c27baf 5.7rc0
221 9da65e3cf3706ff41e08b311381c588440c27baf 5.7rc0
222 0e2e7300f4302b02412b0b734717697049494c4c 5.7
222 0e2e7300f4302b02412b0b734717697049494c4c 5.7
223 d5d9177c0045d206db575bae6daa98e2cb2fe5bc 5.7.1
223 d5d9177c0045d206db575bae6daa98e2cb2fe5bc 5.7.1
224 f67b8946bb1b6cfa8328dbf8d6a9128b69ccdcb4 5.8rc0
224 f67b8946bb1b6cfa8328dbf8d6a9128b69ccdcb4 5.8rc0
225 8d2b62d716b095507effaa8d56f87cd27ba659ab 5.8rc1
225 8d2b62d716b095507effaa8d56f87cd27ba659ab 5.8rc1
226 067f2c53fb24506c9e9fb4639871b13b19a85f8a 5.8
226 067f2c53fb24506c9e9fb4639871b13b19a85f8a 5.8
227 411dc27fd9fd076d6a031a08fcaace659afe2fe3 5.8.1
227 411dc27fd9fd076d6a031a08fcaace659afe2fe3 5.8.1
228 d7515d29761d5ada7d9c765f517db67db75dea9a 5.9rc0
228 d7515d29761d5ada7d9c765f517db67db75dea9a 5.9rc0
229 2813d406b03607cdb8c06cb04c44efcc9a79d9a2 5.9rc1
229 2813d406b03607cdb8c06cb04c44efcc9a79d9a2 5.9rc1
230 53221078e0de65d1a821ce5311dec45a7a978301 5.9
230 53221078e0de65d1a821ce5311dec45a7a978301 5.9
231 86a60679cf619e14cee9442f865fcf31b142cb9f 5.9.1
231 86a60679cf619e14cee9442f865fcf31b142cb9f 5.9.1
232 750920b18aaaddd654756be40dec59d90f2643be 5.9.2
232 750920b18aaaddd654756be40dec59d90f2643be 5.9.2
233 6ee0244fc1cf889ae543d2ce0ec45201ae0be6e1 5.9.3
233 6ee0244fc1cf889ae543d2ce0ec45201ae0be6e1 5.9.3
234 a44bb185f6bdbecc754996d8386722e2f0123b0a 6.0rc0
234 a44bb185f6bdbecc754996d8386722e2f0123b0a 6.0rc0
235 5d08b289e2e526259d7d5ea32b70fe76d5b327d7 6.0
235 5d08b289e2e526259d7d5ea32b70fe76d5b327d7 6.0
236 799fdf4cca80cb9ae40537a90995e6bd163ebc0b 6.0.1
236 799fdf4cca80cb9ae40537a90995e6bd163ebc0b 6.0.1
237 75676122c2bf7594ac732b7388db4c74c648b365 6.0.2
237 75676122c2bf7594ac732b7388db4c74c648b365 6.0.2
238 dcec16e799ddb6d33fcd11b04af530250a417a58 6.0.3
238 dcec16e799ddb6d33fcd11b04af530250a417a58 6.0.3
239 c00d3ce4e94bb0ee8d809e25e1dcb2a5fab84e2c 6.1rc0
239 c00d3ce4e94bb0ee8d809e25e1dcb2a5fab84e2c 6.1rc0
240 d4486810a1795fba9521449b8885ced034f3a6dd 6.1
240 d4486810a1795fba9521449b8885ced034f3a6dd 6.1
241 5bd6bcd31dd1ebb63b8914b00064f96297267af7 6.1.1
241 5bd6bcd31dd1ebb63b8914b00064f96297267af7 6.1.1
242 0ddd5e1f5f67438af85d12e4ce6c39021dde9916 6.1.2
@@ -1,3995 +1,3995 b''
1 # cmdutil.py - help for command processing in mercurial
1 # cmdutil.py - help for command processing in mercurial
2 #
2 #
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8
8
9 import copy as copymod
9 import copy as copymod
10 import errno
10 import errno
11 import os
11 import os
12 import re
12 import re
13
13
14 from .i18n import _
14 from .i18n import _
15 from .node import (
15 from .node import (
16 hex,
16 hex,
17 nullrev,
17 nullrev,
18 short,
18 short,
19 )
19 )
20 from .pycompat import (
20 from .pycompat import (
21 getattr,
21 getattr,
22 open,
22 open,
23 setattr,
23 setattr,
24 )
24 )
25 from .thirdparty import attr
25 from .thirdparty import attr
26
26
27 from . import (
27 from . import (
28 bookmarks,
28 bookmarks,
29 changelog,
29 changelog,
30 copies,
30 copies,
31 crecord as crecordmod,
31 crecord as crecordmod,
32 dirstateguard,
32 dirstateguard,
33 encoding,
33 encoding,
34 error,
34 error,
35 formatter,
35 formatter,
36 logcmdutil,
36 logcmdutil,
37 match as matchmod,
37 match as matchmod,
38 merge as mergemod,
38 merge as mergemod,
39 mergestate as mergestatemod,
39 mergestate as mergestatemod,
40 mergeutil,
40 mergeutil,
41 obsolete,
41 obsolete,
42 patch,
42 patch,
43 pathutil,
43 pathutil,
44 phases,
44 phases,
45 pycompat,
45 pycompat,
46 repair,
46 repair,
47 revlog,
47 revlog,
48 rewriteutil,
48 rewriteutil,
49 scmutil,
49 scmutil,
50 state as statemod,
50 state as statemod,
51 subrepoutil,
51 subrepoutil,
52 templatekw,
52 templatekw,
53 templater,
53 templater,
54 util,
54 util,
55 vfs as vfsmod,
55 vfs as vfsmod,
56 )
56 )
57
57
58 from .utils import (
58 from .utils import (
59 dateutil,
59 dateutil,
60 stringutil,
60 stringutil,
61 )
61 )
62
62
63 from .revlogutils import (
63 from .revlogutils import (
64 constants as revlog_constants,
64 constants as revlog_constants,
65 )
65 )
66
66
67 if pycompat.TYPE_CHECKING:
67 if pycompat.TYPE_CHECKING:
68 from typing import (
68 from typing import (
69 Any,
69 Any,
70 Dict,
70 Dict,
71 )
71 )
72
72
73 for t in (Any, Dict):
73 for t in (Any, Dict):
74 assert t
74 assert t
75
75
76 stringio = util.stringio
76 stringio = util.stringio
77
77
78 # templates of common command options
78 # templates of common command options
79
79
80 dryrunopts = [
80 dryrunopts = [
81 (b'n', b'dry-run', None, _(b'do not perform actions, just print output')),
81 (b'n', b'dry-run', None, _(b'do not perform actions, just print output')),
82 ]
82 ]
83
83
84 confirmopts = [
84 confirmopts = [
85 (b'', b'confirm', None, _(b'ask before applying actions')),
85 (b'', b'confirm', None, _(b'ask before applying actions')),
86 ]
86 ]
87
87
88 remoteopts = [
88 remoteopts = [
89 (b'e', b'ssh', b'', _(b'specify ssh command to use'), _(b'CMD')),
89 (b'e', b'ssh', b'', _(b'specify ssh command to use'), _(b'CMD')),
90 (
90 (
91 b'',
91 b'',
92 b'remotecmd',
92 b'remotecmd',
93 b'',
93 b'',
94 _(b'specify hg command to run on the remote side'),
94 _(b'specify hg command to run on the remote side'),
95 _(b'CMD'),
95 _(b'CMD'),
96 ),
96 ),
97 (
97 (
98 b'',
98 b'',
99 b'insecure',
99 b'insecure',
100 None,
100 None,
101 _(b'do not verify server certificate (ignoring web.cacerts config)'),
101 _(b'do not verify server certificate (ignoring web.cacerts config)'),
102 ),
102 ),
103 ]
103 ]
104
104
105 walkopts = [
105 walkopts = [
106 (
106 (
107 b'I',
107 b'I',
108 b'include',
108 b'include',
109 [],
109 [],
110 _(b'include names matching the given patterns'),
110 _(b'include names matching the given patterns'),
111 _(b'PATTERN'),
111 _(b'PATTERN'),
112 ),
112 ),
113 (
113 (
114 b'X',
114 b'X',
115 b'exclude',
115 b'exclude',
116 [],
116 [],
117 _(b'exclude names matching the given patterns'),
117 _(b'exclude names matching the given patterns'),
118 _(b'PATTERN'),
118 _(b'PATTERN'),
119 ),
119 ),
120 ]
120 ]
121
121
122 commitopts = [
122 commitopts = [
123 (b'm', b'message', b'', _(b'use text as commit message'), _(b'TEXT')),
123 (b'm', b'message', b'', _(b'use text as commit message'), _(b'TEXT')),
124 (b'l', b'logfile', b'', _(b'read commit message from file'), _(b'FILE')),
124 (b'l', b'logfile', b'', _(b'read commit message from file'), _(b'FILE')),
125 ]
125 ]
126
126
127 commitopts2 = [
127 commitopts2 = [
128 (
128 (
129 b'd',
129 b'd',
130 b'date',
130 b'date',
131 b'',
131 b'',
132 _(b'record the specified date as commit date'),
132 _(b'record the specified date as commit date'),
133 _(b'DATE'),
133 _(b'DATE'),
134 ),
134 ),
135 (
135 (
136 b'u',
136 b'u',
137 b'user',
137 b'user',
138 b'',
138 b'',
139 _(b'record the specified user as committer'),
139 _(b'record the specified user as committer'),
140 _(b'USER'),
140 _(b'USER'),
141 ),
141 ),
142 ]
142 ]
143
143
144 commitopts3 = [
144 commitopts3 = [
145 (b'D', b'currentdate', None, _(b'record the current date as commit date')),
145 (b'D', b'currentdate', None, _(b'record the current date as commit date')),
146 (b'U', b'currentuser', None, _(b'record the current user as committer')),
146 (b'U', b'currentuser', None, _(b'record the current user as committer')),
147 ]
147 ]
148
148
149 formatteropts = [
149 formatteropts = [
150 (b'T', b'template', b'', _(b'display with template'), _(b'TEMPLATE')),
150 (b'T', b'template', b'', _(b'display with template'), _(b'TEMPLATE')),
151 ]
151 ]
152
152
153 templateopts = [
153 templateopts = [
154 (
154 (
155 b'',
155 b'',
156 b'style',
156 b'style',
157 b'',
157 b'',
158 _(b'display using template map file (DEPRECATED)'),
158 _(b'display using template map file (DEPRECATED)'),
159 _(b'STYLE'),
159 _(b'STYLE'),
160 ),
160 ),
161 (b'T', b'template', b'', _(b'display with template'), _(b'TEMPLATE')),
161 (b'T', b'template', b'', _(b'display with template'), _(b'TEMPLATE')),
162 ]
162 ]
163
163
164 logopts = [
164 logopts = [
165 (b'p', b'patch', None, _(b'show patch')),
165 (b'p', b'patch', None, _(b'show patch')),
166 (b'g', b'git', None, _(b'use git extended diff format')),
166 (b'g', b'git', None, _(b'use git extended diff format')),
167 (b'l', b'limit', b'', _(b'limit number of changes displayed'), _(b'NUM')),
167 (b'l', b'limit', b'', _(b'limit number of changes displayed'), _(b'NUM')),
168 (b'M', b'no-merges', None, _(b'do not show merges')),
168 (b'M', b'no-merges', None, _(b'do not show merges')),
169 (b'', b'stat', None, _(b'output diffstat-style summary of changes')),
169 (b'', b'stat', None, _(b'output diffstat-style summary of changes')),
170 (b'G', b'graph', None, _(b"show the revision DAG")),
170 (b'G', b'graph', None, _(b"show the revision DAG")),
171 ] + templateopts
171 ] + templateopts
172
172
173 diffopts = [
173 diffopts = [
174 (b'a', b'text', None, _(b'treat all files as text')),
174 (b'a', b'text', None, _(b'treat all files as text')),
175 (
175 (
176 b'g',
176 b'g',
177 b'git',
177 b'git',
178 None,
178 None,
179 _(b'use git extended diff format (DEFAULT: diff.git)'),
179 _(b'use git extended diff format (DEFAULT: diff.git)'),
180 ),
180 ),
181 (b'', b'binary', None, _(b'generate binary diffs in git mode (default)')),
181 (b'', b'binary', None, _(b'generate binary diffs in git mode (default)')),
182 (b'', b'nodates', None, _(b'omit dates from diff headers')),
182 (b'', b'nodates', None, _(b'omit dates from diff headers')),
183 ]
183 ]
184
184
185 diffwsopts = [
185 diffwsopts = [
186 (
186 (
187 b'w',
187 b'w',
188 b'ignore-all-space',
188 b'ignore-all-space',
189 None,
189 None,
190 _(b'ignore white space when comparing lines'),
190 _(b'ignore white space when comparing lines'),
191 ),
191 ),
192 (
192 (
193 b'b',
193 b'b',
194 b'ignore-space-change',
194 b'ignore-space-change',
195 None,
195 None,
196 _(b'ignore changes in the amount of white space'),
196 _(b'ignore changes in the amount of white space'),
197 ),
197 ),
198 (
198 (
199 b'B',
199 b'B',
200 b'ignore-blank-lines',
200 b'ignore-blank-lines',
201 None,
201 None,
202 _(b'ignore changes whose lines are all blank'),
202 _(b'ignore changes whose lines are all blank'),
203 ),
203 ),
204 (
204 (
205 b'Z',
205 b'Z',
206 b'ignore-space-at-eol',
206 b'ignore-space-at-eol',
207 None,
207 None,
208 _(b'ignore changes in whitespace at EOL'),
208 _(b'ignore changes in whitespace at EOL'),
209 ),
209 ),
210 ]
210 ]
211
211
212 diffopts2 = (
212 diffopts2 = (
213 [
213 [
214 (b'', b'noprefix', None, _(b'omit a/ and b/ prefixes from filenames')),
214 (b'', b'noprefix', None, _(b'omit a/ and b/ prefixes from filenames')),
215 (
215 (
216 b'p',
216 b'p',
217 b'show-function',
217 b'show-function',
218 None,
218 None,
219 _(
219 _(
220 b'show which function each change is in (DEFAULT: diff.showfunc)'
220 b'show which function each change is in (DEFAULT: diff.showfunc)'
221 ),
221 ),
222 ),
222 ),
223 (b'', b'reverse', None, _(b'produce a diff that undoes the changes')),
223 (b'', b'reverse', None, _(b'produce a diff that undoes the changes')),
224 ]
224 ]
225 + diffwsopts
225 + diffwsopts
226 + [
226 + [
227 (
227 (
228 b'U',
228 b'U',
229 b'unified',
229 b'unified',
230 b'',
230 b'',
231 _(b'number of lines of context to show'),
231 _(b'number of lines of context to show'),
232 _(b'NUM'),
232 _(b'NUM'),
233 ),
233 ),
234 (b'', b'stat', None, _(b'output diffstat-style summary of changes')),
234 (b'', b'stat', None, _(b'output diffstat-style summary of changes')),
235 (
235 (
236 b'',
236 b'',
237 b'root',
237 b'root',
238 b'',
238 b'',
239 _(b'produce diffs relative to subdirectory'),
239 _(b'produce diffs relative to subdirectory'),
240 _(b'DIR'),
240 _(b'DIR'),
241 ),
241 ),
242 ]
242 ]
243 )
243 )
244
244
245 mergetoolopts = [
245 mergetoolopts = [
246 (b't', b'tool', b'', _(b'specify merge tool'), _(b'TOOL')),
246 (b't', b'tool', b'', _(b'specify merge tool'), _(b'TOOL')),
247 ]
247 ]
248
248
249 similarityopts = [
249 similarityopts = [
250 (
250 (
251 b's',
251 b's',
252 b'similarity',
252 b'similarity',
253 b'',
253 b'',
254 _(b'guess renamed files by similarity (0<=s<=100)'),
254 _(b'guess renamed files by similarity (0<=s<=100)'),
255 _(b'SIMILARITY'),
255 _(b'SIMILARITY'),
256 )
256 )
257 ]
257 ]
258
258
259 subrepoopts = [(b'S', b'subrepos', None, _(b'recurse into subrepositories'))]
259 subrepoopts = [(b'S', b'subrepos', None, _(b'recurse into subrepositories'))]
260
260
261 debugrevlogopts = [
261 debugrevlogopts = [
262 (b'c', b'changelog', False, _(b'open changelog')),
262 (b'c', b'changelog', False, _(b'open changelog')),
263 (b'm', b'manifest', False, _(b'open manifest')),
263 (b'm', b'manifest', False, _(b'open manifest')),
264 (b'', b'dir', b'', _(b'open directory manifest')),
264 (b'', b'dir', b'', _(b'open directory manifest')),
265 ]
265 ]
266
266
267 # special string such that everything below this line will be ingored in the
267 # special string such that everything below this line will be ingored in the
268 # editor text
268 # editor text
269 _linebelow = b"^HG: ------------------------ >8 ------------------------$"
269 _linebelow = b"^HG: ------------------------ >8 ------------------------$"
270
270
271
271
272 def check_at_most_one_arg(opts, *args):
272 def check_at_most_one_arg(opts, *args):
273 """abort if more than one of the arguments are in opts
273 """abort if more than one of the arguments are in opts
274
274
275 Returns the unique argument or None if none of them were specified.
275 Returns the unique argument or None if none of them were specified.
276 """
276 """
277
277
278 def to_display(name):
278 def to_display(name):
279 return pycompat.sysbytes(name).replace(b'_', b'-')
279 return pycompat.sysbytes(name).replace(b'_', b'-')
280
280
281 previous = None
281 previous = None
282 for x in args:
282 for x in args:
283 if opts.get(x):
283 if opts.get(x):
284 if previous:
284 if previous:
285 raise error.InputError(
285 raise error.InputError(
286 _(b'cannot specify both --%s and --%s')
286 _(b'cannot specify both --%s and --%s')
287 % (to_display(previous), to_display(x))
287 % (to_display(previous), to_display(x))
288 )
288 )
289 previous = x
289 previous = x
290 return previous
290 return previous
291
291
292
292
293 def check_incompatible_arguments(opts, first, others):
293 def check_incompatible_arguments(opts, first, others):
294 """abort if the first argument is given along with any of the others
294 """abort if the first argument is given along with any of the others
295
295
296 Unlike check_at_most_one_arg(), `others` are not mutually exclusive
296 Unlike check_at_most_one_arg(), `others` are not mutually exclusive
297 among themselves, and they're passed as a single collection.
297 among themselves, and they're passed as a single collection.
298 """
298 """
299 for other in others:
299 for other in others:
300 check_at_most_one_arg(opts, first, other)
300 check_at_most_one_arg(opts, first, other)
301
301
302
302
303 def resolve_commit_options(ui, opts):
303 def resolve_commit_options(ui, opts):
304 """modify commit options dict to handle related options
304 """modify commit options dict to handle related options
305
305
306 The return value indicates that ``rewrite.update-timestamp`` is the reason
306 The return value indicates that ``rewrite.update-timestamp`` is the reason
307 the ``date`` option is set.
307 the ``date`` option is set.
308 """
308 """
309 check_at_most_one_arg(opts, 'date', 'currentdate')
309 check_at_most_one_arg(opts, 'date', 'currentdate')
310 check_at_most_one_arg(opts, 'user', 'currentuser')
310 check_at_most_one_arg(opts, 'user', 'currentuser')
311
311
312 datemaydiffer = False # date-only change should be ignored?
312 datemaydiffer = False # date-only change should be ignored?
313
313
314 if opts.get('currentdate'):
314 if opts.get('currentdate'):
315 opts['date'] = b'%d %d' % dateutil.makedate()
315 opts['date'] = b'%d %d' % dateutil.makedate()
316 elif (
316 elif (
317 not opts.get('date')
317 not opts.get('date')
318 and ui.configbool(b'rewrite', b'update-timestamp')
318 and ui.configbool(b'rewrite', b'update-timestamp')
319 and opts.get('currentdate') is None
319 and opts.get('currentdate') is None
320 ):
320 ):
321 opts['date'] = b'%d %d' % dateutil.makedate()
321 opts['date'] = b'%d %d' % dateutil.makedate()
322 datemaydiffer = True
322 datemaydiffer = True
323
323
324 if opts.get('currentuser'):
324 if opts.get('currentuser'):
325 opts['user'] = ui.username()
325 opts['user'] = ui.username()
326
326
327 return datemaydiffer
327 return datemaydiffer
328
328
329
329
330 def check_note_size(opts):
330 def check_note_size(opts):
331 """make sure note is of valid format"""
331 """make sure note is of valid format"""
332
332
333 note = opts.get('note')
333 note = opts.get('note')
334 if not note:
334 if not note:
335 return
335 return
336
336
337 if len(note) > 255:
337 if len(note) > 255:
338 raise error.InputError(_(b"cannot store a note of more than 255 bytes"))
338 raise error.InputError(_(b"cannot store a note of more than 255 bytes"))
339 if b'\n' in note:
339 if b'\n' in note:
340 raise error.InputError(_(b"note cannot contain a newline"))
340 raise error.InputError(_(b"note cannot contain a newline"))
341
341
342
342
343 def ishunk(x):
343 def ishunk(x):
344 hunkclasses = (crecordmod.uihunk, patch.recordhunk)
344 hunkclasses = (crecordmod.uihunk, patch.recordhunk)
345 return isinstance(x, hunkclasses)
345 return isinstance(x, hunkclasses)
346
346
347
347
348 def isheader(x):
348 def isheader(x):
349 headerclasses = (crecordmod.uiheader, patch.header)
349 headerclasses = (crecordmod.uiheader, patch.header)
350 return isinstance(x, headerclasses)
350 return isinstance(x, headerclasses)
351
351
352
352
353 def newandmodified(chunks):
353 def newandmodified(chunks):
354 newlyaddedandmodifiedfiles = set()
354 newlyaddedandmodifiedfiles = set()
355 alsorestore = set()
355 alsorestore = set()
356 for chunk in chunks:
356 for chunk in chunks:
357 if isheader(chunk) and chunk.isnewfile():
357 if isheader(chunk) and chunk.isnewfile():
358 newlyaddedandmodifiedfiles.add(chunk.filename())
358 newlyaddedandmodifiedfiles.add(chunk.filename())
359 alsorestore.update(set(chunk.files()) - {chunk.filename()})
359 alsorestore.update(set(chunk.files()) - {chunk.filename()})
360 return newlyaddedandmodifiedfiles, alsorestore
360 return newlyaddedandmodifiedfiles, alsorestore
361
361
362
362
363 def parsealiases(cmd):
363 def parsealiases(cmd):
364 base_aliases = cmd.split(b"|")
364 base_aliases = cmd.split(b"|")
365 all_aliases = set(base_aliases)
365 all_aliases = set(base_aliases)
366 extra_aliases = []
366 extra_aliases = []
367 for alias in base_aliases:
367 for alias in base_aliases:
368 if b'-' in alias:
368 if b'-' in alias:
369 folded_alias = alias.replace(b'-', b'')
369 folded_alias = alias.replace(b'-', b'')
370 if folded_alias not in all_aliases:
370 if folded_alias not in all_aliases:
371 all_aliases.add(folded_alias)
371 all_aliases.add(folded_alias)
372 extra_aliases.append(folded_alias)
372 extra_aliases.append(folded_alias)
373 base_aliases.extend(extra_aliases)
373 base_aliases.extend(extra_aliases)
374 return base_aliases
374 return base_aliases
375
375
376
376
377 def setupwrapcolorwrite(ui):
377 def setupwrapcolorwrite(ui):
378 # wrap ui.write so diff output can be labeled/colorized
378 # wrap ui.write so diff output can be labeled/colorized
379 def wrapwrite(orig, *args, **kw):
379 def wrapwrite(orig, *args, **kw):
380 label = kw.pop('label', b'')
380 label = kw.pop('label', b'')
381 for chunk, l in patch.difflabel(lambda: args):
381 for chunk, l in patch.difflabel(lambda: args):
382 orig(chunk, label=label + l)
382 orig(chunk, label=label + l)
383
383
384 oldwrite = ui.write
384 oldwrite = ui.write
385
385
386 def wrap(*args, **kwargs):
386 def wrap(*args, **kwargs):
387 return wrapwrite(oldwrite, *args, **kwargs)
387 return wrapwrite(oldwrite, *args, **kwargs)
388
388
389 setattr(ui, 'write', wrap)
389 setattr(ui, 'write', wrap)
390 return oldwrite
390 return oldwrite
391
391
392
392
393 def filterchunks(ui, originalhunks, usecurses, testfile, match, operation=None):
393 def filterchunks(ui, originalhunks, usecurses, testfile, match, operation=None):
394 try:
394 try:
395 if usecurses:
395 if usecurses:
396 if testfile:
396 if testfile:
397 recordfn = crecordmod.testdecorator(
397 recordfn = crecordmod.testdecorator(
398 testfile, crecordmod.testchunkselector
398 testfile, crecordmod.testchunkselector
399 )
399 )
400 else:
400 else:
401 recordfn = crecordmod.chunkselector
401 recordfn = crecordmod.chunkselector
402
402
403 return crecordmod.filterpatch(
403 return crecordmod.filterpatch(
404 ui, originalhunks, recordfn, operation
404 ui, originalhunks, recordfn, operation
405 )
405 )
406 except crecordmod.fallbackerror as e:
406 except crecordmod.fallbackerror as e:
407 ui.warn(b'%s\n' % e)
407 ui.warn(b'%s\n' % e)
408 ui.warn(_(b'falling back to text mode\n'))
408 ui.warn(_(b'falling back to text mode\n'))
409
409
410 return patch.filterpatch(ui, originalhunks, match, operation)
410 return patch.filterpatch(ui, originalhunks, match, operation)
411
411
412
412
413 def recordfilter(ui, originalhunks, match, operation=None):
413 def recordfilter(ui, originalhunks, match, operation=None):
414 """Prompts the user to filter the originalhunks and return a list of
414 """Prompts the user to filter the originalhunks and return a list of
415 selected hunks.
415 selected hunks.
416 *operation* is used for to build ui messages to indicate the user what
416 *operation* is used for to build ui messages to indicate the user what
417 kind of filtering they are doing: reverting, committing, shelving, etc.
417 kind of filtering they are doing: reverting, committing, shelving, etc.
418 (see patch.filterpatch).
418 (see patch.filterpatch).
419 """
419 """
420 usecurses = crecordmod.checkcurses(ui)
420 usecurses = crecordmod.checkcurses(ui)
421 testfile = ui.config(b'experimental', b'crecordtest')
421 testfile = ui.config(b'experimental', b'crecordtest')
422 oldwrite = setupwrapcolorwrite(ui)
422 oldwrite = setupwrapcolorwrite(ui)
423 try:
423 try:
424 newchunks, newopts = filterchunks(
424 newchunks, newopts = filterchunks(
425 ui, originalhunks, usecurses, testfile, match, operation
425 ui, originalhunks, usecurses, testfile, match, operation
426 )
426 )
427 finally:
427 finally:
428 ui.write = oldwrite
428 ui.write = oldwrite
429 return newchunks, newopts
429 return newchunks, newopts
430
430
431
431
432 def dorecord(
432 def dorecord(
433 ui, repo, commitfunc, cmdsuggest, backupall, filterfn, *pats, **opts
433 ui, repo, commitfunc, cmdsuggest, backupall, filterfn, *pats, **opts
434 ):
434 ):
435 opts = pycompat.byteskwargs(opts)
435 opts = pycompat.byteskwargs(opts)
436 if not ui.interactive():
436 if not ui.interactive():
437 if cmdsuggest:
437 if cmdsuggest:
438 msg = _(b'running non-interactively, use %s instead') % cmdsuggest
438 msg = _(b'running non-interactively, use %s instead') % cmdsuggest
439 else:
439 else:
440 msg = _(b'running non-interactively')
440 msg = _(b'running non-interactively')
441 raise error.InputError(msg)
441 raise error.InputError(msg)
442
442
443 # make sure username is set before going interactive
443 # make sure username is set before going interactive
444 if not opts.get(b'user'):
444 if not opts.get(b'user'):
445 ui.username() # raise exception, username not provided
445 ui.username() # raise exception, username not provided
446
446
447 def recordfunc(ui, repo, message, match, opts):
447 def recordfunc(ui, repo, message, match, opts):
448 """This is generic record driver.
448 """This is generic record driver.
449
449
450 Its job is to interactively filter local changes, and
450 Its job is to interactively filter local changes, and
451 accordingly prepare working directory into a state in which the
451 accordingly prepare working directory into a state in which the
452 job can be delegated to a non-interactive commit command such as
452 job can be delegated to a non-interactive commit command such as
453 'commit' or 'qrefresh'.
453 'commit' or 'qrefresh'.
454
454
455 After the actual job is done by non-interactive command, the
455 After the actual job is done by non-interactive command, the
456 working directory is restored to its original state.
456 working directory is restored to its original state.
457
457
458 In the end we'll record interesting changes, and everything else
458 In the end we'll record interesting changes, and everything else
459 will be left in place, so the user can continue working.
459 will be left in place, so the user can continue working.
460 """
460 """
461 if not opts.get(b'interactive-unshelve'):
461 if not opts.get(b'interactive-unshelve'):
462 checkunfinished(repo, commit=True)
462 checkunfinished(repo, commit=True)
463 wctx = repo[None]
463 wctx = repo[None]
464 merge = len(wctx.parents()) > 1
464 merge = len(wctx.parents()) > 1
465 if merge:
465 if merge:
466 raise error.InputError(
466 raise error.InputError(
467 _(
467 _(
468 b'cannot partially commit a merge '
468 b'cannot partially commit a merge '
469 b'(use "hg commit" instead)'
469 b'(use "hg commit" instead)'
470 )
470 )
471 )
471 )
472
472
473 def fail(f, msg):
473 def fail(f, msg):
474 raise error.InputError(b'%s: %s' % (f, msg))
474 raise error.InputError(b'%s: %s' % (f, msg))
475
475
476 force = opts.get(b'force')
476 force = opts.get(b'force')
477 if not force:
477 if not force:
478 match = matchmod.badmatch(match, fail)
478 match = matchmod.badmatch(match, fail)
479
479
480 status = repo.status(match=match)
480 status = repo.status(match=match)
481
481
482 overrides = {(b'ui', b'commitsubrepos'): True}
482 overrides = {(b'ui', b'commitsubrepos'): True}
483
483
484 with repo.ui.configoverride(overrides, b'record'):
484 with repo.ui.configoverride(overrides, b'record'):
485 # subrepoutil.precommit() modifies the status
485 # subrepoutil.precommit() modifies the status
486 tmpstatus = scmutil.status(
486 tmpstatus = scmutil.status(
487 copymod.copy(status.modified),
487 copymod.copy(status.modified),
488 copymod.copy(status.added),
488 copymod.copy(status.added),
489 copymod.copy(status.removed),
489 copymod.copy(status.removed),
490 copymod.copy(status.deleted),
490 copymod.copy(status.deleted),
491 copymod.copy(status.unknown),
491 copymod.copy(status.unknown),
492 copymod.copy(status.ignored),
492 copymod.copy(status.ignored),
493 copymod.copy(status.clean), # pytype: disable=wrong-arg-count
493 copymod.copy(status.clean), # pytype: disable=wrong-arg-count
494 )
494 )
495
495
496 # Force allows -X subrepo to skip the subrepo.
496 # Force allows -X subrepo to skip the subrepo.
497 subs, commitsubs, newstate = subrepoutil.precommit(
497 subs, commitsubs, newstate = subrepoutil.precommit(
498 repo.ui, wctx, tmpstatus, match, force=True
498 repo.ui, wctx, tmpstatus, match, force=True
499 )
499 )
500 for s in subs:
500 for s in subs:
501 if s in commitsubs:
501 if s in commitsubs:
502 dirtyreason = wctx.sub(s).dirtyreason(True)
502 dirtyreason = wctx.sub(s).dirtyreason(True)
503 raise error.Abort(dirtyreason)
503 raise error.Abort(dirtyreason)
504
504
505 if not force:
505 if not force:
506 repo.checkcommitpatterns(wctx, match, status, fail)
506 repo.checkcommitpatterns(wctx, match, status, fail)
507 diffopts = patch.difffeatureopts(
507 diffopts = patch.difffeatureopts(
508 ui,
508 ui,
509 opts=opts,
509 opts=opts,
510 whitespace=True,
510 whitespace=True,
511 section=b'commands',
511 section=b'commands',
512 configprefix=b'commit.interactive.',
512 configprefix=b'commit.interactive.',
513 )
513 )
514 diffopts.nodates = True
514 diffopts.nodates = True
515 diffopts.git = True
515 diffopts.git = True
516 diffopts.showfunc = True
516 diffopts.showfunc = True
517 originaldiff = patch.diff(repo, changes=status, opts=diffopts)
517 originaldiff = patch.diff(repo, changes=status, opts=diffopts)
518 original_headers = patch.parsepatch(originaldiff)
518 original_headers = patch.parsepatch(originaldiff)
519 match = scmutil.match(repo[None], pats)
519 match = scmutil.match(repo[None], pats)
520
520
521 # 1. filter patch, since we are intending to apply subset of it
521 # 1. filter patch, since we are intending to apply subset of it
522 try:
522 try:
523 chunks, newopts = filterfn(ui, original_headers, match)
523 chunks, newopts = filterfn(ui, original_headers, match)
524 except error.PatchParseError as err:
524 except error.PatchParseError as err:
525 raise error.InputError(_(b'error parsing patch: %s') % err)
525 raise error.InputError(_(b'error parsing patch: %s') % err)
526 except error.PatchApplicationError as err:
526 except error.PatchApplicationError as err:
527 raise error.StateError(_(b'error applying patch: %s') % err)
527 raise error.StateError(_(b'error applying patch: %s') % err)
528 opts.update(newopts)
528 opts.update(newopts)
529
529
530 # We need to keep a backup of files that have been newly added and
530 # We need to keep a backup of files that have been newly added and
531 # modified during the recording process because there is a previous
531 # modified during the recording process because there is a previous
532 # version without the edit in the workdir. We also will need to restore
532 # version without the edit in the workdir. We also will need to restore
533 # files that were the sources of renames so that the patch application
533 # files that were the sources of renames so that the patch application
534 # works.
534 # works.
535 newlyaddedandmodifiedfiles, alsorestore = newandmodified(chunks)
535 newlyaddedandmodifiedfiles, alsorestore = newandmodified(chunks)
536 contenders = set()
536 contenders = set()
537 for h in chunks:
537 for h in chunks:
538 if isheader(h):
538 if isheader(h):
539 contenders.update(set(h.files()))
539 contenders.update(set(h.files()))
540
540
541 changed = status.modified + status.added + status.removed
541 changed = status.modified + status.added + status.removed
542 newfiles = [f for f in changed if f in contenders]
542 newfiles = [f for f in changed if f in contenders]
543 if not newfiles:
543 if not newfiles:
544 ui.status(_(b'no changes to record\n'))
544 ui.status(_(b'no changes to record\n'))
545 return 0
545 return 0
546
546
547 modified = set(status.modified)
547 modified = set(status.modified)
548
548
549 # 2. backup changed files, so we can restore them in the end
549 # 2. backup changed files, so we can restore them in the end
550
550
551 if backupall:
551 if backupall:
552 tobackup = changed
552 tobackup = changed
553 else:
553 else:
554 tobackup = [
554 tobackup = [
555 f
555 f
556 for f in newfiles
556 for f in newfiles
557 if f in modified or f in newlyaddedandmodifiedfiles
557 if f in modified or f in newlyaddedandmodifiedfiles
558 ]
558 ]
559 backups = {}
559 backups = {}
560 if tobackup:
560 if tobackup:
561 backupdir = repo.vfs.join(b'record-backups')
561 backupdir = repo.vfs.join(b'record-backups')
562 try:
562 try:
563 os.mkdir(backupdir)
563 os.mkdir(backupdir)
564 except OSError as err:
564 except OSError as err:
565 if err.errno != errno.EEXIST:
565 if err.errno != errno.EEXIST:
566 raise
566 raise
567 try:
567 try:
568 # backup continues
568 # backup continues
569 for f in tobackup:
569 for f in tobackup:
570 fd, tmpname = pycompat.mkstemp(
570 fd, tmpname = pycompat.mkstemp(
571 prefix=os.path.basename(f) + b'.', dir=backupdir
571 prefix=os.path.basename(f) + b'.', dir=backupdir
572 )
572 )
573 os.close(fd)
573 os.close(fd)
574 ui.debug(b'backup %r as %r\n' % (f, tmpname))
574 ui.debug(b'backup %r as %r\n' % (f, tmpname))
575 util.copyfile(repo.wjoin(f), tmpname, copystat=True)
575 util.copyfile(repo.wjoin(f), tmpname, copystat=True)
576 backups[f] = tmpname
576 backups[f] = tmpname
577
577
578 fp = stringio()
578 fp = stringio()
579 for c in chunks:
579 for c in chunks:
580 fname = c.filename()
580 fname = c.filename()
581 if fname in backups:
581 if fname in backups:
582 c.write(fp)
582 c.write(fp)
583 dopatch = fp.tell()
583 dopatch = fp.tell()
584 fp.seek(0)
584 fp.seek(0)
585
585
586 # 2.5 optionally review / modify patch in text editor
586 # 2.5 optionally review / modify patch in text editor
587 if opts.get(b'review', False):
587 if opts.get(b'review', False):
588 patchtext = (
588 patchtext = (
589 crecordmod.diffhelptext
589 crecordmod.diffhelptext
590 + crecordmod.patchhelptext
590 + crecordmod.patchhelptext
591 + fp.read()
591 + fp.read()
592 )
592 )
593 reviewedpatch = ui.edit(
593 reviewedpatch = ui.edit(
594 patchtext, b"", action=b"diff", repopath=repo.path
594 patchtext, b"", action=b"diff", repopath=repo.path
595 )
595 )
596 fp.truncate(0)
596 fp.truncate(0)
597 fp.write(reviewedpatch)
597 fp.write(reviewedpatch)
598 fp.seek(0)
598 fp.seek(0)
599
599
600 [os.unlink(repo.wjoin(c)) for c in newlyaddedandmodifiedfiles]
600 [os.unlink(repo.wjoin(c)) for c in newlyaddedandmodifiedfiles]
601 # 3a. apply filtered patch to clean repo (clean)
601 # 3a. apply filtered patch to clean repo (clean)
602 if backups:
602 if backups:
603 m = scmutil.matchfiles(repo, set(backups.keys()) | alsorestore)
603 m = scmutil.matchfiles(repo, set(backups.keys()) | alsorestore)
604 mergemod.revert_to(repo[b'.'], matcher=m)
604 mergemod.revert_to(repo[b'.'], matcher=m)
605
605
606 # 3b. (apply)
606 # 3b. (apply)
607 if dopatch:
607 if dopatch:
608 try:
608 try:
609 ui.debug(b'applying patch\n')
609 ui.debug(b'applying patch\n')
610 ui.debug(fp.getvalue())
610 ui.debug(fp.getvalue())
611 patch.internalpatch(ui, repo, fp, 1, eolmode=None)
611 patch.internalpatch(ui, repo, fp, 1, eolmode=None)
612 except error.PatchParseError as err:
612 except error.PatchParseError as err:
613 raise error.InputError(pycompat.bytestr(err))
613 raise error.InputError(pycompat.bytestr(err))
614 except error.PatchApplicationError as err:
614 except error.PatchApplicationError as err:
615 raise error.StateError(pycompat.bytestr(err))
615 raise error.StateError(pycompat.bytestr(err))
616 del fp
616 del fp
617
617
618 # 4. We prepared working directory according to filtered
618 # 4. We prepared working directory according to filtered
619 # patch. Now is the time to delegate the job to
619 # patch. Now is the time to delegate the job to
620 # commit/qrefresh or the like!
620 # commit/qrefresh or the like!
621
621
622 # Make all of the pathnames absolute.
622 # Make all of the pathnames absolute.
623 newfiles = [repo.wjoin(nf) for nf in newfiles]
623 newfiles = [repo.wjoin(nf) for nf in newfiles]
624 return commitfunc(ui, repo, *newfiles, **pycompat.strkwargs(opts))
624 return commitfunc(ui, repo, *newfiles, **pycompat.strkwargs(opts))
625 finally:
625 finally:
626 # 5. finally restore backed-up files
626 # 5. finally restore backed-up files
627 try:
627 try:
628 dirstate = repo.dirstate
628 dirstate = repo.dirstate
629 for realname, tmpname in backups.items():
629 for realname, tmpname in backups.items():
630 ui.debug(b'restoring %r to %r\n' % (tmpname, realname))
630 ui.debug(b'restoring %r to %r\n' % (tmpname, realname))
631
631
632 if dirstate.get_entry(realname).maybe_clean:
632 if dirstate.get_entry(realname).maybe_clean:
633 # without normallookup, restoring timestamp
633 # without normallookup, restoring timestamp
634 # may cause partially committed files
634 # may cause partially committed files
635 # to be treated as unmodified
635 # to be treated as unmodified
636
636
637 # XXX-PENDINGCHANGE: We should clarify the context in
637 # XXX-PENDINGCHANGE: We should clarify the context in
638 # which this function is called to make sure it
638 # which this function is called to make sure it
639 # already called within a `pendingchange`, However we
639 # already called within a `pendingchange`, However we
640 # are taking a shortcut here in order to be able to
640 # are taking a shortcut here in order to be able to
641 # quickly deprecated the older API.
641 # quickly deprecated the older API.
642 with dirstate.parentchange():
642 with dirstate.parentchange():
643 dirstate.update_file(
643 dirstate.update_file(
644 realname,
644 realname,
645 p1_tracked=True,
645 p1_tracked=True,
646 wc_tracked=True,
646 wc_tracked=True,
647 possibly_dirty=True,
647 possibly_dirty=True,
648 )
648 )
649
649
650 # copystat=True here and above are a hack to trick any
650 # copystat=True here and above are a hack to trick any
651 # editors that have f open that we haven't modified them.
651 # editors that have f open that we haven't modified them.
652 #
652 #
653 # Also note that this racy as an editor could notice the
653 # Also note that this racy as an editor could notice the
654 # file's mtime before we've finished writing it.
654 # file's mtime before we've finished writing it.
655 util.copyfile(tmpname, repo.wjoin(realname), copystat=True)
655 util.copyfile(tmpname, repo.wjoin(realname), copystat=True)
656 os.unlink(tmpname)
656 os.unlink(tmpname)
657 if tobackup:
657 if tobackup:
658 os.rmdir(backupdir)
658 os.rmdir(backupdir)
659 except OSError:
659 except OSError:
660 pass
660 pass
661
661
662 def recordinwlock(ui, repo, message, match, opts):
662 def recordinwlock(ui, repo, message, match, opts):
663 with repo.wlock():
663 with repo.wlock():
664 return recordfunc(ui, repo, message, match, opts)
664 return recordfunc(ui, repo, message, match, opts)
665
665
666 return commit(ui, repo, recordinwlock, pats, opts)
666 return commit(ui, repo, recordinwlock, pats, opts)
667
667
668
668
669 class dirnode:
669 class dirnode:
670 """
670 """
671 Represent a directory in user working copy with information required for
671 Represent a directory in user working copy with information required for
672 the purpose of tersing its status.
672 the purpose of tersing its status.
673
673
674 path is the path to the directory, without a trailing '/'
674 path is the path to the directory, without a trailing '/'
675
675
676 statuses is a set of statuses of all files in this directory (this includes
676 statuses is a set of statuses of all files in this directory (this includes
677 all the files in all the subdirectories too)
677 all the files in all the subdirectories too)
678
678
679 files is a list of files which are direct child of this directory
679 files is a list of files which are direct child of this directory
680
680
681 subdirs is a dictionary of sub-directory name as the key and it's own
681 subdirs is a dictionary of sub-directory name as the key and it's own
682 dirnode object as the value
682 dirnode object as the value
683 """
683 """
684
684
685 def __init__(self, dirpath):
685 def __init__(self, dirpath):
686 self.path = dirpath
686 self.path = dirpath
687 self.statuses = set()
687 self.statuses = set()
688 self.files = []
688 self.files = []
689 self.subdirs = {}
689 self.subdirs = {}
690
690
691 def _addfileindir(self, filename, status):
691 def _addfileindir(self, filename, status):
692 """Add a file in this directory as a direct child."""
692 """Add a file in this directory as a direct child."""
693 self.files.append((filename, status))
693 self.files.append((filename, status))
694
694
695 def addfile(self, filename, status):
695 def addfile(self, filename, status):
696 """
696 """
697 Add a file to this directory or to its direct parent directory.
697 Add a file to this directory or to its direct parent directory.
698
698
699 If the file is not direct child of this directory, we traverse to the
699 If the file is not direct child of this directory, we traverse to the
700 directory of which this file is a direct child of and add the file
700 directory of which this file is a direct child of and add the file
701 there.
701 there.
702 """
702 """
703
703
704 # the filename contains a path separator, it means it's not the direct
704 # the filename contains a path separator, it means it's not the direct
705 # child of this directory
705 # child of this directory
706 if b'/' in filename:
706 if b'/' in filename:
707 subdir, filep = filename.split(b'/', 1)
707 subdir, filep = filename.split(b'/', 1)
708
708
709 # does the dirnode object for subdir exists
709 # does the dirnode object for subdir exists
710 if subdir not in self.subdirs:
710 if subdir not in self.subdirs:
711 subdirpath = pathutil.join(self.path, subdir)
711 subdirpath = pathutil.join(self.path, subdir)
712 self.subdirs[subdir] = dirnode(subdirpath)
712 self.subdirs[subdir] = dirnode(subdirpath)
713
713
714 # try adding the file in subdir
714 # try adding the file in subdir
715 self.subdirs[subdir].addfile(filep, status)
715 self.subdirs[subdir].addfile(filep, status)
716
716
717 else:
717 else:
718 self._addfileindir(filename, status)
718 self._addfileindir(filename, status)
719
719
720 if status not in self.statuses:
720 if status not in self.statuses:
721 self.statuses.add(status)
721 self.statuses.add(status)
722
722
723 def iterfilepaths(self):
723 def iterfilepaths(self):
724 """Yield (status, path) for files directly under this directory."""
724 """Yield (status, path) for files directly under this directory."""
725 for f, st in self.files:
725 for f, st in self.files:
726 yield st, pathutil.join(self.path, f)
726 yield st, pathutil.join(self.path, f)
727
727
728 def tersewalk(self, terseargs):
728 def tersewalk(self, terseargs):
729 """
729 """
730 Yield (status, path) obtained by processing the status of this
730 Yield (status, path) obtained by processing the status of this
731 dirnode.
731 dirnode.
732
732
733 terseargs is the string of arguments passed by the user with `--terse`
733 terseargs is the string of arguments passed by the user with `--terse`
734 flag.
734 flag.
735
735
736 Following are the cases which can happen:
736 Following are the cases which can happen:
737
737
738 1) All the files in the directory (including all the files in its
738 1) All the files in the directory (including all the files in its
739 subdirectories) share the same status and the user has asked us to terse
739 subdirectories) share the same status and the user has asked us to terse
740 that status. -> yield (status, dirpath). dirpath will end in '/'.
740 that status. -> yield (status, dirpath). dirpath will end in '/'.
741
741
742 2) Otherwise, we do following:
742 2) Otherwise, we do following:
743
743
744 a) Yield (status, filepath) for all the files which are in this
744 a) Yield (status, filepath) for all the files which are in this
745 directory (only the ones in this directory, not the subdirs)
745 directory (only the ones in this directory, not the subdirs)
746
746
747 b) Recurse the function on all the subdirectories of this
747 b) Recurse the function on all the subdirectories of this
748 directory
748 directory
749 """
749 """
750
750
751 if len(self.statuses) == 1:
751 if len(self.statuses) == 1:
752 onlyst = self.statuses.pop()
752 onlyst = self.statuses.pop()
753
753
754 # Making sure we terse only when the status abbreviation is
754 # Making sure we terse only when the status abbreviation is
755 # passed as terse argument
755 # passed as terse argument
756 if onlyst in terseargs:
756 if onlyst in terseargs:
757 yield onlyst, self.path + b'/'
757 yield onlyst, self.path + b'/'
758 return
758 return
759
759
760 # add the files to status list
760 # add the files to status list
761 for st, fpath in self.iterfilepaths():
761 for st, fpath in self.iterfilepaths():
762 yield st, fpath
762 yield st, fpath
763
763
764 # recurse on the subdirs
764 # recurse on the subdirs
765 for dirobj in self.subdirs.values():
765 for dirobj in self.subdirs.values():
766 for st, fpath in dirobj.tersewalk(terseargs):
766 for st, fpath in dirobj.tersewalk(terseargs):
767 yield st, fpath
767 yield st, fpath
768
768
769
769
770 def tersedir(statuslist, terseargs):
770 def tersedir(statuslist, terseargs):
771 """
771 """
772 Terse the status if all the files in a directory shares the same status.
772 Terse the status if all the files in a directory shares the same status.
773
773
774 statuslist is scmutil.status() object which contains a list of files for
774 statuslist is scmutil.status() object which contains a list of files for
775 each status.
775 each status.
776 terseargs is string which is passed by the user as the argument to `--terse`
776 terseargs is string which is passed by the user as the argument to `--terse`
777 flag.
777 flag.
778
778
779 The function makes a tree of objects of dirnode class, and at each node it
779 The function makes a tree of objects of dirnode class, and at each node it
780 stores the information required to know whether we can terse a certain
780 stores the information required to know whether we can terse a certain
781 directory or not.
781 directory or not.
782 """
782 """
783 # the order matters here as that is used to produce final list
783 # the order matters here as that is used to produce final list
784 allst = (b'm', b'a', b'r', b'd', b'u', b'i', b'c')
784 allst = (b'm', b'a', b'r', b'd', b'u', b'i', b'c')
785
785
786 # checking the argument validity
786 # checking the argument validity
787 for s in pycompat.bytestr(terseargs):
787 for s in pycompat.bytestr(terseargs):
788 if s not in allst:
788 if s not in allst:
789 raise error.InputError(_(b"'%s' not recognized") % s)
789 raise error.InputError(_(b"'%s' not recognized") % s)
790
790
791 # creating a dirnode object for the root of the repo
791 # creating a dirnode object for the root of the repo
792 rootobj = dirnode(b'')
792 rootobj = dirnode(b'')
793 pstatus = (
793 pstatus = (
794 b'modified',
794 b'modified',
795 b'added',
795 b'added',
796 b'deleted',
796 b'deleted',
797 b'clean',
797 b'clean',
798 b'unknown',
798 b'unknown',
799 b'ignored',
799 b'ignored',
800 b'removed',
800 b'removed',
801 )
801 )
802
802
803 tersedict = {}
803 tersedict = {}
804 for attrname in pstatus:
804 for attrname in pstatus:
805 statuschar = attrname[0:1]
805 statuschar = attrname[0:1]
806 for f in getattr(statuslist, attrname):
806 for f in getattr(statuslist, attrname):
807 rootobj.addfile(f, statuschar)
807 rootobj.addfile(f, statuschar)
808 tersedict[statuschar] = []
808 tersedict[statuschar] = []
809
809
810 # we won't be tersing the root dir, so add files in it
810 # we won't be tersing the root dir, so add files in it
811 for st, fpath in rootobj.iterfilepaths():
811 for st, fpath in rootobj.iterfilepaths():
812 tersedict[st].append(fpath)
812 tersedict[st].append(fpath)
813
813
814 # process each sub-directory and build tersedict
814 # process each sub-directory and build tersedict
815 for subdir in rootobj.subdirs.values():
815 for subdir in rootobj.subdirs.values():
816 for st, f in subdir.tersewalk(terseargs):
816 for st, f in subdir.tersewalk(terseargs):
817 tersedict[st].append(f)
817 tersedict[st].append(f)
818
818
819 tersedlist = []
819 tersedlist = []
820 for st in allst:
820 for st in allst:
821 tersedict[st].sort()
821 tersedict[st].sort()
822 tersedlist.append(tersedict[st])
822 tersedlist.append(tersedict[st])
823
823
824 return scmutil.status(*tersedlist)
824 return scmutil.status(*tersedlist)
825
825
826
826
827 def _commentlines(raw):
827 def _commentlines(raw):
828 '''Surround lineswith a comment char and a new line'''
828 '''Surround lineswith a comment char and a new line'''
829 lines = raw.splitlines()
829 lines = raw.splitlines()
830 commentedlines = [b'# %s' % line for line in lines]
830 commentedlines = [b'# %s' % line for line in lines]
831 return b'\n'.join(commentedlines) + b'\n'
831 return b'\n'.join(commentedlines) + b'\n'
832
832
833
833
834 @attr.s(frozen=True)
834 @attr.s(frozen=True)
835 class morestatus:
835 class morestatus:
836 reporoot = attr.ib()
836 reporoot = attr.ib()
837 unfinishedop = attr.ib()
837 unfinishedop = attr.ib()
838 unfinishedmsg = attr.ib()
838 unfinishedmsg = attr.ib()
839 activemerge = attr.ib()
839 activemerge = attr.ib()
840 unresolvedpaths = attr.ib()
840 unresolvedpaths = attr.ib()
841 _formattedpaths = attr.ib(init=False, default=set())
841 _formattedpaths = attr.ib(init=False, default=set())
842 _label = b'status.morestatus'
842 _label = b'status.morestatus'
843
843
844 def formatfile(self, path, fm):
844 def formatfile(self, path, fm):
845 self._formattedpaths.add(path)
845 self._formattedpaths.add(path)
846 if self.activemerge and path in self.unresolvedpaths:
846 if self.activemerge and path in self.unresolvedpaths:
847 fm.data(unresolved=True)
847 fm.data(unresolved=True)
848
848
849 def formatfooter(self, fm):
849 def formatfooter(self, fm):
850 if self.unfinishedop or self.unfinishedmsg:
850 if self.unfinishedop or self.unfinishedmsg:
851 fm.startitem()
851 fm.startitem()
852 fm.data(itemtype=b'morestatus')
852 fm.data(itemtype=b'morestatus')
853
853
854 if self.unfinishedop:
854 if self.unfinishedop:
855 fm.data(unfinished=self.unfinishedop)
855 fm.data(unfinished=self.unfinishedop)
856 statemsg = (
856 statemsg = (
857 _(b'The repository is in an unfinished *%s* state.')
857 _(b'The repository is in an unfinished *%s* state.')
858 % self.unfinishedop
858 % self.unfinishedop
859 )
859 )
860 fm.plain(b'%s\n' % _commentlines(statemsg), label=self._label)
860 fm.plain(b'%s\n' % _commentlines(statemsg), label=self._label)
861 if self.unfinishedmsg:
861 if self.unfinishedmsg:
862 fm.data(unfinishedmsg=self.unfinishedmsg)
862 fm.data(unfinishedmsg=self.unfinishedmsg)
863
863
864 # May also start new data items.
864 # May also start new data items.
865 self._formatconflicts(fm)
865 self._formatconflicts(fm)
866
866
867 if self.unfinishedmsg:
867 if self.unfinishedmsg:
868 fm.plain(
868 fm.plain(
869 b'%s\n' % _commentlines(self.unfinishedmsg), label=self._label
869 b'%s\n' % _commentlines(self.unfinishedmsg), label=self._label
870 )
870 )
871
871
872 def _formatconflicts(self, fm):
872 def _formatconflicts(self, fm):
873 if not self.activemerge:
873 if not self.activemerge:
874 return
874 return
875
875
876 if self.unresolvedpaths:
876 if self.unresolvedpaths:
877 mergeliststr = b'\n'.join(
877 mergeliststr = b'\n'.join(
878 [
878 [
879 b' %s'
879 b' %s'
880 % util.pathto(self.reporoot, encoding.getcwd(), path)
880 % util.pathto(self.reporoot, encoding.getcwd(), path)
881 for path in self.unresolvedpaths
881 for path in self.unresolvedpaths
882 ]
882 ]
883 )
883 )
884 msg = (
884 msg = (
885 _(
885 _(
886 b'''Unresolved merge conflicts:
886 b'''Unresolved merge conflicts:
887
887
888 %s
888 %s
889
889
890 To mark files as resolved: hg resolve --mark FILE'''
890 To mark files as resolved: hg resolve --mark FILE'''
891 )
891 )
892 % mergeliststr
892 % mergeliststr
893 )
893 )
894
894
895 # If any paths with unresolved conflicts were not previously
895 # If any paths with unresolved conflicts were not previously
896 # formatted, output them now.
896 # formatted, output them now.
897 for f in self.unresolvedpaths:
897 for f in self.unresolvedpaths:
898 if f in self._formattedpaths:
898 if f in self._formattedpaths:
899 # Already output.
899 # Already output.
900 continue
900 continue
901 fm.startitem()
901 fm.startitem()
902 # We can't claim to know the status of the file - it may just
902 # We can't claim to know the status of the file - it may just
903 # have been in one of the states that were not requested for
903 # have been in one of the states that were not requested for
904 # display, so it could be anything.
904 # display, so it could be anything.
905 fm.data(itemtype=b'file', path=f, unresolved=True)
905 fm.data(itemtype=b'file', path=f, unresolved=True)
906
906
907 else:
907 else:
908 msg = _(b'No unresolved merge conflicts.')
908 msg = _(b'No unresolved merge conflicts.')
909
909
910 fm.plain(b'%s\n' % _commentlines(msg), label=self._label)
910 fm.plain(b'%s\n' % _commentlines(msg), label=self._label)
911
911
912
912
913 def readmorestatus(repo):
913 def readmorestatus(repo):
914 """Returns a morestatus object if the repo has unfinished state."""
914 """Returns a morestatus object if the repo has unfinished state."""
915 statetuple = statemod.getrepostate(repo)
915 statetuple = statemod.getrepostate(repo)
916 mergestate = mergestatemod.mergestate.read(repo)
916 mergestate = mergestatemod.mergestate.read(repo)
917 activemerge = mergestate.active()
917 activemerge = mergestate.active()
918 if not statetuple and not activemerge:
918 if not statetuple and not activemerge:
919 return None
919 return None
920
920
921 unfinishedop = unfinishedmsg = unresolved = None
921 unfinishedop = unfinishedmsg = unresolved = None
922 if statetuple:
922 if statetuple:
923 unfinishedop, unfinishedmsg = statetuple
923 unfinishedop, unfinishedmsg = statetuple
924 if activemerge:
924 if activemerge:
925 unresolved = sorted(mergestate.unresolved())
925 unresolved = sorted(mergestate.unresolved())
926 return morestatus(
926 return morestatus(
927 repo.root, unfinishedop, unfinishedmsg, activemerge, unresolved
927 repo.root, unfinishedop, unfinishedmsg, activemerge, unresolved
928 )
928 )
929
929
930
930
931 def findpossible(cmd, table, strict=False):
931 def findpossible(cmd, table, strict=False):
932 """
932 """
933 Return cmd -> (aliases, command table entry)
933 Return cmd -> (aliases, command table entry)
934 for each matching command.
934 for each matching command.
935 Return debug commands (or their aliases) only if no normal command matches.
935 Return debug commands (or their aliases) only if no normal command matches.
936 """
936 """
937 choice = {}
937 choice = {}
938 debugchoice = {}
938 debugchoice = {}
939
939
940 if cmd in table:
940 if cmd in table:
941 # short-circuit exact matches, "log" alias beats "log|history"
941 # short-circuit exact matches, "log" alias beats "log|history"
942 keys = [cmd]
942 keys = [cmd]
943 else:
943 else:
944 keys = table.keys()
944 keys = table.keys()
945
945
946 allcmds = []
946 allcmds = []
947 for e in keys:
947 for e in keys:
948 aliases = parsealiases(e)
948 aliases = parsealiases(e)
949 allcmds.extend(aliases)
949 allcmds.extend(aliases)
950 found = None
950 found = None
951 if cmd in aliases:
951 if cmd in aliases:
952 found = cmd
952 found = cmd
953 elif not strict:
953 elif not strict:
954 for a in aliases:
954 for a in aliases:
955 if a.startswith(cmd):
955 if a.startswith(cmd):
956 found = a
956 found = a
957 break
957 break
958 if found is not None:
958 if found is not None:
959 if aliases[0].startswith(b"debug") or found.startswith(b"debug"):
959 if aliases[0].startswith(b"debug") or found.startswith(b"debug"):
960 debugchoice[found] = (aliases, table[e])
960 debugchoice[found] = (aliases, table[e])
961 else:
961 else:
962 choice[found] = (aliases, table[e])
962 choice[found] = (aliases, table[e])
963
963
964 if not choice and debugchoice:
964 if not choice and debugchoice:
965 choice = debugchoice
965 choice = debugchoice
966
966
967 return choice, allcmds
967 return choice, allcmds
968
968
969
969
970 def findcmd(cmd, table, strict=True):
970 def findcmd(cmd, table, strict=True):
971 """Return (aliases, command table entry) for command string."""
971 """Return (aliases, command table entry) for command string."""
972 choice, allcmds = findpossible(cmd, table, strict)
972 choice, allcmds = findpossible(cmd, table, strict)
973
973
974 if cmd in choice:
974 if cmd in choice:
975 return choice[cmd]
975 return choice[cmd]
976
976
977 if len(choice) > 1:
977 if len(choice) > 1:
978 clist = sorted(choice)
978 clist = sorted(choice)
979 raise error.AmbiguousCommand(cmd, clist)
979 raise error.AmbiguousCommand(cmd, clist)
980
980
981 if choice:
981 if choice:
982 return list(choice.values())[0]
982 return list(choice.values())[0]
983
983
984 raise error.UnknownCommand(cmd, allcmds)
984 raise error.UnknownCommand(cmd, allcmds)
985
985
986
986
987 def changebranch(ui, repo, revs, label, opts):
987 def changebranch(ui, repo, revs, label, opts):
988 """Change the branch name of given revs to label"""
988 """Change the branch name of given revs to label"""
989
989
990 with repo.wlock(), repo.lock(), repo.transaction(b'branches'):
990 with repo.wlock(), repo.lock(), repo.transaction(b'branches'):
991 # abort in case of uncommitted merge or dirty wdir
991 # abort in case of uncommitted merge or dirty wdir
992 bailifchanged(repo)
992 bailifchanged(repo)
993 revs = logcmdutil.revrange(repo, revs)
993 revs = logcmdutil.revrange(repo, revs)
994 if not revs:
994 if not revs:
995 raise error.InputError(b"empty revision set")
995 raise error.InputError(b"empty revision set")
996 roots = repo.revs(b'roots(%ld)', revs)
996 roots = repo.revs(b'roots(%ld)', revs)
997 if len(roots) > 1:
997 if len(roots) > 1:
998 raise error.InputError(
998 raise error.InputError(
999 _(b"cannot change branch of non-linear revisions")
999 _(b"cannot change branch of non-linear revisions")
1000 )
1000 )
1001 rewriteutil.precheck(repo, revs, b'change branch of')
1001 rewriteutil.precheck(repo, revs, b'change branch of')
1002
1002
1003 root = repo[roots.first()]
1003 root = repo[roots.first()]
1004 rpb = {parent.branch() for parent in root.parents()}
1004 rpb = {parent.branch() for parent in root.parents()}
1005 if (
1005 if (
1006 not opts.get(b'force')
1006 not opts.get(b'force')
1007 and label not in rpb
1007 and label not in rpb
1008 and label in repo.branchmap()
1008 and label in repo.branchmap()
1009 ):
1009 ):
1010 raise error.InputError(
1010 raise error.InputError(
1011 _(b"a branch of the same name already exists")
1011 _(b"a branch of the same name already exists")
1012 )
1012 )
1013
1013
1014 # make sure only topological heads
1014 # make sure only topological heads
1015 if repo.revs(b'heads(%ld) - head()', revs):
1015 if repo.revs(b'heads(%ld) - head()', revs):
1016 raise error.InputError(
1016 raise error.InputError(
1017 _(b"cannot change branch in middle of a stack")
1017 _(b"cannot change branch in middle of a stack")
1018 )
1018 )
1019
1019
1020 replacements = {}
1020 replacements = {}
1021 # avoid import cycle mercurial.cmdutil -> mercurial.context ->
1021 # avoid import cycle mercurial.cmdutil -> mercurial.context ->
1022 # mercurial.subrepo -> mercurial.cmdutil
1022 # mercurial.subrepo -> mercurial.cmdutil
1023 from . import context
1023 from . import context
1024
1024
1025 for rev in revs:
1025 for rev in revs:
1026 ctx = repo[rev]
1026 ctx = repo[rev]
1027 oldbranch = ctx.branch()
1027 oldbranch = ctx.branch()
1028 # check if ctx has same branch
1028 # check if ctx has same branch
1029 if oldbranch == label:
1029 if oldbranch == label:
1030 continue
1030 continue
1031
1031
1032 def filectxfn(repo, newctx, path):
1032 def filectxfn(repo, newctx, path):
1033 try:
1033 try:
1034 return ctx[path]
1034 return ctx[path]
1035 except error.ManifestLookupError:
1035 except error.ManifestLookupError:
1036 return None
1036 return None
1037
1037
1038 ui.debug(
1038 ui.debug(
1039 b"changing branch of '%s' from '%s' to '%s'\n"
1039 b"changing branch of '%s' from '%s' to '%s'\n"
1040 % (hex(ctx.node()), oldbranch, label)
1040 % (hex(ctx.node()), oldbranch, label)
1041 )
1041 )
1042 extra = ctx.extra()
1042 extra = ctx.extra()
1043 extra[b'branch_change'] = hex(ctx.node())
1043 extra[b'branch_change'] = hex(ctx.node())
1044 # While changing branch of set of linear commits, make sure that
1044 # While changing branch of set of linear commits, make sure that
1045 # we base our commits on new parent rather than old parent which
1045 # we base our commits on new parent rather than old parent which
1046 # was obsoleted while changing the branch
1046 # was obsoleted while changing the branch
1047 p1 = ctx.p1().node()
1047 p1 = ctx.p1().node()
1048 p2 = ctx.p2().node()
1048 p2 = ctx.p2().node()
1049 if p1 in replacements:
1049 if p1 in replacements:
1050 p1 = replacements[p1][0]
1050 p1 = replacements[p1][0]
1051 if p2 in replacements:
1051 if p2 in replacements:
1052 p2 = replacements[p2][0]
1052 p2 = replacements[p2][0]
1053
1053
1054 mc = context.memctx(
1054 mc = context.memctx(
1055 repo,
1055 repo,
1056 (p1, p2),
1056 (p1, p2),
1057 ctx.description(),
1057 ctx.description(),
1058 ctx.files(),
1058 ctx.files(),
1059 filectxfn,
1059 filectxfn,
1060 user=ctx.user(),
1060 user=ctx.user(),
1061 date=ctx.date(),
1061 date=ctx.date(),
1062 extra=extra,
1062 extra=extra,
1063 branch=label,
1063 branch=label,
1064 )
1064 )
1065
1065
1066 newnode = repo.commitctx(mc)
1066 newnode = repo.commitctx(mc)
1067 replacements[ctx.node()] = (newnode,)
1067 replacements[ctx.node()] = (newnode,)
1068 ui.debug(b'new node id is %s\n' % hex(newnode))
1068 ui.debug(b'new node id is %s\n' % hex(newnode))
1069
1069
1070 # create obsmarkers and move bookmarks
1070 # create obsmarkers and move bookmarks
1071 scmutil.cleanupnodes(
1071 scmutil.cleanupnodes(
1072 repo, replacements, b'branch-change', fixphase=True
1072 repo, replacements, b'branch-change', fixphase=True
1073 )
1073 )
1074
1074
1075 # move the working copy too
1075 # move the working copy too
1076 wctx = repo[None]
1076 wctx = repo[None]
1077 # in-progress merge is a bit too complex for now.
1077 # in-progress merge is a bit too complex for now.
1078 if len(wctx.parents()) == 1:
1078 if len(wctx.parents()) == 1:
1079 newid = replacements.get(wctx.p1().node())
1079 newid = replacements.get(wctx.p1().node())
1080 if newid is not None:
1080 if newid is not None:
1081 # avoid import cycle mercurial.cmdutil -> mercurial.hg ->
1081 # avoid import cycle mercurial.cmdutil -> mercurial.hg ->
1082 # mercurial.cmdutil
1082 # mercurial.cmdutil
1083 from . import hg
1083 from . import hg
1084
1084
1085 hg.update(repo, newid[0], quietempty=True)
1085 hg.update(repo, newid[0], quietempty=True)
1086
1086
1087 ui.status(_(b"changed branch on %d changesets\n") % len(replacements))
1087 ui.status(_(b"changed branch on %d changesets\n") % len(replacements))
1088
1088
1089
1089
1090 def findrepo(p):
1090 def findrepo(p):
1091 while not os.path.isdir(os.path.join(p, b".hg")):
1091 while not os.path.isdir(os.path.join(p, b".hg")):
1092 oldp, p = p, os.path.dirname(p)
1092 oldp, p = p, os.path.dirname(p)
1093 if p == oldp:
1093 if p == oldp:
1094 return None
1094 return None
1095
1095
1096 return p
1096 return p
1097
1097
1098
1098
1099 def bailifchanged(repo, merge=True, hint=None):
1099 def bailifchanged(repo, merge=True, hint=None):
1100 """enforce the precondition that working directory must be clean.
1100 """enforce the precondition that working directory must be clean.
1101
1101
1102 'merge' can be set to false if a pending uncommitted merge should be
1102 'merge' can be set to false if a pending uncommitted merge should be
1103 ignored (such as when 'update --check' runs).
1103 ignored (such as when 'update --check' runs).
1104
1104
1105 'hint' is the usual hint given to Abort exception.
1105 'hint' is the usual hint given to Abort exception.
1106 """
1106 """
1107
1107
1108 if merge and repo.dirstate.p2() != repo.nullid:
1108 if merge and repo.dirstate.p2() != repo.nullid:
1109 raise error.StateError(_(b'outstanding uncommitted merge'), hint=hint)
1109 raise error.StateError(_(b'outstanding uncommitted merge'), hint=hint)
1110 st = repo.status()
1110 st = repo.status()
1111 if st.modified or st.added or st.removed or st.deleted:
1111 if st.modified or st.added or st.removed or st.deleted:
1112 raise error.StateError(_(b'uncommitted changes'), hint=hint)
1112 raise error.StateError(_(b'uncommitted changes'), hint=hint)
1113 ctx = repo[None]
1113 ctx = repo[None]
1114 for s in sorted(ctx.substate):
1114 for s in sorted(ctx.substate):
1115 ctx.sub(s).bailifchanged(hint=hint)
1115 ctx.sub(s).bailifchanged(hint=hint)
1116
1116
1117
1117
1118 def logmessage(ui, opts):
1118 def logmessage(ui, opts):
1119 """get the log message according to -m and -l option"""
1119 """get the log message according to -m and -l option"""
1120
1120
1121 check_at_most_one_arg(opts, b'message', b'logfile')
1121 check_at_most_one_arg(opts, b'message', b'logfile')
1122
1122
1123 message = opts.get(b'message')
1123 message = opts.get(b'message')
1124 logfile = opts.get(b'logfile')
1124 logfile = opts.get(b'logfile')
1125
1125
1126 if not message and logfile:
1126 if not message and logfile:
1127 try:
1127 try:
1128 if isstdiofilename(logfile):
1128 if isstdiofilename(logfile):
1129 message = ui.fin.read()
1129 message = ui.fin.read()
1130 else:
1130 else:
1131 message = b'\n'.join(util.readfile(logfile).splitlines())
1131 message = b'\n'.join(util.readfile(logfile).splitlines())
1132 except IOError as inst:
1132 except IOError as inst:
1133 raise error.Abort(
1133 raise error.Abort(
1134 _(b"can't read commit message '%s': %s")
1134 _(b"can't read commit message '%s': %s")
1135 % (logfile, encoding.strtolocal(inst.strerror))
1135 % (logfile, encoding.strtolocal(inst.strerror))
1136 )
1136 )
1137 return message
1137 return message
1138
1138
1139
1139
1140 def mergeeditform(ctxorbool, baseformname):
1140 def mergeeditform(ctxorbool, baseformname):
1141 """return appropriate editform name (referencing a committemplate)
1141 """return appropriate editform name (referencing a committemplate)
1142
1142
1143 'ctxorbool' is either a ctx to be committed, or a bool indicating whether
1143 'ctxorbool' is either a ctx to be committed, or a bool indicating whether
1144 merging is committed.
1144 merging is committed.
1145
1145
1146 This returns baseformname with '.merge' appended if it is a merge,
1146 This returns baseformname with '.merge' appended if it is a merge,
1147 otherwise '.normal' is appended.
1147 otherwise '.normal' is appended.
1148 """
1148 """
1149 if isinstance(ctxorbool, bool):
1149 if isinstance(ctxorbool, bool):
1150 if ctxorbool:
1150 if ctxorbool:
1151 return baseformname + b".merge"
1151 return baseformname + b".merge"
1152 elif len(ctxorbool.parents()) > 1:
1152 elif len(ctxorbool.parents()) > 1:
1153 return baseformname + b".merge"
1153 return baseformname + b".merge"
1154
1154
1155 return baseformname + b".normal"
1155 return baseformname + b".normal"
1156
1156
1157
1157
1158 def getcommiteditor(
1158 def getcommiteditor(
1159 edit=False, finishdesc=None, extramsg=None, editform=b'', **opts
1159 edit=False, finishdesc=None, extramsg=None, editform=b'', **opts
1160 ):
1160 ):
1161 """get appropriate commit message editor according to '--edit' option
1161 """get appropriate commit message editor according to '--edit' option
1162
1162
1163 'finishdesc' is a function to be called with edited commit message
1163 'finishdesc' is a function to be called with edited commit message
1164 (= 'description' of the new changeset) just after editing, but
1164 (= 'description' of the new changeset) just after editing, but
1165 before checking empty-ness. It should return actual text to be
1165 before checking empty-ness. It should return actual text to be
1166 stored into history. This allows to change description before
1166 stored into history. This allows to change description before
1167 storing.
1167 storing.
1168
1168
1169 'extramsg' is a extra message to be shown in the editor instead of
1169 'extramsg' is a extra message to be shown in the editor instead of
1170 'Leave message empty to abort commit' line. 'HG: ' prefix and EOL
1170 'Leave message empty to abort commit' line. 'HG: ' prefix and EOL
1171 is automatically added.
1171 is automatically added.
1172
1172
1173 'editform' is a dot-separated list of names, to distinguish
1173 'editform' is a dot-separated list of names, to distinguish
1174 the purpose of commit text editing.
1174 the purpose of commit text editing.
1175
1175
1176 'getcommiteditor' returns 'commitforceeditor' regardless of
1176 'getcommiteditor' returns 'commitforceeditor' regardless of
1177 'edit', if one of 'finishdesc' or 'extramsg' is specified, because
1177 'edit', if one of 'finishdesc' or 'extramsg' is specified, because
1178 they are specific for usage in MQ.
1178 they are specific for usage in MQ.
1179 """
1179 """
1180 if edit or finishdesc or extramsg:
1180 if edit or finishdesc or extramsg:
1181 return lambda r, c, s: commitforceeditor(
1181 return lambda r, c, s: commitforceeditor(
1182 r, c, s, finishdesc=finishdesc, extramsg=extramsg, editform=editform
1182 r, c, s, finishdesc=finishdesc, extramsg=extramsg, editform=editform
1183 )
1183 )
1184 elif editform:
1184 elif editform:
1185 return lambda r, c, s: commiteditor(r, c, s, editform=editform)
1185 return lambda r, c, s: commiteditor(r, c, s, editform=editform)
1186 else:
1186 else:
1187 return commiteditor
1187 return commiteditor
1188
1188
1189
1189
1190 def _escapecommandtemplate(tmpl):
1190 def _escapecommandtemplate(tmpl):
1191 parts = []
1191 parts = []
1192 for typ, start, end in templater.scantemplate(tmpl, raw=True):
1192 for typ, start, end in templater.scantemplate(tmpl, raw=True):
1193 if typ == b'string':
1193 if typ == b'string':
1194 parts.append(stringutil.escapestr(tmpl[start:end]))
1194 parts.append(stringutil.escapestr(tmpl[start:end]))
1195 else:
1195 else:
1196 parts.append(tmpl[start:end])
1196 parts.append(tmpl[start:end])
1197 return b''.join(parts)
1197 return b''.join(parts)
1198
1198
1199
1199
1200 def rendercommandtemplate(ui, tmpl, props):
1200 def rendercommandtemplate(ui, tmpl, props):
1201 r"""Expand a literal template 'tmpl' in a way suitable for command line
1201 r"""Expand a literal template 'tmpl' in a way suitable for command line
1202
1202
1203 '\' in outermost string is not taken as an escape character because it
1203 '\' in outermost string is not taken as an escape character because it
1204 is a directory separator on Windows.
1204 is a directory separator on Windows.
1205
1205
1206 >>> from . import ui as uimod
1206 >>> from . import ui as uimod
1207 >>> ui = uimod.ui()
1207 >>> ui = uimod.ui()
1208 >>> rendercommandtemplate(ui, b'c:\\{path}', {b'path': b'foo'})
1208 >>> rendercommandtemplate(ui, b'c:\\{path}', {b'path': b'foo'})
1209 'c:\\foo'
1209 'c:\\foo'
1210 >>> rendercommandtemplate(ui, b'{"c:\\{path}"}', {'path': b'foo'})
1210 >>> rendercommandtemplate(ui, b'{"c:\\{path}"}', {'path': b'foo'})
1211 'c:{path}'
1211 'c:{path}'
1212 """
1212 """
1213 if not tmpl:
1213 if not tmpl:
1214 return tmpl
1214 return tmpl
1215 t = formatter.maketemplater(ui, _escapecommandtemplate(tmpl))
1215 t = formatter.maketemplater(ui, _escapecommandtemplate(tmpl))
1216 return t.renderdefault(props)
1216 return t.renderdefault(props)
1217
1217
1218
1218
1219 def rendertemplate(ctx, tmpl, props=None):
1219 def rendertemplate(ctx, tmpl, props=None):
1220 """Expand a literal template 'tmpl' byte-string against one changeset
1220 """Expand a literal template 'tmpl' byte-string against one changeset
1221
1221
1222 Each props item must be a stringify-able value or a callable returning
1222 Each props item must be a stringify-able value or a callable returning
1223 such value, i.e. no bare list nor dict should be passed.
1223 such value, i.e. no bare list nor dict should be passed.
1224 """
1224 """
1225 repo = ctx.repo()
1225 repo = ctx.repo()
1226 tres = formatter.templateresources(repo.ui, repo)
1226 tres = formatter.templateresources(repo.ui, repo)
1227 t = formatter.maketemplater(
1227 t = formatter.maketemplater(
1228 repo.ui, tmpl, defaults=templatekw.keywords, resources=tres
1228 repo.ui, tmpl, defaults=templatekw.keywords, resources=tres
1229 )
1229 )
1230 mapping = {b'ctx': ctx}
1230 mapping = {b'ctx': ctx}
1231 if props:
1231 if props:
1232 mapping.update(props)
1232 mapping.update(props)
1233 return t.renderdefault(mapping)
1233 return t.renderdefault(mapping)
1234
1234
1235
1235
1236 def format_changeset_summary(ui, ctx, command=None, default_spec=None):
1236 def format_changeset_summary(ui, ctx, command=None, default_spec=None):
1237 """Format a changeset summary (one line)."""
1237 """Format a changeset summary (one line)."""
1238 spec = None
1238 spec = None
1239 if command:
1239 if command:
1240 spec = ui.config(
1240 spec = ui.config(
1241 b'command-templates', b'oneline-summary.%s' % command, None
1241 b'command-templates', b'oneline-summary.%s' % command, None
1242 )
1242 )
1243 if not spec:
1243 if not spec:
1244 spec = ui.config(b'command-templates', b'oneline-summary')
1244 spec = ui.config(b'command-templates', b'oneline-summary')
1245 if not spec:
1245 if not spec:
1246 spec = default_spec
1246 spec = default_spec
1247 if not spec:
1247 if not spec:
1248 spec = (
1248 spec = (
1249 b'{separate(" ", '
1249 b'{separate(" ", '
1250 b'label("oneline-summary.changeset", "{rev}:{node|short}")'
1250 b'label("oneline-summary.changeset", "{rev}:{node|short}")'
1251 b', '
1251 b', '
1252 b'join(filter(namespaces % "{ifeq(namespace, "branches", "", join(names % "{label("oneline-summary.{namespace}", name)}", " "))}"), " ")'
1252 b'join(filter(namespaces % "{ifeq(namespace, "branches", "", join(names % "{label("oneline-summary.{namespace}", name)}", " "))}"), " ")'
1253 b')} '
1253 b')} '
1254 b'"{label("oneline-summary.desc", desc|firstline)}"'
1254 b'"{label("oneline-summary.desc", desc|firstline)}"'
1255 )
1255 )
1256 text = rendertemplate(ctx, spec)
1256 text = rendertemplate(ctx, spec)
1257 return text.split(b'\n')[0]
1257 return text.split(b'\n')[0]
1258
1258
1259
1259
1260 def _buildfntemplate(pat, total=None, seqno=None, revwidth=None, pathname=None):
1260 def _buildfntemplate(pat, total=None, seqno=None, revwidth=None, pathname=None):
1261 r"""Convert old-style filename format string to template string
1261 r"""Convert old-style filename format string to template string
1262
1262
1263 >>> _buildfntemplate(b'foo-%b-%n.patch', seqno=0)
1263 >>> _buildfntemplate(b'foo-%b-%n.patch', seqno=0)
1264 'foo-{reporoot|basename}-{seqno}.patch'
1264 'foo-{reporoot|basename}-{seqno}.patch'
1265 >>> _buildfntemplate(b'%R{tags % "{tag}"}%H')
1265 >>> _buildfntemplate(b'%R{tags % "{tag}"}%H')
1266 '{rev}{tags % "{tag}"}{node}'
1266 '{rev}{tags % "{tag}"}{node}'
1267
1267
1268 '\' in outermost strings has to be escaped because it is a directory
1268 '\' in outermost strings has to be escaped because it is a directory
1269 separator on Windows:
1269 separator on Windows:
1270
1270
1271 >>> _buildfntemplate(b'c:\\tmp\\%R\\%n.patch', seqno=0)
1271 >>> _buildfntemplate(b'c:\\tmp\\%R\\%n.patch', seqno=0)
1272 'c:\\\\tmp\\\\{rev}\\\\{seqno}.patch'
1272 'c:\\\\tmp\\\\{rev}\\\\{seqno}.patch'
1273 >>> _buildfntemplate(b'\\\\foo\\bar.patch')
1273 >>> _buildfntemplate(b'\\\\foo\\bar.patch')
1274 '\\\\\\\\foo\\\\bar.patch'
1274 '\\\\\\\\foo\\\\bar.patch'
1275 >>> _buildfntemplate(b'\\{tags % "{tag}"}')
1275 >>> _buildfntemplate(b'\\{tags % "{tag}"}')
1276 '\\\\{tags % "{tag}"}'
1276 '\\\\{tags % "{tag}"}'
1277
1277
1278 but inner strings follow the template rules (i.e. '\' is taken as an
1278 but inner strings follow the template rules (i.e. '\' is taken as an
1279 escape character):
1279 escape character):
1280
1280
1281 >>> _buildfntemplate(br'{"c:\tmp"}', seqno=0)
1281 >>> _buildfntemplate(br'{"c:\tmp"}', seqno=0)
1282 '{"c:\\tmp"}'
1282 '{"c:\\tmp"}'
1283 """
1283 """
1284 expander = {
1284 expander = {
1285 b'H': b'{node}',
1285 b'H': b'{node}',
1286 b'R': b'{rev}',
1286 b'R': b'{rev}',
1287 b'h': b'{node|short}',
1287 b'h': b'{node|short}',
1288 b'm': br'{sub(r"[^\w]", "_", desc|firstline)}',
1288 b'm': br'{sub(r"[^\w]", "_", desc|firstline)}',
1289 b'r': b'{if(revwidth, pad(rev, revwidth, "0", left=True), rev)}',
1289 b'r': b'{if(revwidth, pad(rev, revwidth, "0", left=True), rev)}',
1290 b'%': b'%',
1290 b'%': b'%',
1291 b'b': b'{reporoot|basename}',
1291 b'b': b'{reporoot|basename}',
1292 }
1292 }
1293 if total is not None:
1293 if total is not None:
1294 expander[b'N'] = b'{total}'
1294 expander[b'N'] = b'{total}'
1295 if seqno is not None:
1295 if seqno is not None:
1296 expander[b'n'] = b'{seqno}'
1296 expander[b'n'] = b'{seqno}'
1297 if total is not None and seqno is not None:
1297 if total is not None and seqno is not None:
1298 expander[b'n'] = b'{pad(seqno, total|stringify|count, "0", left=True)}'
1298 expander[b'n'] = b'{pad(seqno, total|stringify|count, "0", left=True)}'
1299 if pathname is not None:
1299 if pathname is not None:
1300 expander[b's'] = b'{pathname|basename}'
1300 expander[b's'] = b'{pathname|basename}'
1301 expander[b'd'] = b'{if(pathname|dirname, pathname|dirname, ".")}'
1301 expander[b'd'] = b'{if(pathname|dirname, pathname|dirname, ".")}'
1302 expander[b'p'] = b'{pathname}'
1302 expander[b'p'] = b'{pathname}'
1303
1303
1304 newname = []
1304 newname = []
1305 for typ, start, end in templater.scantemplate(pat, raw=True):
1305 for typ, start, end in templater.scantemplate(pat, raw=True):
1306 if typ != b'string':
1306 if typ != b'string':
1307 newname.append(pat[start:end])
1307 newname.append(pat[start:end])
1308 continue
1308 continue
1309 i = start
1309 i = start
1310 while i < end:
1310 while i < end:
1311 n = pat.find(b'%', i, end)
1311 n = pat.find(b'%', i, end)
1312 if n < 0:
1312 if n < 0:
1313 newname.append(stringutil.escapestr(pat[i:end]))
1313 newname.append(stringutil.escapestr(pat[i:end]))
1314 break
1314 break
1315 newname.append(stringutil.escapestr(pat[i:n]))
1315 newname.append(stringutil.escapestr(pat[i:n]))
1316 if n + 2 > end:
1316 if n + 2 > end:
1317 raise error.Abort(
1317 raise error.Abort(
1318 _(b"incomplete format spec in output filename")
1318 _(b"incomplete format spec in output filename")
1319 )
1319 )
1320 c = pat[n + 1 : n + 2]
1320 c = pat[n + 1 : n + 2]
1321 i = n + 2
1321 i = n + 2
1322 try:
1322 try:
1323 newname.append(expander[c])
1323 newname.append(expander[c])
1324 except KeyError:
1324 except KeyError:
1325 raise error.Abort(
1325 raise error.Abort(
1326 _(b"invalid format spec '%%%s' in output filename") % c
1326 _(b"invalid format spec '%%%s' in output filename") % c
1327 )
1327 )
1328 return b''.join(newname)
1328 return b''.join(newname)
1329
1329
1330
1330
1331 def makefilename(ctx, pat, **props):
1331 def makefilename(ctx, pat, **props):
1332 if not pat:
1332 if not pat:
1333 return pat
1333 return pat
1334 tmpl = _buildfntemplate(pat, **props)
1334 tmpl = _buildfntemplate(pat, **props)
1335 # BUG: alias expansion shouldn't be made against template fragments
1335 # BUG: alias expansion shouldn't be made against template fragments
1336 # rewritten from %-format strings, but we have no easy way to partially
1336 # rewritten from %-format strings, but we have no easy way to partially
1337 # disable the expansion.
1337 # disable the expansion.
1338 return rendertemplate(ctx, tmpl, pycompat.byteskwargs(props))
1338 return rendertemplate(ctx, tmpl, pycompat.byteskwargs(props))
1339
1339
1340
1340
1341 def isstdiofilename(pat):
1341 def isstdiofilename(pat):
1342 """True if the given pat looks like a filename denoting stdin/stdout"""
1342 """True if the given pat looks like a filename denoting stdin/stdout"""
1343 return not pat or pat == b'-'
1343 return not pat or pat == b'-'
1344
1344
1345
1345
1346 class _unclosablefile:
1346 class _unclosablefile:
1347 def __init__(self, fp):
1347 def __init__(self, fp):
1348 self._fp = fp
1348 self._fp = fp
1349
1349
1350 def close(self):
1350 def close(self):
1351 pass
1351 pass
1352
1352
1353 def __iter__(self):
1353 def __iter__(self):
1354 return iter(self._fp)
1354 return iter(self._fp)
1355
1355
1356 def __getattr__(self, attr):
1356 def __getattr__(self, attr):
1357 return getattr(self._fp, attr)
1357 return getattr(self._fp, attr)
1358
1358
1359 def __enter__(self):
1359 def __enter__(self):
1360 return self
1360 return self
1361
1361
1362 def __exit__(self, exc_type, exc_value, exc_tb):
1362 def __exit__(self, exc_type, exc_value, exc_tb):
1363 pass
1363 pass
1364
1364
1365
1365
1366 def makefileobj(ctx, pat, mode=b'wb', **props):
1366 def makefileobj(ctx, pat, mode=b'wb', **props):
1367 writable = mode not in (b'r', b'rb')
1367 writable = mode not in (b'r', b'rb')
1368
1368
1369 if isstdiofilename(pat):
1369 if isstdiofilename(pat):
1370 repo = ctx.repo()
1370 repo = ctx.repo()
1371 if writable:
1371 if writable:
1372 fp = repo.ui.fout
1372 fp = repo.ui.fout
1373 else:
1373 else:
1374 fp = repo.ui.fin
1374 fp = repo.ui.fin
1375 return _unclosablefile(fp)
1375 return _unclosablefile(fp)
1376 fn = makefilename(ctx, pat, **props)
1376 fn = makefilename(ctx, pat, **props)
1377 return open(fn, mode)
1377 return open(fn, mode)
1378
1378
1379
1379
1380 def openstorage(repo, cmd, file_, opts, returnrevlog=False):
1380 def openstorage(repo, cmd, file_, opts, returnrevlog=False):
1381 """opens the changelog, manifest, a filelog or a given revlog"""
1381 """opens the changelog, manifest, a filelog or a given revlog"""
1382 cl = opts[b'changelog']
1382 cl = opts[b'changelog']
1383 mf = opts[b'manifest']
1383 mf = opts[b'manifest']
1384 dir = opts[b'dir']
1384 dir = opts[b'dir']
1385 msg = None
1385 msg = None
1386 if cl and mf:
1386 if cl and mf:
1387 msg = _(b'cannot specify --changelog and --manifest at the same time')
1387 msg = _(b'cannot specify --changelog and --manifest at the same time')
1388 elif cl and dir:
1388 elif cl and dir:
1389 msg = _(b'cannot specify --changelog and --dir at the same time')
1389 msg = _(b'cannot specify --changelog and --dir at the same time')
1390 elif cl or mf or dir:
1390 elif cl or mf or dir:
1391 if file_:
1391 if file_:
1392 msg = _(b'cannot specify filename with --changelog or --manifest')
1392 msg = _(b'cannot specify filename with --changelog or --manifest')
1393 elif not repo:
1393 elif not repo:
1394 msg = _(
1394 msg = _(
1395 b'cannot specify --changelog or --manifest or --dir '
1395 b'cannot specify --changelog or --manifest or --dir '
1396 b'without a repository'
1396 b'without a repository'
1397 )
1397 )
1398 if msg:
1398 if msg:
1399 raise error.InputError(msg)
1399 raise error.InputError(msg)
1400
1400
1401 r = None
1401 r = None
1402 if repo:
1402 if repo:
1403 if cl:
1403 if cl:
1404 r = repo.unfiltered().changelog
1404 r = repo.unfiltered().changelog
1405 elif dir:
1405 elif dir:
1406 if not scmutil.istreemanifest(repo):
1406 if not scmutil.istreemanifest(repo):
1407 raise error.InputError(
1407 raise error.InputError(
1408 _(
1408 _(
1409 b"--dir can only be used on repos with "
1409 b"--dir can only be used on repos with "
1410 b"treemanifest enabled"
1410 b"treemanifest enabled"
1411 )
1411 )
1412 )
1412 )
1413 if not dir.endswith(b'/'):
1413 if not dir.endswith(b'/'):
1414 dir = dir + b'/'
1414 dir = dir + b'/'
1415 dirlog = repo.manifestlog.getstorage(dir)
1415 dirlog = repo.manifestlog.getstorage(dir)
1416 if len(dirlog):
1416 if len(dirlog):
1417 r = dirlog
1417 r = dirlog
1418 elif mf:
1418 elif mf:
1419 r = repo.manifestlog.getstorage(b'')
1419 r = repo.manifestlog.getstorage(b'')
1420 elif file_:
1420 elif file_:
1421 filelog = repo.file(file_)
1421 filelog = repo.file(file_)
1422 if len(filelog):
1422 if len(filelog):
1423 r = filelog
1423 r = filelog
1424
1424
1425 # Not all storage may be revlogs. If requested, try to return an actual
1425 # Not all storage may be revlogs. If requested, try to return an actual
1426 # revlog instance.
1426 # revlog instance.
1427 if returnrevlog:
1427 if returnrevlog:
1428 if isinstance(r, revlog.revlog):
1428 if isinstance(r, revlog.revlog):
1429 pass
1429 pass
1430 elif util.safehasattr(r, b'_revlog'):
1430 elif util.safehasattr(r, b'_revlog'):
1431 r = r._revlog # pytype: disable=attribute-error
1431 r = r._revlog # pytype: disable=attribute-error
1432 elif r is not None:
1432 elif r is not None:
1433 raise error.InputError(
1433 raise error.InputError(
1434 _(b'%r does not appear to be a revlog') % r
1434 _(b'%r does not appear to be a revlog') % r
1435 )
1435 )
1436
1436
1437 if not r:
1437 if not r:
1438 if not returnrevlog:
1438 if not returnrevlog:
1439 raise error.InputError(_(b'cannot give path to non-revlog'))
1439 raise error.InputError(_(b'cannot give path to non-revlog'))
1440
1440
1441 if not file_:
1441 if not file_:
1442 raise error.CommandError(cmd, _(b'invalid arguments'))
1442 raise error.CommandError(cmd, _(b'invalid arguments'))
1443 if not os.path.isfile(file_):
1443 if not os.path.isfile(file_):
1444 raise error.InputError(_(b"revlog '%s' not found") % file_)
1444 raise error.InputError(_(b"revlog '%s' not found") % file_)
1445
1445
1446 target = (revlog_constants.KIND_OTHER, b'free-form:%s' % file_)
1446 target = (revlog_constants.KIND_OTHER, b'free-form:%s' % file_)
1447 r = revlog.revlog(
1447 r = revlog.revlog(
1448 vfsmod.vfs(encoding.getcwd(), audit=False),
1448 vfsmod.vfs(encoding.getcwd(), audit=False),
1449 target=target,
1449 target=target,
1450 radix=file_[:-2],
1450 radix=file_[:-2],
1451 )
1451 )
1452 return r
1452 return r
1453
1453
1454
1454
1455 def openrevlog(repo, cmd, file_, opts):
1455 def openrevlog(repo, cmd, file_, opts):
1456 """Obtain a revlog backing storage of an item.
1456 """Obtain a revlog backing storage of an item.
1457
1457
1458 This is similar to ``openstorage()`` except it always returns a revlog.
1458 This is similar to ``openstorage()`` except it always returns a revlog.
1459
1459
1460 In most cases, a caller cares about the main storage object - not the
1460 In most cases, a caller cares about the main storage object - not the
1461 revlog backing it. Therefore, this function should only be used by code
1461 revlog backing it. Therefore, this function should only be used by code
1462 that needs to examine low-level revlog implementation details. e.g. debug
1462 that needs to examine low-level revlog implementation details. e.g. debug
1463 commands.
1463 commands.
1464 """
1464 """
1465 return openstorage(repo, cmd, file_, opts, returnrevlog=True)
1465 return openstorage(repo, cmd, file_, opts, returnrevlog=True)
1466
1466
1467
1467
1468 def copy(ui, repo, pats, opts, rename=False):
1468 def copy(ui, repo, pats, opts, rename=False):
1469 check_incompatible_arguments(opts, b'forget', [b'dry_run'])
1469 check_incompatible_arguments(opts, b'forget', [b'dry_run'])
1470
1470
1471 # called with the repo lock held
1471 # called with the repo lock held
1472 #
1472 #
1473 # hgsep => pathname that uses "/" to separate directories
1473 # hgsep => pathname that uses "/" to separate directories
1474 # ossep => pathname that uses os.sep to separate directories
1474 # ossep => pathname that uses os.sep to separate directories
1475 cwd = repo.getcwd()
1475 cwd = repo.getcwd()
1476 targets = {}
1476 targets = {}
1477 forget = opts.get(b"forget")
1477 forget = opts.get(b"forget")
1478 after = opts.get(b"after")
1478 after = opts.get(b"after")
1479 dryrun = opts.get(b"dry_run")
1479 dryrun = opts.get(b"dry_run")
1480 rev = opts.get(b'at_rev')
1480 rev = opts.get(b'at_rev')
1481 if rev:
1481 if rev:
1482 if not forget and not after:
1482 if not forget and not after:
1483 # TODO: Remove this restriction and make it also create the copy
1483 # TODO: Remove this restriction and make it also create the copy
1484 # targets (and remove the rename source if rename==True).
1484 # targets (and remove the rename source if rename==True).
1485 raise error.InputError(_(b'--at-rev requires --after'))
1485 raise error.InputError(_(b'--at-rev requires --after'))
1486 ctx = logcmdutil.revsingle(repo, rev)
1486 ctx = logcmdutil.revsingle(repo, rev)
1487 if len(ctx.parents()) > 1:
1487 if len(ctx.parents()) > 1:
1488 raise error.InputError(
1488 raise error.InputError(
1489 _(b'cannot mark/unmark copy in merge commit')
1489 _(b'cannot mark/unmark copy in merge commit')
1490 )
1490 )
1491 else:
1491 else:
1492 ctx = repo[None]
1492 ctx = repo[None]
1493
1493
1494 pctx = ctx.p1()
1494 pctx = ctx.p1()
1495
1495
1496 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
1496 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
1497
1497
1498 if forget:
1498 if forget:
1499 if ctx.rev() is None:
1499 if ctx.rev() is None:
1500 new_ctx = ctx
1500 new_ctx = ctx
1501 else:
1501 else:
1502 if len(ctx.parents()) > 1:
1502 if len(ctx.parents()) > 1:
1503 raise error.InputError(_(b'cannot unmark copy in merge commit'))
1503 raise error.InputError(_(b'cannot unmark copy in merge commit'))
1504 # avoid cycle context -> subrepo -> cmdutil
1504 # avoid cycle context -> subrepo -> cmdutil
1505 from . import context
1505 from . import context
1506
1506
1507 rewriteutil.precheck(repo, [ctx.rev()], b'uncopy')
1507 rewriteutil.precheck(repo, [ctx.rev()], b'uncopy')
1508 new_ctx = context.overlayworkingctx(repo)
1508 new_ctx = context.overlayworkingctx(repo)
1509 new_ctx.setbase(ctx.p1())
1509 new_ctx.setbase(ctx.p1())
1510 mergemod.graft(repo, ctx, wctx=new_ctx)
1510 mergemod.graft(repo, ctx, wctx=new_ctx)
1511
1511
1512 match = scmutil.match(ctx, pats, opts)
1512 match = scmutil.match(ctx, pats, opts)
1513
1513
1514 current_copies = ctx.p1copies()
1514 current_copies = ctx.p1copies()
1515 current_copies.update(ctx.p2copies())
1515 current_copies.update(ctx.p2copies())
1516
1516
1517 uipathfn = scmutil.getuipathfn(repo)
1517 uipathfn = scmutil.getuipathfn(repo)
1518 for f in ctx.walk(match):
1518 for f in ctx.walk(match):
1519 if f in current_copies:
1519 if f in current_copies:
1520 new_ctx[f].markcopied(None)
1520 new_ctx[f].markcopied(None)
1521 elif match.exact(f):
1521 elif match.exact(f):
1522 ui.warn(
1522 ui.warn(
1523 _(
1523 _(
1524 b'%s: not unmarking as copy - file is not marked as copied\n'
1524 b'%s: not unmarking as copy - file is not marked as copied\n'
1525 )
1525 )
1526 % uipathfn(f)
1526 % uipathfn(f)
1527 )
1527 )
1528
1528
1529 if ctx.rev() is not None:
1529 if ctx.rev() is not None:
1530 with repo.lock():
1530 with repo.lock():
1531 mem_ctx = new_ctx.tomemctx_for_amend(ctx)
1531 mem_ctx = new_ctx.tomemctx_for_amend(ctx)
1532 new_node = mem_ctx.commit()
1532 new_node = mem_ctx.commit()
1533
1533
1534 if repo.dirstate.p1() == ctx.node():
1534 if repo.dirstate.p1() == ctx.node():
1535 with repo.dirstate.parentchange():
1535 with repo.dirstate.parentchange():
1536 scmutil.movedirstate(repo, repo[new_node])
1536 scmutil.movedirstate(repo, repo[new_node])
1537 replacements = {ctx.node(): [new_node]}
1537 replacements = {ctx.node(): [new_node]}
1538 scmutil.cleanupnodes(
1538 scmutil.cleanupnodes(
1539 repo, replacements, b'uncopy', fixphase=True
1539 repo, replacements, b'uncopy', fixphase=True
1540 )
1540 )
1541
1541
1542 return
1542 return
1543
1543
1544 pats = scmutil.expandpats(pats)
1544 pats = scmutil.expandpats(pats)
1545 if not pats:
1545 if not pats:
1546 raise error.InputError(_(b'no source or destination specified'))
1546 raise error.InputError(_(b'no source or destination specified'))
1547 if len(pats) == 1:
1547 if len(pats) == 1:
1548 raise error.InputError(_(b'no destination specified'))
1548 raise error.InputError(_(b'no destination specified'))
1549 dest = pats.pop()
1549 dest = pats.pop()
1550
1550
1551 def walkpat(pat):
1551 def walkpat(pat):
1552 srcs = []
1552 srcs = []
1553 # TODO: Inline and simplify the non-working-copy version of this code
1553 # TODO: Inline and simplify the non-working-copy version of this code
1554 # since it shares very little with the working-copy version of it.
1554 # since it shares very little with the working-copy version of it.
1555 ctx_to_walk = ctx if ctx.rev() is None else pctx
1555 ctx_to_walk = ctx if ctx.rev() is None else pctx
1556 m = scmutil.match(ctx_to_walk, [pat], opts, globbed=True)
1556 m = scmutil.match(ctx_to_walk, [pat], opts, globbed=True)
1557 for abs in ctx_to_walk.walk(m):
1557 for abs in ctx_to_walk.walk(m):
1558 rel = uipathfn(abs)
1558 rel = uipathfn(abs)
1559 exact = m.exact(abs)
1559 exact = m.exact(abs)
1560 if abs not in ctx:
1560 if abs not in ctx:
1561 if abs in pctx:
1561 if abs in pctx:
1562 if not after:
1562 if not after:
1563 if exact:
1563 if exact:
1564 ui.warn(
1564 ui.warn(
1565 _(
1565 _(
1566 b'%s: not copying - file has been marked '
1566 b'%s: not copying - file has been marked '
1567 b'for remove\n'
1567 b'for remove\n'
1568 )
1568 )
1569 % rel
1569 % rel
1570 )
1570 )
1571 continue
1571 continue
1572 else:
1572 else:
1573 if exact:
1573 if exact:
1574 ui.warn(
1574 ui.warn(
1575 _(b'%s: not copying - file is not managed\n') % rel
1575 _(b'%s: not copying - file is not managed\n') % rel
1576 )
1576 )
1577 continue
1577 continue
1578
1578
1579 # abs: hgsep
1579 # abs: hgsep
1580 # rel: ossep
1580 # rel: ossep
1581 srcs.append((abs, rel, exact))
1581 srcs.append((abs, rel, exact))
1582 return srcs
1582 return srcs
1583
1583
1584 if ctx.rev() is not None:
1584 if ctx.rev() is not None:
1585 rewriteutil.precheck(repo, [ctx.rev()], b'uncopy')
1585 rewriteutil.precheck(repo, [ctx.rev()], b'uncopy')
1586 absdest = pathutil.canonpath(repo.root, cwd, dest)
1586 absdest = pathutil.canonpath(repo.root, cwd, dest)
1587 if ctx.hasdir(absdest):
1587 if ctx.hasdir(absdest):
1588 raise error.InputError(
1588 raise error.InputError(
1589 _(b'%s: --at-rev does not support a directory as destination')
1589 _(b'%s: --at-rev does not support a directory as destination')
1590 % uipathfn(absdest)
1590 % uipathfn(absdest)
1591 )
1591 )
1592 if absdest not in ctx:
1592 if absdest not in ctx:
1593 raise error.InputError(
1593 raise error.InputError(
1594 _(b'%s: copy destination does not exist in %s')
1594 _(b'%s: copy destination does not exist in %s')
1595 % (uipathfn(absdest), ctx)
1595 % (uipathfn(absdest), ctx)
1596 )
1596 )
1597
1597
1598 # avoid cycle context -> subrepo -> cmdutil
1598 # avoid cycle context -> subrepo -> cmdutil
1599 from . import context
1599 from . import context
1600
1600
1601 copylist = []
1601 copylist = []
1602 for pat in pats:
1602 for pat in pats:
1603 srcs = walkpat(pat)
1603 srcs = walkpat(pat)
1604 if not srcs:
1604 if not srcs:
1605 continue
1605 continue
1606 for abs, rel, exact in srcs:
1606 for abs, rel, exact in srcs:
1607 copylist.append(abs)
1607 copylist.append(abs)
1608
1608
1609 if not copylist:
1609 if not copylist:
1610 raise error.InputError(_(b'no files to copy'))
1610 raise error.InputError(_(b'no files to copy'))
1611 # TODO: Add support for `hg cp --at-rev . foo bar dir` and
1611 # TODO: Add support for `hg cp --at-rev . foo bar dir` and
1612 # `hg cp --at-rev . dir1 dir2`, preferably unifying the code with the
1612 # `hg cp --at-rev . dir1 dir2`, preferably unifying the code with the
1613 # existing functions below.
1613 # existing functions below.
1614 if len(copylist) != 1:
1614 if len(copylist) != 1:
1615 raise error.InputError(_(b'--at-rev requires a single source'))
1615 raise error.InputError(_(b'--at-rev requires a single source'))
1616
1616
1617 new_ctx = context.overlayworkingctx(repo)
1617 new_ctx = context.overlayworkingctx(repo)
1618 new_ctx.setbase(ctx.p1())
1618 new_ctx.setbase(ctx.p1())
1619 mergemod.graft(repo, ctx, wctx=new_ctx)
1619 mergemod.graft(repo, ctx, wctx=new_ctx)
1620
1620
1621 new_ctx.markcopied(absdest, copylist[0])
1621 new_ctx.markcopied(absdest, copylist[0])
1622
1622
1623 with repo.lock():
1623 with repo.lock():
1624 mem_ctx = new_ctx.tomemctx_for_amend(ctx)
1624 mem_ctx = new_ctx.tomemctx_for_amend(ctx)
1625 new_node = mem_ctx.commit()
1625 new_node = mem_ctx.commit()
1626
1626
1627 if repo.dirstate.p1() == ctx.node():
1627 if repo.dirstate.p1() == ctx.node():
1628 with repo.dirstate.parentchange():
1628 with repo.dirstate.parentchange():
1629 scmutil.movedirstate(repo, repo[new_node])
1629 scmutil.movedirstate(repo, repo[new_node])
1630 replacements = {ctx.node(): [new_node]}
1630 replacements = {ctx.node(): [new_node]}
1631 scmutil.cleanupnodes(repo, replacements, b'copy', fixphase=True)
1631 scmutil.cleanupnodes(repo, replacements, b'copy', fixphase=True)
1632
1632
1633 return
1633 return
1634
1634
1635 # abssrc: hgsep
1635 # abssrc: hgsep
1636 # relsrc: ossep
1636 # relsrc: ossep
1637 # otarget: ossep
1637 # otarget: ossep
1638 def copyfile(abssrc, relsrc, otarget, exact):
1638 def copyfile(abssrc, relsrc, otarget, exact):
1639 abstarget = pathutil.canonpath(repo.root, cwd, otarget)
1639 abstarget = pathutil.canonpath(repo.root, cwd, otarget)
1640 if b'/' in abstarget:
1640 if b'/' in abstarget:
1641 # We cannot normalize abstarget itself, this would prevent
1641 # We cannot normalize abstarget itself, this would prevent
1642 # case only renames, like a => A.
1642 # case only renames, like a => A.
1643 abspath, absname = abstarget.rsplit(b'/', 1)
1643 abspath, absname = abstarget.rsplit(b'/', 1)
1644 abstarget = repo.dirstate.normalize(abspath) + b'/' + absname
1644 abstarget = repo.dirstate.normalize(abspath) + b'/' + absname
1645 reltarget = repo.pathto(abstarget, cwd)
1645 reltarget = repo.pathto(abstarget, cwd)
1646 target = repo.wjoin(abstarget)
1646 target = repo.wjoin(abstarget)
1647 src = repo.wjoin(abssrc)
1647 src = repo.wjoin(abssrc)
1648 entry = repo.dirstate.get_entry(abstarget)
1648 entry = repo.dirstate.get_entry(abstarget)
1649
1649
1650 already_commited = entry.tracked and not entry.added
1650 already_commited = entry.tracked and not entry.added
1651
1651
1652 scmutil.checkportable(ui, abstarget)
1652 scmutil.checkportable(ui, abstarget)
1653
1653
1654 # check for collisions
1654 # check for collisions
1655 prevsrc = targets.get(abstarget)
1655 prevsrc = targets.get(abstarget)
1656 if prevsrc is not None:
1656 if prevsrc is not None:
1657 ui.warn(
1657 ui.warn(
1658 _(b'%s: not overwriting - %s collides with %s\n')
1658 _(b'%s: not overwriting - %s collides with %s\n')
1659 % (
1659 % (
1660 reltarget,
1660 reltarget,
1661 repo.pathto(abssrc, cwd),
1661 repo.pathto(abssrc, cwd),
1662 repo.pathto(prevsrc, cwd),
1662 repo.pathto(prevsrc, cwd),
1663 )
1663 )
1664 )
1664 )
1665 return True # report a failure
1665 return True # report a failure
1666
1666
1667 # check for overwrites
1667 # check for overwrites
1668 exists = os.path.lexists(target)
1668 exists = os.path.lexists(target)
1669 samefile = False
1669 samefile = False
1670 if exists and abssrc != abstarget:
1670 if exists and abssrc != abstarget:
1671 if repo.dirstate.normalize(abssrc) == repo.dirstate.normalize(
1671 if repo.dirstate.normalize(abssrc) == repo.dirstate.normalize(
1672 abstarget
1672 abstarget
1673 ):
1673 ):
1674 if not rename:
1674 if not rename:
1675 ui.warn(_(b"%s: can't copy - same file\n") % reltarget)
1675 ui.warn(_(b"%s: can't copy - same file\n") % reltarget)
1676 return True # report a failure
1676 return True # report a failure
1677 exists = False
1677 exists = False
1678 samefile = True
1678 samefile = True
1679
1679
1680 if not after and exists or after and already_commited:
1680 if not after and exists or after and already_commited:
1681 if not opts[b'force']:
1681 if not opts[b'force']:
1682 if already_commited:
1682 if already_commited:
1683 msg = _(b'%s: not overwriting - file already committed\n')
1683 msg = _(b'%s: not overwriting - file already committed\n')
1684 # Check if if the target was added in the parent and the
1684 # Check if if the target was added in the parent and the
1685 # source already existed in the grandparent.
1685 # source already existed in the grandparent.
1686 looks_like_copy_in_pctx = abstarget in pctx and any(
1686 looks_like_copy_in_pctx = abstarget in pctx and any(
1687 abssrc in gpctx and abstarget not in gpctx
1687 abssrc in gpctx and abstarget not in gpctx
1688 for gpctx in pctx.parents()
1688 for gpctx in pctx.parents()
1689 )
1689 )
1690 if looks_like_copy_in_pctx:
1690 if looks_like_copy_in_pctx:
1691 if rename:
1691 if rename:
1692 hint = _(
1692 hint = _(
1693 b"('hg rename --at-rev .' to record the rename "
1693 b"('hg rename --at-rev .' to record the rename "
1694 b"in the parent of the working copy)\n"
1694 b"in the parent of the working copy)\n"
1695 )
1695 )
1696 else:
1696 else:
1697 hint = _(
1697 hint = _(
1698 b"('hg copy --at-rev .' to record the copy in "
1698 b"('hg copy --at-rev .' to record the copy in "
1699 b"the parent of the working copy)\n"
1699 b"the parent of the working copy)\n"
1700 )
1700 )
1701 else:
1701 else:
1702 if after:
1702 if after:
1703 flags = b'--after --force'
1703 flags = b'--after --force'
1704 else:
1704 else:
1705 flags = b'--force'
1705 flags = b'--force'
1706 if rename:
1706 if rename:
1707 hint = (
1707 hint = (
1708 _(
1708 _(
1709 b"('hg rename %s' to replace the file by "
1709 b"('hg rename %s' to replace the file by "
1710 b'recording a rename)\n'
1710 b'recording a rename)\n'
1711 )
1711 )
1712 % flags
1712 % flags
1713 )
1713 )
1714 else:
1714 else:
1715 hint = (
1715 hint = (
1716 _(
1716 _(
1717 b"('hg copy %s' to replace the file by "
1717 b"('hg copy %s' to replace the file by "
1718 b'recording a copy)\n'
1718 b'recording a copy)\n'
1719 )
1719 )
1720 % flags
1720 % flags
1721 )
1721 )
1722 else:
1722 else:
1723 msg = _(b'%s: not overwriting - file exists\n')
1723 msg = _(b'%s: not overwriting - file exists\n')
1724 if rename:
1724 if rename:
1725 hint = _(
1725 hint = _(
1726 b"('hg rename --after' to record the rename)\n"
1726 b"('hg rename --after' to record the rename)\n"
1727 )
1727 )
1728 else:
1728 else:
1729 hint = _(b"('hg copy --after' to record the copy)\n")
1729 hint = _(b"('hg copy --after' to record the copy)\n")
1730 ui.warn(msg % reltarget)
1730 ui.warn(msg % reltarget)
1731 ui.warn(hint)
1731 ui.warn(hint)
1732 return True # report a failure
1732 return True # report a failure
1733
1733
1734 if after:
1734 if after:
1735 if not exists:
1735 if not exists:
1736 if rename:
1736 if rename:
1737 ui.warn(
1737 ui.warn(
1738 _(b'%s: not recording move - %s does not exist\n')
1738 _(b'%s: not recording move - %s does not exist\n')
1739 % (relsrc, reltarget)
1739 % (relsrc, reltarget)
1740 )
1740 )
1741 else:
1741 else:
1742 ui.warn(
1742 ui.warn(
1743 _(b'%s: not recording copy - %s does not exist\n')
1743 _(b'%s: not recording copy - %s does not exist\n')
1744 % (relsrc, reltarget)
1744 % (relsrc, reltarget)
1745 )
1745 )
1746 return True # report a failure
1746 return True # report a failure
1747 elif not dryrun:
1747 elif not dryrun:
1748 try:
1748 try:
1749 if exists:
1749 if exists:
1750 os.unlink(target)
1750 os.unlink(target)
1751 targetdir = os.path.dirname(target) or b'.'
1751 targetdir = os.path.dirname(target) or b'.'
1752 if not os.path.isdir(targetdir):
1752 if not os.path.isdir(targetdir):
1753 os.makedirs(targetdir)
1753 os.makedirs(targetdir)
1754 if samefile:
1754 if samefile:
1755 tmp = target + b"~hgrename"
1755 tmp = target + b"~hgrename"
1756 os.rename(src, tmp)
1756 os.rename(src, tmp)
1757 os.rename(tmp, target)
1757 os.rename(tmp, target)
1758 else:
1758 else:
1759 # Preserve stat info on renames, not on copies; this matches
1759 # Preserve stat info on renames, not on copies; this matches
1760 # Linux CLI behavior.
1760 # Linux CLI behavior.
1761 util.copyfile(src, target, copystat=rename)
1761 util.copyfile(src, target, copystat=rename)
1762 srcexists = True
1762 srcexists = True
1763 except IOError as inst:
1763 except IOError as inst:
1764 if inst.errno == errno.ENOENT:
1764 if inst.errno == errno.ENOENT:
1765 ui.warn(_(b'%s: deleted in working directory\n') % relsrc)
1765 ui.warn(_(b'%s: deleted in working directory\n') % relsrc)
1766 srcexists = False
1766 srcexists = False
1767 else:
1767 else:
1768 ui.warn(
1768 ui.warn(
1769 _(b'%s: cannot copy - %s\n')
1769 _(b'%s: cannot copy - %s\n')
1770 % (relsrc, encoding.strtolocal(inst.strerror))
1770 % (relsrc, encoding.strtolocal(inst.strerror))
1771 )
1771 )
1772 return True # report a failure
1772 return True # report a failure
1773
1773
1774 if ui.verbose or not exact:
1774 if ui.verbose or not exact:
1775 if rename:
1775 if rename:
1776 ui.status(_(b'moving %s to %s\n') % (relsrc, reltarget))
1776 ui.status(_(b'moving %s to %s\n') % (relsrc, reltarget))
1777 else:
1777 else:
1778 ui.status(_(b'copying %s to %s\n') % (relsrc, reltarget))
1778 ui.status(_(b'copying %s to %s\n') % (relsrc, reltarget))
1779
1779
1780 targets[abstarget] = abssrc
1780 targets[abstarget] = abssrc
1781
1781
1782 # fix up dirstate
1782 # fix up dirstate
1783 scmutil.dirstatecopy(
1783 scmutil.dirstatecopy(
1784 ui, repo, ctx, abssrc, abstarget, dryrun=dryrun, cwd=cwd
1784 ui, repo, ctx, abssrc, abstarget, dryrun=dryrun, cwd=cwd
1785 )
1785 )
1786 if rename and not dryrun:
1786 if rename and not dryrun:
1787 if not after and srcexists and not samefile:
1787 if not after and srcexists and not samefile:
1788 rmdir = repo.ui.configbool(b'experimental', b'removeemptydirs')
1788 rmdir = repo.ui.configbool(b'experimental', b'removeemptydirs')
1789 repo.wvfs.unlinkpath(abssrc, rmdir=rmdir)
1789 repo.wvfs.unlinkpath(abssrc, rmdir=rmdir)
1790 ctx.forget([abssrc])
1790 ctx.forget([abssrc])
1791
1791
1792 # pat: ossep
1792 # pat: ossep
1793 # dest ossep
1793 # dest ossep
1794 # srcs: list of (hgsep, hgsep, ossep, bool)
1794 # srcs: list of (hgsep, hgsep, ossep, bool)
1795 # return: function that takes hgsep and returns ossep
1795 # return: function that takes hgsep and returns ossep
1796 def targetpathfn(pat, dest, srcs):
1796 def targetpathfn(pat, dest, srcs):
1797 if os.path.isdir(pat):
1797 if os.path.isdir(pat):
1798 abspfx = pathutil.canonpath(repo.root, cwd, pat)
1798 abspfx = pathutil.canonpath(repo.root, cwd, pat)
1799 abspfx = util.localpath(abspfx)
1799 abspfx = util.localpath(abspfx)
1800 if destdirexists:
1800 if destdirexists:
1801 striplen = len(os.path.split(abspfx)[0])
1801 striplen = len(os.path.split(abspfx)[0])
1802 else:
1802 else:
1803 striplen = len(abspfx)
1803 striplen = len(abspfx)
1804 if striplen:
1804 if striplen:
1805 striplen += len(pycompat.ossep)
1805 striplen += len(pycompat.ossep)
1806 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:])
1806 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:])
1807 elif destdirexists:
1807 elif destdirexists:
1808 res = lambda p: os.path.join(
1808 res = lambda p: os.path.join(
1809 dest, os.path.basename(util.localpath(p))
1809 dest, os.path.basename(util.localpath(p))
1810 )
1810 )
1811 else:
1811 else:
1812 res = lambda p: dest
1812 res = lambda p: dest
1813 return res
1813 return res
1814
1814
1815 # pat: ossep
1815 # pat: ossep
1816 # dest ossep
1816 # dest ossep
1817 # srcs: list of (hgsep, hgsep, ossep, bool)
1817 # srcs: list of (hgsep, hgsep, ossep, bool)
1818 # return: function that takes hgsep and returns ossep
1818 # return: function that takes hgsep and returns ossep
1819 def targetpathafterfn(pat, dest, srcs):
1819 def targetpathafterfn(pat, dest, srcs):
1820 if matchmod.patkind(pat):
1820 if matchmod.patkind(pat):
1821 # a mercurial pattern
1821 # a mercurial pattern
1822 res = lambda p: os.path.join(
1822 res = lambda p: os.path.join(
1823 dest, os.path.basename(util.localpath(p))
1823 dest, os.path.basename(util.localpath(p))
1824 )
1824 )
1825 else:
1825 else:
1826 abspfx = pathutil.canonpath(repo.root, cwd, pat)
1826 abspfx = pathutil.canonpath(repo.root, cwd, pat)
1827 if len(abspfx) < len(srcs[0][0]):
1827 if len(abspfx) < len(srcs[0][0]):
1828 # A directory. Either the target path contains the last
1828 # A directory. Either the target path contains the last
1829 # component of the source path or it does not.
1829 # component of the source path or it does not.
1830 def evalpath(striplen):
1830 def evalpath(striplen):
1831 score = 0
1831 score = 0
1832 for s in srcs:
1832 for s in srcs:
1833 t = os.path.join(dest, util.localpath(s[0])[striplen:])
1833 t = os.path.join(dest, util.localpath(s[0])[striplen:])
1834 if os.path.lexists(t):
1834 if os.path.lexists(t):
1835 score += 1
1835 score += 1
1836 return score
1836 return score
1837
1837
1838 abspfx = util.localpath(abspfx)
1838 abspfx = util.localpath(abspfx)
1839 striplen = len(abspfx)
1839 striplen = len(abspfx)
1840 if striplen:
1840 if striplen:
1841 striplen += len(pycompat.ossep)
1841 striplen += len(pycompat.ossep)
1842 if os.path.isdir(os.path.join(dest, os.path.split(abspfx)[1])):
1842 if os.path.isdir(os.path.join(dest, os.path.split(abspfx)[1])):
1843 score = evalpath(striplen)
1843 score = evalpath(striplen)
1844 striplen1 = len(os.path.split(abspfx)[0])
1844 striplen1 = len(os.path.split(abspfx)[0])
1845 if striplen1:
1845 if striplen1:
1846 striplen1 += len(pycompat.ossep)
1846 striplen1 += len(pycompat.ossep)
1847 if evalpath(striplen1) > score:
1847 if evalpath(striplen1) > score:
1848 striplen = striplen1
1848 striplen = striplen1
1849 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:])
1849 res = lambda p: os.path.join(dest, util.localpath(p)[striplen:])
1850 else:
1850 else:
1851 # a file
1851 # a file
1852 if destdirexists:
1852 if destdirexists:
1853 res = lambda p: os.path.join(
1853 res = lambda p: os.path.join(
1854 dest, os.path.basename(util.localpath(p))
1854 dest, os.path.basename(util.localpath(p))
1855 )
1855 )
1856 else:
1856 else:
1857 res = lambda p: dest
1857 res = lambda p: dest
1858 return res
1858 return res
1859
1859
1860 destdirexists = os.path.isdir(dest) and not os.path.islink(dest)
1860 destdirexists = os.path.isdir(dest) and not os.path.islink(dest)
1861 if not destdirexists:
1861 if not destdirexists:
1862 if len(pats) > 1 or matchmod.patkind(pats[0]):
1862 if len(pats) > 1 or matchmod.patkind(pats[0]):
1863 raise error.InputError(
1863 raise error.InputError(
1864 _(
1864 _(
1865 b'with multiple sources, destination must be an '
1865 b'with multiple sources, destination must be an '
1866 b'existing directory'
1866 b'existing directory'
1867 )
1867 )
1868 )
1868 )
1869 if util.endswithsep(dest):
1869 if util.endswithsep(dest):
1870 raise error.InputError(
1870 raise error.InputError(
1871 _(b'destination %s is not a directory') % dest
1871 _(b'destination %s is not a directory') % dest
1872 )
1872 )
1873
1873
1874 tfn = targetpathfn
1874 tfn = targetpathfn
1875 if after:
1875 if after:
1876 tfn = targetpathafterfn
1876 tfn = targetpathafterfn
1877 copylist = []
1877 copylist = []
1878 for pat in pats:
1878 for pat in pats:
1879 srcs = walkpat(pat)
1879 srcs = walkpat(pat)
1880 if not srcs:
1880 if not srcs:
1881 continue
1881 continue
1882 copylist.append((tfn(pat, dest, srcs), srcs))
1882 copylist.append((tfn(pat, dest, srcs), srcs))
1883 if not copylist:
1883 if not copylist:
1884 hint = None
1884 hint = None
1885 if rename:
1885 if rename:
1886 hint = _(b'maybe you meant to use --after --at-rev=.')
1886 hint = _(b'maybe you meant to use --after --at-rev=.')
1887 raise error.InputError(_(b'no files to copy'), hint=hint)
1887 raise error.InputError(_(b'no files to copy'), hint=hint)
1888
1888
1889 errors = 0
1889 errors = 0
1890 for targetpath, srcs in copylist:
1890 for targetpath, srcs in copylist:
1891 for abssrc, relsrc, exact in srcs:
1891 for abssrc, relsrc, exact in srcs:
1892 if copyfile(abssrc, relsrc, targetpath(abssrc), exact):
1892 if copyfile(abssrc, relsrc, targetpath(abssrc), exact):
1893 errors += 1
1893 errors += 1
1894
1894
1895 return errors != 0
1895 return errors != 0
1896
1896
1897
1897
1898 ## facility to let extension process additional data into an import patch
1898 ## facility to let extension process additional data into an import patch
1899 # list of identifier to be executed in order
1899 # list of identifier to be executed in order
1900 extrapreimport = [] # run before commit
1900 extrapreimport = [] # run before commit
1901 extrapostimport = [] # run after commit
1901 extrapostimport = [] # run after commit
1902 # mapping from identifier to actual import function
1902 # mapping from identifier to actual import function
1903 #
1903 #
1904 # 'preimport' are run before the commit is made and are provided the following
1904 # 'preimport' are run before the commit is made and are provided the following
1905 # arguments:
1905 # arguments:
1906 # - repo: the localrepository instance,
1906 # - repo: the localrepository instance,
1907 # - patchdata: data extracted from patch header (cf m.patch.patchheadermap),
1907 # - patchdata: data extracted from patch header (cf m.patch.patchheadermap),
1908 # - extra: the future extra dictionary of the changeset, please mutate it,
1908 # - extra: the future extra dictionary of the changeset, please mutate it,
1909 # - opts: the import options.
1909 # - opts: the import options.
1910 # XXX ideally, we would just pass an ctx ready to be computed, that would allow
1910 # XXX ideally, we would just pass an ctx ready to be computed, that would allow
1911 # mutation of in memory commit and more. Feel free to rework the code to get
1911 # mutation of in memory commit and more. Feel free to rework the code to get
1912 # there.
1912 # there.
1913 extrapreimportmap = {}
1913 extrapreimportmap = {}
1914 # 'postimport' are run after the commit is made and are provided the following
1914 # 'postimport' are run after the commit is made and are provided the following
1915 # argument:
1915 # argument:
1916 # - ctx: the changectx created by import.
1916 # - ctx: the changectx created by import.
1917 extrapostimportmap = {}
1917 extrapostimportmap = {}
1918
1918
1919
1919
1920 def tryimportone(ui, repo, patchdata, parents, opts, msgs, updatefunc):
1920 def tryimportone(ui, repo, patchdata, parents, opts, msgs, updatefunc):
1921 """Utility function used by commands.import to import a single patch
1921 """Utility function used by commands.import to import a single patch
1922
1922
1923 This function is explicitly defined here to help the evolve extension to
1923 This function is explicitly defined here to help the evolve extension to
1924 wrap this part of the import logic.
1924 wrap this part of the import logic.
1925
1925
1926 The API is currently a bit ugly because it a simple code translation from
1926 The API is currently a bit ugly because it a simple code translation from
1927 the import command. Feel free to make it better.
1927 the import command. Feel free to make it better.
1928
1928
1929 :patchdata: a dictionary containing parsed patch data (such as from
1929 :patchdata: a dictionary containing parsed patch data (such as from
1930 ``patch.extract()``)
1930 ``patch.extract()``)
1931 :parents: nodes that will be parent of the created commit
1931 :parents: nodes that will be parent of the created commit
1932 :opts: the full dict of option passed to the import command
1932 :opts: the full dict of option passed to the import command
1933 :msgs: list to save commit message to.
1933 :msgs: list to save commit message to.
1934 (used in case we need to save it when failing)
1934 (used in case we need to save it when failing)
1935 :updatefunc: a function that update a repo to a given node
1935 :updatefunc: a function that update a repo to a given node
1936 updatefunc(<repo>, <node>)
1936 updatefunc(<repo>, <node>)
1937 """
1937 """
1938 # avoid cycle context -> subrepo -> cmdutil
1938 # avoid cycle context -> subrepo -> cmdutil
1939 from . import context
1939 from . import context
1940
1940
1941 tmpname = patchdata.get(b'filename')
1941 tmpname = patchdata.get(b'filename')
1942 message = patchdata.get(b'message')
1942 message = patchdata.get(b'message')
1943 user = opts.get(b'user') or patchdata.get(b'user')
1943 user = opts.get(b'user') or patchdata.get(b'user')
1944 date = opts.get(b'date') or patchdata.get(b'date')
1944 date = opts.get(b'date') or patchdata.get(b'date')
1945 branch = patchdata.get(b'branch')
1945 branch = patchdata.get(b'branch')
1946 nodeid = patchdata.get(b'nodeid')
1946 nodeid = patchdata.get(b'nodeid')
1947 p1 = patchdata.get(b'p1')
1947 p1 = patchdata.get(b'p1')
1948 p2 = patchdata.get(b'p2')
1948 p2 = patchdata.get(b'p2')
1949
1949
1950 nocommit = opts.get(b'no_commit')
1950 nocommit = opts.get(b'no_commit')
1951 importbranch = opts.get(b'import_branch')
1951 importbranch = opts.get(b'import_branch')
1952 update = not opts.get(b'bypass')
1952 update = not opts.get(b'bypass')
1953 strip = opts[b"strip"]
1953 strip = opts[b"strip"]
1954 prefix = opts[b"prefix"]
1954 prefix = opts[b"prefix"]
1955 sim = float(opts.get(b'similarity') or 0)
1955 sim = float(opts.get(b'similarity') or 0)
1956
1956
1957 if not tmpname:
1957 if not tmpname:
1958 return None, None, False
1958 return None, None, False
1959
1959
1960 rejects = False
1960 rejects = False
1961
1961
1962 cmdline_message = logmessage(ui, opts)
1962 cmdline_message = logmessage(ui, opts)
1963 if cmdline_message:
1963 if cmdline_message:
1964 # pickup the cmdline msg
1964 # pickup the cmdline msg
1965 message = cmdline_message
1965 message = cmdline_message
1966 elif message:
1966 elif message:
1967 # pickup the patch msg
1967 # pickup the patch msg
1968 message = message.strip()
1968 message = message.strip()
1969 else:
1969 else:
1970 # launch the editor
1970 # launch the editor
1971 message = None
1971 message = None
1972 ui.debug(b'message:\n%s\n' % (message or b''))
1972 ui.debug(b'message:\n%s\n' % (message or b''))
1973
1973
1974 if len(parents) == 1:
1974 if len(parents) == 1:
1975 parents.append(repo[nullrev])
1975 parents.append(repo[nullrev])
1976 if opts.get(b'exact'):
1976 if opts.get(b'exact'):
1977 if not nodeid or not p1:
1977 if not nodeid or not p1:
1978 raise error.InputError(_(b'not a Mercurial patch'))
1978 raise error.InputError(_(b'not a Mercurial patch'))
1979 p1 = repo[p1]
1979 p1 = repo[p1]
1980 p2 = repo[p2 or nullrev]
1980 p2 = repo[p2 or nullrev]
1981 elif p2:
1981 elif p2:
1982 try:
1982 try:
1983 p1 = repo[p1]
1983 p1 = repo[p1]
1984 p2 = repo[p2]
1984 p2 = repo[p2]
1985 # Without any options, consider p2 only if the
1985 # Without any options, consider p2 only if the
1986 # patch is being applied on top of the recorded
1986 # patch is being applied on top of the recorded
1987 # first parent.
1987 # first parent.
1988 if p1 != parents[0]:
1988 if p1 != parents[0]:
1989 p1 = parents[0]
1989 p1 = parents[0]
1990 p2 = repo[nullrev]
1990 p2 = repo[nullrev]
1991 except error.RepoError:
1991 except error.RepoError:
1992 p1, p2 = parents
1992 p1, p2 = parents
1993 if p2.rev() == nullrev:
1993 if p2.rev() == nullrev:
1994 ui.warn(
1994 ui.warn(
1995 _(
1995 _(
1996 b"warning: import the patch as a normal revision\n"
1996 b"warning: import the patch as a normal revision\n"
1997 b"(use --exact to import the patch as a merge)\n"
1997 b"(use --exact to import the patch as a merge)\n"
1998 )
1998 )
1999 )
1999 )
2000 else:
2000 else:
2001 p1, p2 = parents
2001 p1, p2 = parents
2002
2002
2003 n = None
2003 n = None
2004 if update:
2004 if update:
2005 if p1 != parents[0]:
2005 if p1 != parents[0]:
2006 updatefunc(repo, p1.node())
2006 updatefunc(repo, p1.node())
2007 if p2 != parents[1]:
2007 if p2 != parents[1]:
2008 repo.setparents(p1.node(), p2.node())
2008 repo.setparents(p1.node(), p2.node())
2009
2009
2010 if opts.get(b'exact') or importbranch:
2010 if opts.get(b'exact') or importbranch:
2011 repo.dirstate.setbranch(branch or b'default')
2011 repo.dirstate.setbranch(branch or b'default')
2012
2012
2013 partial = opts.get(b'partial', False)
2013 partial = opts.get(b'partial', False)
2014 files = set()
2014 files = set()
2015 try:
2015 try:
2016 patch.patch(
2016 patch.patch(
2017 ui,
2017 ui,
2018 repo,
2018 repo,
2019 tmpname,
2019 tmpname,
2020 strip=strip,
2020 strip=strip,
2021 prefix=prefix,
2021 prefix=prefix,
2022 files=files,
2022 files=files,
2023 eolmode=None,
2023 eolmode=None,
2024 similarity=sim / 100.0,
2024 similarity=sim / 100.0,
2025 )
2025 )
2026 except error.PatchParseError as e:
2026 except error.PatchParseError as e:
2027 raise error.InputError(
2027 raise error.InputError(
2028 pycompat.bytestr(e),
2028 pycompat.bytestr(e),
2029 hint=_(
2029 hint=_(
2030 b'check that whitespace in the patch has not been mangled'
2030 b'check that whitespace in the patch has not been mangled'
2031 ),
2031 ),
2032 )
2032 )
2033 except error.PatchApplicationError as e:
2033 except error.PatchApplicationError as e:
2034 if not partial:
2034 if not partial:
2035 raise error.StateError(pycompat.bytestr(e))
2035 raise error.StateError(pycompat.bytestr(e))
2036 if partial:
2036 if partial:
2037 rejects = True
2037 rejects = True
2038
2038
2039 files = list(files)
2039 files = list(files)
2040 if nocommit:
2040 if nocommit:
2041 if message:
2041 if message:
2042 msgs.append(message)
2042 msgs.append(message)
2043 else:
2043 else:
2044 if opts.get(b'exact') or p2:
2044 if opts.get(b'exact') or p2:
2045 # If you got here, you either use --force and know what
2045 # If you got here, you either use --force and know what
2046 # you are doing or used --exact or a merge patch while
2046 # you are doing or used --exact or a merge patch while
2047 # being updated to its first parent.
2047 # being updated to its first parent.
2048 m = None
2048 m = None
2049 else:
2049 else:
2050 m = scmutil.matchfiles(repo, files or [])
2050 m = scmutil.matchfiles(repo, files or [])
2051 editform = mergeeditform(repo[None], b'import.normal')
2051 editform = mergeeditform(repo[None], b'import.normal')
2052 if opts.get(b'exact'):
2052 if opts.get(b'exact'):
2053 editor = None
2053 editor = None
2054 else:
2054 else:
2055 editor = getcommiteditor(
2055 editor = getcommiteditor(
2056 editform=editform, **pycompat.strkwargs(opts)
2056 editform=editform, **pycompat.strkwargs(opts)
2057 )
2057 )
2058 extra = {}
2058 extra = {}
2059 for idfunc in extrapreimport:
2059 for idfunc in extrapreimport:
2060 extrapreimportmap[idfunc](repo, patchdata, extra, opts)
2060 extrapreimportmap[idfunc](repo, patchdata, extra, opts)
2061 overrides = {}
2061 overrides = {}
2062 if partial:
2062 if partial:
2063 overrides[(b'ui', b'allowemptycommit')] = True
2063 overrides[(b'ui', b'allowemptycommit')] = True
2064 if opts.get(b'secret'):
2064 if opts.get(b'secret'):
2065 overrides[(b'phases', b'new-commit')] = b'secret'
2065 overrides[(b'phases', b'new-commit')] = b'secret'
2066 with repo.ui.configoverride(overrides, b'import'):
2066 with repo.ui.configoverride(overrides, b'import'):
2067 n = repo.commit(
2067 n = repo.commit(
2068 message, user, date, match=m, editor=editor, extra=extra
2068 message, user, date, match=m, editor=editor, extra=extra
2069 )
2069 )
2070 for idfunc in extrapostimport:
2070 for idfunc in extrapostimport:
2071 extrapostimportmap[idfunc](repo[n])
2071 extrapostimportmap[idfunc](repo[n])
2072 else:
2072 else:
2073 if opts.get(b'exact') or importbranch:
2073 if opts.get(b'exact') or importbranch:
2074 branch = branch or b'default'
2074 branch = branch or b'default'
2075 else:
2075 else:
2076 branch = p1.branch()
2076 branch = p1.branch()
2077 store = patch.filestore()
2077 store = patch.filestore()
2078 try:
2078 try:
2079 files = set()
2079 files = set()
2080 try:
2080 try:
2081 patch.patchrepo(
2081 patch.patchrepo(
2082 ui,
2082 ui,
2083 repo,
2083 repo,
2084 p1,
2084 p1,
2085 store,
2085 store,
2086 tmpname,
2086 tmpname,
2087 strip,
2087 strip,
2088 prefix,
2088 prefix,
2089 files,
2089 files,
2090 eolmode=None,
2090 eolmode=None,
2091 )
2091 )
2092 except error.PatchParseError as e:
2092 except error.PatchParseError as e:
2093 raise error.InputError(
2093 raise error.InputError(
2094 stringutil.forcebytestr(e),
2094 stringutil.forcebytestr(e),
2095 hint=_(
2095 hint=_(
2096 b'check that whitespace in the patch has not been mangled'
2096 b'check that whitespace in the patch has not been mangled'
2097 ),
2097 ),
2098 )
2098 )
2099 except error.PatchApplicationError as e:
2099 except error.PatchApplicationError as e:
2100 raise error.StateError(stringutil.forcebytestr(e))
2100 raise error.StateError(stringutil.forcebytestr(e))
2101 if opts.get(b'exact'):
2101 if opts.get(b'exact'):
2102 editor = None
2102 editor = None
2103 else:
2103 else:
2104 editor = getcommiteditor(editform=b'import.bypass')
2104 editor = getcommiteditor(editform=b'import.bypass')
2105 memctx = context.memctx(
2105 memctx = context.memctx(
2106 repo,
2106 repo,
2107 (p1.node(), p2.node()),
2107 (p1.node(), p2.node()),
2108 message,
2108 message,
2109 files=files,
2109 files=files,
2110 filectxfn=store,
2110 filectxfn=store,
2111 user=user,
2111 user=user,
2112 date=date,
2112 date=date,
2113 branch=branch,
2113 branch=branch,
2114 editor=editor,
2114 editor=editor,
2115 )
2115 )
2116
2116
2117 overrides = {}
2117 overrides = {}
2118 if opts.get(b'secret'):
2118 if opts.get(b'secret'):
2119 overrides[(b'phases', b'new-commit')] = b'secret'
2119 overrides[(b'phases', b'new-commit')] = b'secret'
2120 with repo.ui.configoverride(overrides, b'import'):
2120 with repo.ui.configoverride(overrides, b'import'):
2121 n = memctx.commit()
2121 n = memctx.commit()
2122 finally:
2122 finally:
2123 store.close()
2123 store.close()
2124 if opts.get(b'exact') and nocommit:
2124 if opts.get(b'exact') and nocommit:
2125 # --exact with --no-commit is still useful in that it does merge
2125 # --exact with --no-commit is still useful in that it does merge
2126 # and branch bits
2126 # and branch bits
2127 ui.warn(_(b"warning: can't check exact import with --no-commit\n"))
2127 ui.warn(_(b"warning: can't check exact import with --no-commit\n"))
2128 elif opts.get(b'exact') and (not n or hex(n) != nodeid):
2128 elif opts.get(b'exact') and (not n or hex(n) != nodeid):
2129 raise error.Abort(_(b'patch is damaged or loses information'))
2129 raise error.Abort(_(b'patch is damaged or loses information'))
2130 msg = _(b'applied to working directory')
2130 msg = _(b'applied to working directory')
2131 if n:
2131 if n:
2132 # i18n: refers to a short changeset id
2132 # i18n: refers to a short changeset id
2133 msg = _(b'created %s') % short(n)
2133 msg = _(b'created %s') % short(n)
2134 return msg, n, rejects
2134 return msg, n, rejects
2135
2135
2136
2136
2137 # facility to let extensions include additional data in an exported patch
2137 # facility to let extensions include additional data in an exported patch
2138 # list of identifiers to be executed in order
2138 # list of identifiers to be executed in order
2139 extraexport = []
2139 extraexport = []
2140 # mapping from identifier to actual export function
2140 # mapping from identifier to actual export function
2141 # function as to return a string to be added to the header or None
2141 # function as to return a string to be added to the header or None
2142 # it is given two arguments (sequencenumber, changectx)
2142 # it is given two arguments (sequencenumber, changectx)
2143 extraexportmap = {}
2143 extraexportmap = {}
2144
2144
2145
2145
2146 def _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts):
2146 def _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts):
2147 node = scmutil.binnode(ctx)
2147 node = scmutil.binnode(ctx)
2148 parents = [p.node() for p in ctx.parents() if p]
2148 parents = [p.node() for p in ctx.parents() if p]
2149 branch = ctx.branch()
2149 branch = ctx.branch()
2150 if switch_parent:
2150 if switch_parent:
2151 parents.reverse()
2151 parents.reverse()
2152
2152
2153 if parents:
2153 if parents:
2154 prev = parents[0]
2154 prev = parents[0]
2155 else:
2155 else:
2156 prev = repo.nullid
2156 prev = repo.nullid
2157
2157
2158 fm.context(ctx=ctx)
2158 fm.context(ctx=ctx)
2159 fm.plain(b'# HG changeset patch\n')
2159 fm.plain(b'# HG changeset patch\n')
2160 fm.write(b'user', b'# User %s\n', ctx.user())
2160 fm.write(b'user', b'# User %s\n', ctx.user())
2161 fm.plain(b'# Date %d %d\n' % ctx.date())
2161 fm.plain(b'# Date %d %d\n' % ctx.date())
2162 fm.write(b'date', b'# %s\n', fm.formatdate(ctx.date()))
2162 fm.write(b'date', b'# %s\n', fm.formatdate(ctx.date()))
2163 fm.condwrite(
2163 fm.condwrite(
2164 branch and branch != b'default', b'branch', b'# Branch %s\n', branch
2164 branch and branch != b'default', b'branch', b'# Branch %s\n', branch
2165 )
2165 )
2166 fm.write(b'node', b'# Node ID %s\n', hex(node))
2166 fm.write(b'node', b'# Node ID %s\n', hex(node))
2167 fm.plain(b'# Parent %s\n' % hex(prev))
2167 fm.plain(b'# Parent %s\n' % hex(prev))
2168 if len(parents) > 1:
2168 if len(parents) > 1:
2169 fm.plain(b'# Parent %s\n' % hex(parents[1]))
2169 fm.plain(b'# Parent %s\n' % hex(parents[1]))
2170 fm.data(parents=fm.formatlist(pycompat.maplist(hex, parents), name=b'node'))
2170 fm.data(parents=fm.formatlist(pycompat.maplist(hex, parents), name=b'node'))
2171
2171
2172 # TODO: redesign extraexportmap function to support formatter
2172 # TODO: redesign extraexportmap function to support formatter
2173 for headerid in extraexport:
2173 for headerid in extraexport:
2174 header = extraexportmap[headerid](seqno, ctx)
2174 header = extraexportmap[headerid](seqno, ctx)
2175 if header is not None:
2175 if header is not None:
2176 fm.plain(b'# %s\n' % header)
2176 fm.plain(b'# %s\n' % header)
2177
2177
2178 fm.write(b'desc', b'%s\n', ctx.description().rstrip())
2178 fm.write(b'desc', b'%s\n', ctx.description().rstrip())
2179 fm.plain(b'\n')
2179 fm.plain(b'\n')
2180
2180
2181 if fm.isplain():
2181 if fm.isplain():
2182 chunkiter = patch.diffui(repo, prev, node, match, opts=diffopts)
2182 chunkiter = patch.diffui(repo, prev, node, match, opts=diffopts)
2183 for chunk, label in chunkiter:
2183 for chunk, label in chunkiter:
2184 fm.plain(chunk, label=label)
2184 fm.plain(chunk, label=label)
2185 else:
2185 else:
2186 chunkiter = patch.diff(repo, prev, node, match, opts=diffopts)
2186 chunkiter = patch.diff(repo, prev, node, match, opts=diffopts)
2187 # TODO: make it structured?
2187 # TODO: make it structured?
2188 fm.data(diff=b''.join(chunkiter))
2188 fm.data(diff=b''.join(chunkiter))
2189
2189
2190
2190
2191 def _exportfile(repo, revs, fm, dest, switch_parent, diffopts, match):
2191 def _exportfile(repo, revs, fm, dest, switch_parent, diffopts, match):
2192 """Export changesets to stdout or a single file"""
2192 """Export changesets to stdout or a single file"""
2193 for seqno, rev in enumerate(revs, 1):
2193 for seqno, rev in enumerate(revs, 1):
2194 ctx = repo[rev]
2194 ctx = repo[rev]
2195 if not dest.startswith(b'<'):
2195 if not dest.startswith(b'<'):
2196 repo.ui.note(b"%s\n" % dest)
2196 repo.ui.note(b"%s\n" % dest)
2197 fm.startitem()
2197 fm.startitem()
2198 _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts)
2198 _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts)
2199
2199
2200
2200
2201 def _exportfntemplate(
2201 def _exportfntemplate(
2202 repo, revs, basefm, fntemplate, switch_parent, diffopts, match
2202 repo, revs, basefm, fntemplate, switch_parent, diffopts, match
2203 ):
2203 ):
2204 """Export changesets to possibly multiple files"""
2204 """Export changesets to possibly multiple files"""
2205 total = len(revs)
2205 total = len(revs)
2206 revwidth = max(len(str(rev)) for rev in revs)
2206 revwidth = max(len(str(rev)) for rev in revs)
2207 filemap = util.sortdict() # filename: [(seqno, rev), ...]
2207 filemap = util.sortdict() # filename: [(seqno, rev), ...]
2208
2208
2209 for seqno, rev in enumerate(revs, 1):
2209 for seqno, rev in enumerate(revs, 1):
2210 ctx = repo[rev]
2210 ctx = repo[rev]
2211 dest = makefilename(
2211 dest = makefilename(
2212 ctx, fntemplate, total=total, seqno=seqno, revwidth=revwidth
2212 ctx, fntemplate, total=total, seqno=seqno, revwidth=revwidth
2213 )
2213 )
2214 filemap.setdefault(dest, []).append((seqno, rev))
2214 filemap.setdefault(dest, []).append((seqno, rev))
2215
2215
2216 for dest in filemap:
2216 for dest in filemap:
2217 with formatter.maybereopen(basefm, dest) as fm:
2217 with formatter.maybereopen(basefm, dest) as fm:
2218 repo.ui.note(b"%s\n" % dest)
2218 repo.ui.note(b"%s\n" % dest)
2219 for seqno, rev in filemap[dest]:
2219 for seqno, rev in filemap[dest]:
2220 fm.startitem()
2220 fm.startitem()
2221 ctx = repo[rev]
2221 ctx = repo[rev]
2222 _exportsingle(
2222 _exportsingle(
2223 repo, ctx, fm, match, switch_parent, seqno, diffopts
2223 repo, ctx, fm, match, switch_parent, seqno, diffopts
2224 )
2224 )
2225
2225
2226
2226
2227 def _prefetchchangedfiles(repo, revs, match):
2227 def _prefetchchangedfiles(repo, revs, match):
2228 allfiles = set()
2228 allfiles = set()
2229 for rev in revs:
2229 for rev in revs:
2230 for file in repo[rev].files():
2230 for file in repo[rev].files():
2231 if not match or match(file):
2231 if not match or match(file):
2232 allfiles.add(file)
2232 allfiles.add(file)
2233 match = scmutil.matchfiles(repo, allfiles)
2233 match = scmutil.matchfiles(repo, allfiles)
2234 revmatches = [(rev, match) for rev in revs]
2234 revmatches = [(rev, match) for rev in revs]
2235 scmutil.prefetchfiles(repo, revmatches)
2235 scmutil.prefetchfiles(repo, revmatches)
2236
2236
2237
2237
2238 def export(
2238 def export(
2239 repo,
2239 repo,
2240 revs,
2240 revs,
2241 basefm,
2241 basefm,
2242 fntemplate=b'hg-%h.patch',
2242 fntemplate=b'hg-%h.patch',
2243 switch_parent=False,
2243 switch_parent=False,
2244 opts=None,
2244 opts=None,
2245 match=None,
2245 match=None,
2246 ):
2246 ):
2247 """export changesets as hg patches
2247 """export changesets as hg patches
2248
2248
2249 Args:
2249 Args:
2250 repo: The repository from which we're exporting revisions.
2250 repo: The repository from which we're exporting revisions.
2251 revs: A list of revisions to export as revision numbers.
2251 revs: A list of revisions to export as revision numbers.
2252 basefm: A formatter to which patches should be written.
2252 basefm: A formatter to which patches should be written.
2253 fntemplate: An optional string to use for generating patch file names.
2253 fntemplate: An optional string to use for generating patch file names.
2254 switch_parent: If True, show diffs against second parent when not nullid.
2254 switch_parent: If True, show diffs against second parent when not nullid.
2255 Default is false, which always shows diff against p1.
2255 Default is false, which always shows diff against p1.
2256 opts: diff options to use for generating the patch.
2256 opts: diff options to use for generating the patch.
2257 match: If specified, only export changes to files matching this matcher.
2257 match: If specified, only export changes to files matching this matcher.
2258
2258
2259 Returns:
2259 Returns:
2260 Nothing.
2260 Nothing.
2261
2261
2262 Side Effect:
2262 Side Effect:
2263 "HG Changeset Patch" data is emitted to one of the following
2263 "HG Changeset Patch" data is emitted to one of the following
2264 destinations:
2264 destinations:
2265 fntemplate specified: Each rev is written to a unique file named using
2265 fntemplate specified: Each rev is written to a unique file named using
2266 the given template.
2266 the given template.
2267 Otherwise: All revs will be written to basefm.
2267 Otherwise: All revs will be written to basefm.
2268 """
2268 """
2269 _prefetchchangedfiles(repo, revs, match)
2269 _prefetchchangedfiles(repo, revs, match)
2270
2270
2271 if not fntemplate:
2271 if not fntemplate:
2272 _exportfile(
2272 _exportfile(
2273 repo, revs, basefm, b'<unnamed>', switch_parent, opts, match
2273 repo, revs, basefm, b'<unnamed>', switch_parent, opts, match
2274 )
2274 )
2275 else:
2275 else:
2276 _exportfntemplate(
2276 _exportfntemplate(
2277 repo, revs, basefm, fntemplate, switch_parent, opts, match
2277 repo, revs, basefm, fntemplate, switch_parent, opts, match
2278 )
2278 )
2279
2279
2280
2280
2281 def exportfile(repo, revs, fp, switch_parent=False, opts=None, match=None):
2281 def exportfile(repo, revs, fp, switch_parent=False, opts=None, match=None):
2282 """Export changesets to the given file stream"""
2282 """Export changesets to the given file stream"""
2283 _prefetchchangedfiles(repo, revs, match)
2283 _prefetchchangedfiles(repo, revs, match)
2284
2284
2285 dest = getattr(fp, 'name', b'<unnamed>')
2285 dest = getattr(fp, 'name', b'<unnamed>')
2286 with formatter.formatter(repo.ui, fp, b'export', {}) as fm:
2286 with formatter.formatter(repo.ui, fp, b'export', {}) as fm:
2287 _exportfile(repo, revs, fm, dest, switch_parent, opts, match)
2287 _exportfile(repo, revs, fm, dest, switch_parent, opts, match)
2288
2288
2289
2289
2290 def showmarker(fm, marker, index=None):
2290 def showmarker(fm, marker, index=None):
2291 """utility function to display obsolescence marker in a readable way
2291 """utility function to display obsolescence marker in a readable way
2292
2292
2293 To be used by debug function."""
2293 To be used by debug function."""
2294 if index is not None:
2294 if index is not None:
2295 fm.write(b'index', b'%i ', index)
2295 fm.write(b'index', b'%i ', index)
2296 fm.write(b'prednode', b'%s ', hex(marker.prednode()))
2296 fm.write(b'prednode', b'%s ', hex(marker.prednode()))
2297 succs = marker.succnodes()
2297 succs = marker.succnodes()
2298 fm.condwrite(
2298 fm.condwrite(
2299 succs,
2299 succs,
2300 b'succnodes',
2300 b'succnodes',
2301 b'%s ',
2301 b'%s ',
2302 fm.formatlist(map(hex, succs), name=b'node'),
2302 fm.formatlist(map(hex, succs), name=b'node'),
2303 )
2303 )
2304 fm.write(b'flag', b'%X ', marker.flags())
2304 fm.write(b'flag', b'%X ', marker.flags())
2305 parents = marker.parentnodes()
2305 parents = marker.parentnodes()
2306 if parents is not None:
2306 if parents is not None:
2307 fm.write(
2307 fm.write(
2308 b'parentnodes',
2308 b'parentnodes',
2309 b'{%s} ',
2309 b'{%s} ',
2310 fm.formatlist(map(hex, parents), name=b'node', sep=b', '),
2310 fm.formatlist(map(hex, parents), name=b'node', sep=b', '),
2311 )
2311 )
2312 fm.write(b'date', b'(%s) ', fm.formatdate(marker.date()))
2312 fm.write(b'date', b'(%s) ', fm.formatdate(marker.date()))
2313 meta = marker.metadata().copy()
2313 meta = marker.metadata().copy()
2314 meta.pop(b'date', None)
2314 meta.pop(b'date', None)
2315 smeta = pycompat.rapply(pycompat.maybebytestr, meta)
2315 smeta = pycompat.rapply(pycompat.maybebytestr, meta)
2316 fm.write(
2316 fm.write(
2317 b'metadata', b'{%s}', fm.formatdict(smeta, fmt=b'%r: %r', sep=b', ')
2317 b'metadata', b'{%s}', fm.formatdict(smeta, fmt=b'%r: %r', sep=b', ')
2318 )
2318 )
2319 fm.plain(b'\n')
2319 fm.plain(b'\n')
2320
2320
2321
2321
2322 def finddate(ui, repo, date):
2322 def finddate(ui, repo, date):
2323 """Find the tipmost changeset that matches the given date spec"""
2323 """Find the tipmost changeset that matches the given date spec"""
2324 mrevs = repo.revs(b'date(%s)', date)
2324 mrevs = repo.revs(b'date(%s)', date)
2325 try:
2325 try:
2326 rev = mrevs.max()
2326 rev = mrevs.max()
2327 except ValueError:
2327 except ValueError:
2328 raise error.InputError(_(b"revision matching date not found"))
2328 raise error.InputError(_(b"revision matching date not found"))
2329
2329
2330 ui.status(
2330 ui.status(
2331 _(b"found revision %d from %s\n")
2331 _(b"found revision %d from %s\n")
2332 % (rev, dateutil.datestr(repo[rev].date()))
2332 % (rev, dateutil.datestr(repo[rev].date()))
2333 )
2333 )
2334 return b'%d' % rev
2334 return b'%d' % rev
2335
2335
2336
2336
2337 def add(ui, repo, match, prefix, uipathfn, explicitonly, **opts):
2337 def add(ui, repo, match, prefix, uipathfn, explicitonly, **opts):
2338 bad = []
2338 bad = []
2339
2339
2340 badfn = lambda x, y: bad.append(x) or match.bad(x, y)
2340 badfn = lambda x, y: bad.append(x) or match.bad(x, y)
2341 names = []
2341 names = []
2342 wctx = repo[None]
2342 wctx = repo[None]
2343 cca = None
2343 cca = None
2344 abort, warn = scmutil.checkportabilityalert(ui)
2344 abort, warn = scmutil.checkportabilityalert(ui)
2345 if abort or warn:
2345 if abort or warn:
2346 cca = scmutil.casecollisionauditor(ui, abort, repo.dirstate)
2346 cca = scmutil.casecollisionauditor(ui, abort, repo.dirstate)
2347
2347
2348 match = repo.narrowmatch(match, includeexact=True)
2348 match = repo.narrowmatch(match, includeexact=True)
2349 badmatch = matchmod.badmatch(match, badfn)
2349 badmatch = matchmod.badmatch(match, badfn)
2350 dirstate = repo.dirstate
2350 dirstate = repo.dirstate
2351 # We don't want to just call wctx.walk here, since it would return a lot of
2351 # We don't want to just call wctx.walk here, since it would return a lot of
2352 # clean files, which we aren't interested in and takes time.
2352 # clean files, which we aren't interested in and takes time.
2353 for f in sorted(
2353 for f in sorted(
2354 dirstate.walk(
2354 dirstate.walk(
2355 badmatch,
2355 badmatch,
2356 subrepos=sorted(wctx.substate),
2356 subrepos=sorted(wctx.substate),
2357 unknown=True,
2357 unknown=True,
2358 ignored=False,
2358 ignored=False,
2359 full=False,
2359 full=False,
2360 )
2360 )
2361 ):
2361 ):
2362 exact = match.exact(f)
2362 exact = match.exact(f)
2363 if exact or not explicitonly and f not in wctx and repo.wvfs.lexists(f):
2363 if exact or not explicitonly and f not in wctx and repo.wvfs.lexists(f):
2364 if cca:
2364 if cca:
2365 cca(f)
2365 cca(f)
2366 names.append(f)
2366 names.append(f)
2367 if ui.verbose or not exact:
2367 if ui.verbose or not exact:
2368 ui.status(
2368 ui.status(
2369 _(b'adding %s\n') % uipathfn(f), label=b'ui.addremove.added'
2369 _(b'adding %s\n') % uipathfn(f), label=b'ui.addremove.added'
2370 )
2370 )
2371
2371
2372 for subpath in sorted(wctx.substate):
2372 for subpath in sorted(wctx.substate):
2373 sub = wctx.sub(subpath)
2373 sub = wctx.sub(subpath)
2374 try:
2374 try:
2375 submatch = matchmod.subdirmatcher(subpath, match)
2375 submatch = matchmod.subdirmatcher(subpath, match)
2376 subprefix = repo.wvfs.reljoin(prefix, subpath)
2376 subprefix = repo.wvfs.reljoin(prefix, subpath)
2377 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2377 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2378 if opts.get('subrepos'):
2378 if opts.get('subrepos'):
2379 bad.extend(
2379 bad.extend(
2380 sub.add(ui, submatch, subprefix, subuipathfn, False, **opts)
2380 sub.add(ui, submatch, subprefix, subuipathfn, False, **opts)
2381 )
2381 )
2382 else:
2382 else:
2383 bad.extend(
2383 bad.extend(
2384 sub.add(ui, submatch, subprefix, subuipathfn, True, **opts)
2384 sub.add(ui, submatch, subprefix, subuipathfn, True, **opts)
2385 )
2385 )
2386 except error.LookupError:
2386 except error.LookupError:
2387 ui.status(
2387 ui.status(
2388 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
2388 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
2389 )
2389 )
2390
2390
2391 if not opts.get('dry_run'):
2391 if not opts.get('dry_run'):
2392 rejected = wctx.add(names, prefix)
2392 rejected = wctx.add(names, prefix)
2393 bad.extend(f for f in rejected if f in match.files())
2393 bad.extend(f for f in rejected if f in match.files())
2394 return bad
2394 return bad
2395
2395
2396
2396
2397 def addwebdirpath(repo, serverpath, webconf):
2397 def addwebdirpath(repo, serverpath, webconf):
2398 webconf[serverpath] = repo.root
2398 webconf[serverpath] = repo.root
2399 repo.ui.debug(b'adding %s = %s\n' % (serverpath, repo.root))
2399 repo.ui.debug(b'adding %s = %s\n' % (serverpath, repo.root))
2400
2400
2401 for r in repo.revs(b'filelog("path:.hgsub")'):
2401 for r in repo.revs(b'filelog("path:.hgsub")'):
2402 ctx = repo[r]
2402 ctx = repo[r]
2403 for subpath in ctx.substate:
2403 for subpath in ctx.substate:
2404 ctx.sub(subpath).addwebdirpath(serverpath, webconf)
2404 ctx.sub(subpath).addwebdirpath(serverpath, webconf)
2405
2405
2406
2406
2407 def forget(
2407 def forget(
2408 ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive
2408 ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive
2409 ):
2409 ):
2410 if dryrun and interactive:
2410 if dryrun and interactive:
2411 raise error.InputError(
2411 raise error.InputError(
2412 _(b"cannot specify both --dry-run and --interactive")
2412 _(b"cannot specify both --dry-run and --interactive")
2413 )
2413 )
2414 bad = []
2414 bad = []
2415 badfn = lambda x, y: bad.append(x) or match.bad(x, y)
2415 badfn = lambda x, y: bad.append(x) or match.bad(x, y)
2416 wctx = repo[None]
2416 wctx = repo[None]
2417 forgot = []
2417 forgot = []
2418
2418
2419 s = repo.status(match=matchmod.badmatch(match, badfn), clean=True)
2419 s = repo.status(match=matchmod.badmatch(match, badfn), clean=True)
2420 forget = sorted(s.modified + s.added + s.deleted + s.clean)
2420 forget = sorted(s.modified + s.added + s.deleted + s.clean)
2421 if explicitonly:
2421 if explicitonly:
2422 forget = [f for f in forget if match.exact(f)]
2422 forget = [f for f in forget if match.exact(f)]
2423
2423
2424 for subpath in sorted(wctx.substate):
2424 for subpath in sorted(wctx.substate):
2425 sub = wctx.sub(subpath)
2425 sub = wctx.sub(subpath)
2426 submatch = matchmod.subdirmatcher(subpath, match)
2426 submatch = matchmod.subdirmatcher(subpath, match)
2427 subprefix = repo.wvfs.reljoin(prefix, subpath)
2427 subprefix = repo.wvfs.reljoin(prefix, subpath)
2428 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2428 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2429 try:
2429 try:
2430 subbad, subforgot = sub.forget(
2430 subbad, subforgot = sub.forget(
2431 submatch,
2431 submatch,
2432 subprefix,
2432 subprefix,
2433 subuipathfn,
2433 subuipathfn,
2434 dryrun=dryrun,
2434 dryrun=dryrun,
2435 interactive=interactive,
2435 interactive=interactive,
2436 )
2436 )
2437 bad.extend([subpath + b'/' + f for f in subbad])
2437 bad.extend([subpath + b'/' + f for f in subbad])
2438 forgot.extend([subpath + b'/' + f for f in subforgot])
2438 forgot.extend([subpath + b'/' + f for f in subforgot])
2439 except error.LookupError:
2439 except error.LookupError:
2440 ui.status(
2440 ui.status(
2441 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
2441 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
2442 )
2442 )
2443
2443
2444 if not explicitonly:
2444 if not explicitonly:
2445 for f in match.files():
2445 for f in match.files():
2446 if f not in repo.dirstate and not repo.wvfs.isdir(f):
2446 if f not in repo.dirstate and not repo.wvfs.isdir(f):
2447 if f not in forgot:
2447 if f not in forgot:
2448 if repo.wvfs.exists(f):
2448 if repo.wvfs.exists(f):
2449 # Don't complain if the exact case match wasn't given.
2449 # Don't complain if the exact case match wasn't given.
2450 # But don't do this until after checking 'forgot', so
2450 # But don't do this until after checking 'forgot', so
2451 # that subrepo files aren't normalized, and this op is
2451 # that subrepo files aren't normalized, and this op is
2452 # purely from data cached by the status walk above.
2452 # purely from data cached by the status walk above.
2453 if repo.dirstate.normalize(f) in repo.dirstate:
2453 if repo.dirstate.normalize(f) in repo.dirstate:
2454 continue
2454 continue
2455 ui.warn(
2455 ui.warn(
2456 _(
2456 _(
2457 b'not removing %s: '
2457 b'not removing %s: '
2458 b'file is already untracked\n'
2458 b'file is already untracked\n'
2459 )
2459 )
2460 % uipathfn(f)
2460 % uipathfn(f)
2461 )
2461 )
2462 bad.append(f)
2462 bad.append(f)
2463
2463
2464 if interactive:
2464 if interactive:
2465 responses = _(
2465 responses = _(
2466 b'[Ynsa?]'
2466 b'[Ynsa?]'
2467 b'$$ &Yes, forget this file'
2467 b'$$ &Yes, forget this file'
2468 b'$$ &No, skip this file'
2468 b'$$ &No, skip this file'
2469 b'$$ &Skip remaining files'
2469 b'$$ &Skip remaining files'
2470 b'$$ Include &all remaining files'
2470 b'$$ Include &all remaining files'
2471 b'$$ &? (display help)'
2471 b'$$ &? (display help)'
2472 )
2472 )
2473 for filename in forget[:]:
2473 for filename in forget[:]:
2474 r = ui.promptchoice(
2474 r = ui.promptchoice(
2475 _(b'forget %s %s') % (uipathfn(filename), responses)
2475 _(b'forget %s %s') % (uipathfn(filename), responses)
2476 )
2476 )
2477 if r == 4: # ?
2477 if r == 4: # ?
2478 while r == 4:
2478 while r == 4:
2479 for c, t in ui.extractchoices(responses)[1]:
2479 for c, t in ui.extractchoices(responses)[1]:
2480 ui.write(b'%s - %s\n' % (c, encoding.lower(t)))
2480 ui.write(b'%s - %s\n' % (c, encoding.lower(t)))
2481 r = ui.promptchoice(
2481 r = ui.promptchoice(
2482 _(b'forget %s %s') % (uipathfn(filename), responses)
2482 _(b'forget %s %s') % (uipathfn(filename), responses)
2483 )
2483 )
2484 if r == 0: # yes
2484 if r == 0: # yes
2485 continue
2485 continue
2486 elif r == 1: # no
2486 elif r == 1: # no
2487 forget.remove(filename)
2487 forget.remove(filename)
2488 elif r == 2: # Skip
2488 elif r == 2: # Skip
2489 fnindex = forget.index(filename)
2489 fnindex = forget.index(filename)
2490 del forget[fnindex:]
2490 del forget[fnindex:]
2491 break
2491 break
2492 elif r == 3: # All
2492 elif r == 3: # All
2493 break
2493 break
2494
2494
2495 for f in forget:
2495 for f in forget:
2496 if ui.verbose or not match.exact(f) or interactive:
2496 if ui.verbose or not match.exact(f) or interactive:
2497 ui.status(
2497 ui.status(
2498 _(b'removing %s\n') % uipathfn(f), label=b'ui.addremove.removed'
2498 _(b'removing %s\n') % uipathfn(f), label=b'ui.addremove.removed'
2499 )
2499 )
2500
2500
2501 if not dryrun:
2501 if not dryrun:
2502 rejected = wctx.forget(forget, prefix)
2502 rejected = wctx.forget(forget, prefix)
2503 bad.extend(f for f in rejected if f in match.files())
2503 bad.extend(f for f in rejected if f in match.files())
2504 forgot.extend(f for f in forget if f not in rejected)
2504 forgot.extend(f for f in forget if f not in rejected)
2505 return bad, forgot
2505 return bad, forgot
2506
2506
2507
2507
2508 def files(ui, ctx, m, uipathfn, fm, fmt, subrepos):
2508 def files(ui, ctx, m, uipathfn, fm, fmt, subrepos):
2509 ret = 1
2509 ret = 1
2510
2510
2511 needsfctx = ui.verbose or {b'size', b'flags'} & fm.datahint()
2511 needsfctx = ui.verbose or {b'size', b'flags'} & fm.datahint()
2512 if fm.isplain() and not needsfctx:
2512 if fm.isplain() and not needsfctx:
2513 # Fast path. The speed-up comes from skipping the formatter, and batching
2513 # Fast path. The speed-up comes from skipping the formatter, and batching
2514 # calls to ui.write.
2514 # calls to ui.write.
2515 buf = []
2515 buf = []
2516 for f in ctx.matches(m):
2516 for f in ctx.matches(m):
2517 buf.append(fmt % uipathfn(f))
2517 buf.append(fmt % uipathfn(f))
2518 if len(buf) > 100:
2518 if len(buf) > 100:
2519 ui.write(b''.join(buf))
2519 ui.write(b''.join(buf))
2520 del buf[:]
2520 del buf[:]
2521 ret = 0
2521 ret = 0
2522 if buf:
2522 if buf:
2523 ui.write(b''.join(buf))
2523 ui.write(b''.join(buf))
2524 else:
2524 else:
2525 for f in ctx.matches(m):
2525 for f in ctx.matches(m):
2526 fm.startitem()
2526 fm.startitem()
2527 fm.context(ctx=ctx)
2527 fm.context(ctx=ctx)
2528 if needsfctx:
2528 if needsfctx:
2529 fc = ctx[f]
2529 fc = ctx[f]
2530 fm.write(b'size flags', b'% 10d % 1s ', fc.size(), fc.flags())
2530 fm.write(b'size flags', b'% 10d % 1s ', fc.size(), fc.flags())
2531 fm.data(path=f)
2531 fm.data(path=f)
2532 fm.plain(fmt % uipathfn(f))
2532 fm.plain(fmt % uipathfn(f))
2533 ret = 0
2533 ret = 0
2534
2534
2535 for subpath in sorted(ctx.substate):
2535 for subpath in sorted(ctx.substate):
2536 submatch = matchmod.subdirmatcher(subpath, m)
2536 submatch = matchmod.subdirmatcher(subpath, m)
2537 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2537 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2538 if subrepos or m.exact(subpath) or any(submatch.files()):
2538 if subrepos or m.exact(subpath) or any(submatch.files()):
2539 sub = ctx.sub(subpath)
2539 sub = ctx.sub(subpath)
2540 try:
2540 try:
2541 recurse = m.exact(subpath) or subrepos
2541 recurse = m.exact(subpath) or subrepos
2542 if (
2542 if (
2543 sub.printfiles(ui, submatch, subuipathfn, fm, fmt, recurse)
2543 sub.printfiles(ui, submatch, subuipathfn, fm, fmt, recurse)
2544 == 0
2544 == 0
2545 ):
2545 ):
2546 ret = 0
2546 ret = 0
2547 except error.LookupError:
2547 except error.LookupError:
2548 ui.status(
2548 ui.status(
2549 _(b"skipping missing subrepository: %s\n")
2549 _(b"skipping missing subrepository: %s\n")
2550 % uipathfn(subpath)
2550 % uipathfn(subpath)
2551 )
2551 )
2552
2552
2553 return ret
2553 return ret
2554
2554
2555
2555
2556 def remove(
2556 def remove(
2557 ui, repo, m, prefix, uipathfn, after, force, subrepos, dryrun, warnings=None
2557 ui, repo, m, prefix, uipathfn, after, force, subrepos, dryrun, warnings=None
2558 ):
2558 ):
2559 ret = 0
2559 ret = 0
2560 s = repo.status(match=m, clean=True)
2560 s = repo.status(match=m, clean=True)
2561 modified, added, deleted, clean = s.modified, s.added, s.deleted, s.clean
2561 modified, added, deleted, clean = s.modified, s.added, s.deleted, s.clean
2562
2562
2563 wctx = repo[None]
2563 wctx = repo[None]
2564
2564
2565 if warnings is None:
2565 if warnings is None:
2566 warnings = []
2566 warnings = []
2567 warn = True
2567 warn = True
2568 else:
2568 else:
2569 warn = False
2569 warn = False
2570
2570
2571 subs = sorted(wctx.substate)
2571 subs = sorted(wctx.substate)
2572 progress = ui.makeprogress(
2572 progress = ui.makeprogress(
2573 _(b'searching'), total=len(subs), unit=_(b'subrepos')
2573 _(b'searching'), total=len(subs), unit=_(b'subrepos')
2574 )
2574 )
2575 for subpath in subs:
2575 for subpath in subs:
2576 submatch = matchmod.subdirmatcher(subpath, m)
2576 submatch = matchmod.subdirmatcher(subpath, m)
2577 subprefix = repo.wvfs.reljoin(prefix, subpath)
2577 subprefix = repo.wvfs.reljoin(prefix, subpath)
2578 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2578 subuipathfn = scmutil.subdiruipathfn(subpath, uipathfn)
2579 if subrepos or m.exact(subpath) or any(submatch.files()):
2579 if subrepos or m.exact(subpath) or any(submatch.files()):
2580 progress.increment()
2580 progress.increment()
2581 sub = wctx.sub(subpath)
2581 sub = wctx.sub(subpath)
2582 try:
2582 try:
2583 if sub.removefiles(
2583 if sub.removefiles(
2584 submatch,
2584 submatch,
2585 subprefix,
2585 subprefix,
2586 subuipathfn,
2586 subuipathfn,
2587 after,
2587 after,
2588 force,
2588 force,
2589 subrepos,
2589 subrepos,
2590 dryrun,
2590 dryrun,
2591 warnings,
2591 warnings,
2592 ):
2592 ):
2593 ret = 1
2593 ret = 1
2594 except error.LookupError:
2594 except error.LookupError:
2595 warnings.append(
2595 warnings.append(
2596 _(b"skipping missing subrepository: %s\n")
2596 _(b"skipping missing subrepository: %s\n")
2597 % uipathfn(subpath)
2597 % uipathfn(subpath)
2598 )
2598 )
2599 progress.complete()
2599 progress.complete()
2600
2600
2601 # warn about failure to delete explicit files/dirs
2601 # warn about failure to delete explicit files/dirs
2602 deleteddirs = pathutil.dirs(deleted)
2602 deleteddirs = pathutil.dirs(deleted)
2603 files = m.files()
2603 files = m.files()
2604 progress = ui.makeprogress(
2604 progress = ui.makeprogress(
2605 _(b'deleting'), total=len(files), unit=_(b'files')
2605 _(b'deleting'), total=len(files), unit=_(b'files')
2606 )
2606 )
2607 for f in files:
2607 for f in files:
2608
2608
2609 def insubrepo():
2609 def insubrepo():
2610 for subpath in wctx.substate:
2610 for subpath in wctx.substate:
2611 if f.startswith(subpath + b'/'):
2611 if f.startswith(subpath + b'/'):
2612 return True
2612 return True
2613 return False
2613 return False
2614
2614
2615 progress.increment()
2615 progress.increment()
2616 isdir = f in deleteddirs or wctx.hasdir(f)
2616 isdir = f in deleteddirs or wctx.hasdir(f)
2617 if f in repo.dirstate or isdir or f == b'.' or insubrepo() or f in subs:
2617 if f in repo.dirstate or isdir or f == b'.' or insubrepo() or f in subs:
2618 continue
2618 continue
2619
2619
2620 if repo.wvfs.exists(f):
2620 if repo.wvfs.exists(f):
2621 if repo.wvfs.isdir(f):
2621 if repo.wvfs.isdir(f):
2622 warnings.append(
2622 warnings.append(
2623 _(b'not removing %s: no tracked files\n') % uipathfn(f)
2623 _(b'not removing %s: no tracked files\n') % uipathfn(f)
2624 )
2624 )
2625 else:
2625 else:
2626 warnings.append(
2626 warnings.append(
2627 _(b'not removing %s: file is untracked\n') % uipathfn(f)
2627 _(b'not removing %s: file is untracked\n') % uipathfn(f)
2628 )
2628 )
2629 # missing files will generate a warning elsewhere
2629 # missing files will generate a warning elsewhere
2630 ret = 1
2630 ret = 1
2631 progress.complete()
2631 progress.complete()
2632
2632
2633 if force:
2633 if force:
2634 list = modified + deleted + clean + added
2634 list = modified + deleted + clean + added
2635 elif after:
2635 elif after:
2636 list = deleted
2636 list = deleted
2637 remaining = modified + added + clean
2637 remaining = modified + added + clean
2638 progress = ui.makeprogress(
2638 progress = ui.makeprogress(
2639 _(b'skipping'), total=len(remaining), unit=_(b'files')
2639 _(b'skipping'), total=len(remaining), unit=_(b'files')
2640 )
2640 )
2641 for f in remaining:
2641 for f in remaining:
2642 progress.increment()
2642 progress.increment()
2643 if ui.verbose or (f in files):
2643 if ui.verbose or (f in files):
2644 warnings.append(
2644 warnings.append(
2645 _(b'not removing %s: file still exists\n') % uipathfn(f)
2645 _(b'not removing %s: file still exists\n') % uipathfn(f)
2646 )
2646 )
2647 ret = 1
2647 ret = 1
2648 progress.complete()
2648 progress.complete()
2649 else:
2649 else:
2650 list = deleted + clean
2650 list = deleted + clean
2651 progress = ui.makeprogress(
2651 progress = ui.makeprogress(
2652 _(b'skipping'), total=(len(modified) + len(added)), unit=_(b'files')
2652 _(b'skipping'), total=(len(modified) + len(added)), unit=_(b'files')
2653 )
2653 )
2654 for f in modified:
2654 for f in modified:
2655 progress.increment()
2655 progress.increment()
2656 warnings.append(
2656 warnings.append(
2657 _(
2657 _(
2658 b'not removing %s: file is modified (use -f'
2658 b'not removing %s: file is modified (use -f'
2659 b' to force removal)\n'
2659 b' to force removal)\n'
2660 )
2660 )
2661 % uipathfn(f)
2661 % uipathfn(f)
2662 )
2662 )
2663 ret = 1
2663 ret = 1
2664 for f in added:
2664 for f in added:
2665 progress.increment()
2665 progress.increment()
2666 warnings.append(
2666 warnings.append(
2667 _(
2667 _(
2668 b"not removing %s: file has been marked for add"
2668 b"not removing %s: file has been marked for add"
2669 b" (use 'hg forget' to undo add)\n"
2669 b" (use 'hg forget' to undo add)\n"
2670 )
2670 )
2671 % uipathfn(f)
2671 % uipathfn(f)
2672 )
2672 )
2673 ret = 1
2673 ret = 1
2674 progress.complete()
2674 progress.complete()
2675
2675
2676 list = sorted(list)
2676 list = sorted(list)
2677 progress = ui.makeprogress(
2677 progress = ui.makeprogress(
2678 _(b'deleting'), total=len(list), unit=_(b'files')
2678 _(b'deleting'), total=len(list), unit=_(b'files')
2679 )
2679 )
2680 for f in list:
2680 for f in list:
2681 if ui.verbose or not m.exact(f):
2681 if ui.verbose or not m.exact(f):
2682 progress.increment()
2682 progress.increment()
2683 ui.status(
2683 ui.status(
2684 _(b'removing %s\n') % uipathfn(f), label=b'ui.addremove.removed'
2684 _(b'removing %s\n') % uipathfn(f), label=b'ui.addremove.removed'
2685 )
2685 )
2686 progress.complete()
2686 progress.complete()
2687
2687
2688 if not dryrun:
2688 if not dryrun:
2689 with repo.wlock():
2689 with repo.wlock():
2690 if not after:
2690 if not after:
2691 for f in list:
2691 for f in list:
2692 if f in added:
2692 if f in added:
2693 continue # we never unlink added files on remove
2693 continue # we never unlink added files on remove
2694 rmdir = repo.ui.configbool(
2694 rmdir = repo.ui.configbool(
2695 b'experimental', b'removeemptydirs'
2695 b'experimental', b'removeemptydirs'
2696 )
2696 )
2697 repo.wvfs.unlinkpath(f, ignoremissing=True, rmdir=rmdir)
2697 repo.wvfs.unlinkpath(f, ignoremissing=True, rmdir=rmdir)
2698 repo[None].forget(list)
2698 repo[None].forget(list)
2699
2699
2700 if warn:
2700 if warn:
2701 for warning in warnings:
2701 for warning in warnings:
2702 ui.warn(warning)
2702 ui.warn(warning)
2703
2703
2704 return ret
2704 return ret
2705
2705
2706
2706
2707 def _catfmtneedsdata(fm):
2707 def _catfmtneedsdata(fm):
2708 return not fm.datahint() or b'data' in fm.datahint()
2708 return not fm.datahint() or b'data' in fm.datahint()
2709
2709
2710
2710
2711 def _updatecatformatter(fm, ctx, matcher, path, decode):
2711 def _updatecatformatter(fm, ctx, matcher, path, decode):
2712 """Hook for adding data to the formatter used by ``hg cat``.
2712 """Hook for adding data to the formatter used by ``hg cat``.
2713
2713
2714 Extensions (e.g., lfs) can wrap this to inject keywords/data, but must call
2714 Extensions (e.g., lfs) can wrap this to inject keywords/data, but must call
2715 this method first."""
2715 this method first."""
2716
2716
2717 # data() can be expensive to fetch (e.g. lfs), so don't fetch it if it
2717 # data() can be expensive to fetch (e.g. lfs), so don't fetch it if it
2718 # wasn't requested.
2718 # wasn't requested.
2719 data = b''
2719 data = b''
2720 if _catfmtneedsdata(fm):
2720 if _catfmtneedsdata(fm):
2721 data = ctx[path].data()
2721 data = ctx[path].data()
2722 if decode:
2722 if decode:
2723 data = ctx.repo().wwritedata(path, data)
2723 data = ctx.repo().wwritedata(path, data)
2724 fm.startitem()
2724 fm.startitem()
2725 fm.context(ctx=ctx)
2725 fm.context(ctx=ctx)
2726 fm.write(b'data', b'%s', data)
2726 fm.write(b'data', b'%s', data)
2727 fm.data(path=path)
2727 fm.data(path=path)
2728
2728
2729
2729
2730 def cat(ui, repo, ctx, matcher, basefm, fntemplate, prefix, **opts):
2730 def cat(ui, repo, ctx, matcher, basefm, fntemplate, prefix, **opts):
2731 err = 1
2731 err = 1
2732 opts = pycompat.byteskwargs(opts)
2732 opts = pycompat.byteskwargs(opts)
2733
2733
2734 def write(path):
2734 def write(path):
2735 filename = None
2735 filename = None
2736 if fntemplate:
2736 if fntemplate:
2737 filename = makefilename(
2737 filename = makefilename(
2738 ctx, fntemplate, pathname=os.path.join(prefix, path)
2738 ctx, fntemplate, pathname=os.path.join(prefix, path)
2739 )
2739 )
2740 # attempt to create the directory if it does not already exist
2740 # attempt to create the directory if it does not already exist
2741 try:
2741 try:
2742 os.makedirs(os.path.dirname(filename))
2742 os.makedirs(os.path.dirname(filename))
2743 except OSError:
2743 except OSError:
2744 pass
2744 pass
2745 with formatter.maybereopen(basefm, filename) as fm:
2745 with formatter.maybereopen(basefm, filename) as fm:
2746 _updatecatformatter(fm, ctx, matcher, path, opts.get(b'decode'))
2746 _updatecatformatter(fm, ctx, matcher, path, opts.get(b'decode'))
2747
2747
2748 # Automation often uses hg cat on single files, so special case it
2748 # Automation often uses hg cat on single files, so special case it
2749 # for performance to avoid the cost of parsing the manifest.
2749 # for performance to avoid the cost of parsing the manifest.
2750 if len(matcher.files()) == 1 and not matcher.anypats():
2750 if len(matcher.files()) == 1 and not matcher.anypats():
2751 file = matcher.files()[0]
2751 file = matcher.files()[0]
2752 mfl = repo.manifestlog
2752 mfl = repo.manifestlog
2753 mfnode = ctx.manifestnode()
2753 mfnode = ctx.manifestnode()
2754 try:
2754 try:
2755 if mfnode and mfl[mfnode].find(file)[0]:
2755 if mfnode and mfl[mfnode].find(file)[0]:
2756 if _catfmtneedsdata(basefm):
2756 if _catfmtneedsdata(basefm):
2757 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)])
2757 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)])
2758 write(file)
2758 write(file)
2759 return 0
2759 return 0
2760 except KeyError:
2760 except KeyError:
2761 pass
2761 pass
2762
2762
2763 if _catfmtneedsdata(basefm):
2763 if _catfmtneedsdata(basefm):
2764 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)])
2764 scmutil.prefetchfiles(repo, [(ctx.rev(), matcher)])
2765
2765
2766 for abs in ctx.walk(matcher):
2766 for abs in ctx.walk(matcher):
2767 write(abs)
2767 write(abs)
2768 err = 0
2768 err = 0
2769
2769
2770 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
2770 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
2771 for subpath in sorted(ctx.substate):
2771 for subpath in sorted(ctx.substate):
2772 sub = ctx.sub(subpath)
2772 sub = ctx.sub(subpath)
2773 try:
2773 try:
2774 submatch = matchmod.subdirmatcher(subpath, matcher)
2774 submatch = matchmod.subdirmatcher(subpath, matcher)
2775 subprefix = os.path.join(prefix, subpath)
2775 subprefix = os.path.join(prefix, subpath)
2776 if not sub.cat(
2776 if not sub.cat(
2777 submatch,
2777 submatch,
2778 basefm,
2778 basefm,
2779 fntemplate,
2779 fntemplate,
2780 subprefix,
2780 subprefix,
2781 **pycompat.strkwargs(opts)
2781 **pycompat.strkwargs(opts)
2782 ):
2782 ):
2783 err = 0
2783 err = 0
2784 except error.RepoLookupError:
2784 except error.RepoLookupError:
2785 ui.status(
2785 ui.status(
2786 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
2786 _(b"skipping missing subrepository: %s\n") % uipathfn(subpath)
2787 )
2787 )
2788
2788
2789 return err
2789 return err
2790
2790
2791
2791
2792 def commit(ui, repo, commitfunc, pats, opts):
2792 def commit(ui, repo, commitfunc, pats, opts):
2793 '''commit the specified files or all outstanding changes'''
2793 '''commit the specified files or all outstanding changes'''
2794 date = opts.get(b'date')
2794 date = opts.get(b'date')
2795 if date:
2795 if date:
2796 opts[b'date'] = dateutil.parsedate(date)
2796 opts[b'date'] = dateutil.parsedate(date)
2797 message = logmessage(ui, opts)
2797 message = logmessage(ui, opts)
2798 matcher = scmutil.match(repo[None], pats, opts)
2798 matcher = scmutil.match(repo[None], pats, opts)
2799
2799
2800 dsguard = None
2800 dsguard = None
2801 # extract addremove carefully -- this function can be called from a command
2801 # extract addremove carefully -- this function can be called from a command
2802 # that doesn't support addremove
2802 # that doesn't support addremove
2803 if opts.get(b'addremove'):
2803 if opts.get(b'addremove'):
2804 dsguard = dirstateguard.dirstateguard(repo, b'commit')
2804 dsguard = dirstateguard.dirstateguard(repo, b'commit')
2805 with dsguard or util.nullcontextmanager():
2805 with dsguard or util.nullcontextmanager():
2806 if dsguard:
2806 if dsguard:
2807 relative = scmutil.anypats(pats, opts)
2807 relative = scmutil.anypats(pats, opts)
2808 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=relative)
2808 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=relative)
2809 if scmutil.addremove(repo, matcher, b"", uipathfn, opts) != 0:
2809 if scmutil.addremove(repo, matcher, b"", uipathfn, opts) != 0:
2810 raise error.Abort(
2810 raise error.Abort(
2811 _(b"failed to mark all new/missing files as added/removed")
2811 _(b"failed to mark all new/missing files as added/removed")
2812 )
2812 )
2813
2813
2814 return commitfunc(ui, repo, message, matcher, opts)
2814 return commitfunc(ui, repo, message, matcher, opts)
2815
2815
2816
2816
2817 def samefile(f, ctx1, ctx2):
2817 def samefile(f, ctx1, ctx2):
2818 if f in ctx1.manifest():
2818 if f in ctx1.manifest():
2819 a = ctx1.filectx(f)
2819 a = ctx1.filectx(f)
2820 if f in ctx2.manifest():
2820 if f in ctx2.manifest():
2821 b = ctx2.filectx(f)
2821 b = ctx2.filectx(f)
2822 return not a.cmp(b) and a.flags() == b.flags()
2822 return not a.cmp(b) and a.flags() == b.flags()
2823 else:
2823 else:
2824 return False
2824 return False
2825 else:
2825 else:
2826 return f not in ctx2.manifest()
2826 return f not in ctx2.manifest()
2827
2827
2828
2828
2829 def amend(ui, repo, old, extra, pats, opts):
2829 def amend(ui, repo, old, extra, pats, opts):
2830 # avoid cycle context -> subrepo -> cmdutil
2830 # avoid cycle context -> subrepo -> cmdutil
2831 from . import context
2831 from . import context
2832
2832
2833 # amend will reuse the existing user if not specified, but the obsolete
2833 # amend will reuse the existing user if not specified, but the obsolete
2834 # marker creation requires that the current user's name is specified.
2834 # marker creation requires that the current user's name is specified.
2835 if obsolete.isenabled(repo, obsolete.createmarkersopt):
2835 if obsolete.isenabled(repo, obsolete.createmarkersopt):
2836 ui.username() # raise exception if username not set
2836 ui.username() # raise exception if username not set
2837
2837
2838 ui.note(_(b'amending changeset %s\n') % old)
2838 ui.note(_(b'amending changeset %s\n') % old)
2839 base = old.p1()
2839 base = old.p1()
2840
2840
2841 with repo.wlock(), repo.lock(), repo.transaction(b'amend'):
2841 with repo.wlock(), repo.lock(), repo.transaction(b'amend'):
2842 # Participating changesets:
2842 # Participating changesets:
2843 #
2843 #
2844 # wctx o - workingctx that contains changes from working copy
2844 # wctx o - workingctx that contains changes from working copy
2845 # | to go into amending commit
2845 # | to go into amending commit
2846 # |
2846 # |
2847 # old o - changeset to amend
2847 # old o - changeset to amend
2848 # |
2848 # |
2849 # base o - first parent of the changeset to amend
2849 # base o - first parent of the changeset to amend
2850 wctx = repo[None]
2850 wctx = repo[None]
2851
2851
2852 # Copy to avoid mutating input
2852 # Copy to avoid mutating input
2853 extra = extra.copy()
2853 extra = extra.copy()
2854 # Update extra dict from amended commit (e.g. to preserve graft
2854 # Update extra dict from amended commit (e.g. to preserve graft
2855 # source)
2855 # source)
2856 extra.update(old.extra())
2856 extra.update(old.extra())
2857
2857
2858 # Also update it from the from the wctx
2858 # Also update it from the from the wctx
2859 extra.update(wctx.extra())
2859 extra.update(wctx.extra())
2860
2860
2861 # date-only change should be ignored?
2861 # date-only change should be ignored?
2862 datemaydiffer = resolve_commit_options(ui, opts)
2862 datemaydiffer = resolve_commit_options(ui, opts)
2863 opts = pycompat.byteskwargs(opts)
2863 opts = pycompat.byteskwargs(opts)
2864
2864
2865 date = old.date()
2865 date = old.date()
2866 if opts.get(b'date'):
2866 if opts.get(b'date'):
2867 date = dateutil.parsedate(opts.get(b'date'))
2867 date = dateutil.parsedate(opts.get(b'date'))
2868 user = opts.get(b'user') or old.user()
2868 user = opts.get(b'user') or old.user()
2869
2869
2870 if len(old.parents()) > 1:
2870 if len(old.parents()) > 1:
2871 # ctx.files() isn't reliable for merges, so fall back to the
2871 # ctx.files() isn't reliable for merges, so fall back to the
2872 # slower repo.status() method
2872 # slower repo.status() method
2873 st = base.status(old)
2873 st = base.status(old)
2874 files = set(st.modified) | set(st.added) | set(st.removed)
2874 files = set(st.modified) | set(st.added) | set(st.removed)
2875 else:
2875 else:
2876 files = set(old.files())
2876 files = set(old.files())
2877
2877
2878 # add/remove the files to the working copy if the "addremove" option
2878 # add/remove the files to the working copy if the "addremove" option
2879 # was specified.
2879 # was specified.
2880 matcher = scmutil.match(wctx, pats, opts)
2880 matcher = scmutil.match(wctx, pats, opts)
2881 relative = scmutil.anypats(pats, opts)
2881 relative = scmutil.anypats(pats, opts)
2882 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=relative)
2882 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=relative)
2883 if opts.get(b'addremove') and scmutil.addremove(
2883 if opts.get(b'addremove') and scmutil.addremove(
2884 repo, matcher, b"", uipathfn, opts
2884 repo, matcher, b"", uipathfn, opts
2885 ):
2885 ):
2886 raise error.Abort(
2886 raise error.Abort(
2887 _(b"failed to mark all new/missing files as added/removed")
2887 _(b"failed to mark all new/missing files as added/removed")
2888 )
2888 )
2889
2889
2890 # Check subrepos. This depends on in-place wctx._status update in
2890 # Check subrepos. This depends on in-place wctx._status update in
2891 # subrepo.precommit(). To minimize the risk of this hack, we do
2891 # subrepo.precommit(). To minimize the risk of this hack, we do
2892 # nothing if .hgsub does not exist.
2892 # nothing if .hgsub does not exist.
2893 if b'.hgsub' in wctx or b'.hgsub' in old:
2893 if b'.hgsub' in wctx or b'.hgsub' in old:
2894 subs, commitsubs, newsubstate = subrepoutil.precommit(
2894 subs, commitsubs, newsubstate = subrepoutil.precommit(
2895 ui, wctx, wctx._status, matcher
2895 ui, wctx, wctx._status, matcher
2896 )
2896 )
2897 # amend should abort if commitsubrepos is enabled
2897 # amend should abort if commitsubrepos is enabled
2898 assert not commitsubs
2898 assert not commitsubs
2899 if subs:
2899 if subs:
2900 subrepoutil.writestate(repo, newsubstate)
2900 subrepoutil.writestate(repo, newsubstate)
2901
2901
2902 ms = mergestatemod.mergestate.read(repo)
2902 ms = mergestatemod.mergestate.read(repo)
2903 mergeutil.checkunresolved(ms)
2903 mergeutil.checkunresolved(ms)
2904
2904
2905 filestoamend = {f for f in wctx.files() if matcher(f)}
2905 filestoamend = {f for f in wctx.files() if matcher(f)}
2906
2906
2907 changes = len(filestoamend) > 0
2907 changes = len(filestoamend) > 0
2908 changeset_copies = (
2908 changeset_copies = (
2909 repo.ui.config(b'experimental', b'copies.read-from')
2909 repo.ui.config(b'experimental', b'copies.read-from')
2910 != b'filelog-only'
2910 != b'filelog-only'
2911 )
2911 )
2912 # If there are changes to amend or if copy information needs to be read
2912 # If there are changes to amend or if copy information needs to be read
2913 # from the changeset extras, we cannot take the fast path of using
2913 # from the changeset extras, we cannot take the fast path of using
2914 # filectxs from the old commit.
2914 # filectxs from the old commit.
2915 if changes or changeset_copies:
2915 if changes or changeset_copies:
2916 # Recompute copies (avoid recording a -> b -> a)
2916 # Recompute copies (avoid recording a -> b -> a)
2917 copied = copies.pathcopies(base, wctx, matcher)
2917 copied = copies.pathcopies(base, wctx)
2918 if old.p2:
2918 if old.p2():
2919 copied.update(copies.pathcopies(old.p2(), wctx, matcher))
2919 copied.update(copies.pathcopies(old.p2(), wctx))
2920
2920
2921 # Prune files which were reverted by the updates: if old
2921 # Prune files which were reverted by the updates: if old
2922 # introduced file X and the file was renamed in the working
2922 # introduced file X and the file was renamed in the working
2923 # copy, then those two files are the same and
2923 # copy, then those two files are the same and
2924 # we can discard X from our list of files. Likewise if X
2924 # we can discard X from our list of files. Likewise if X
2925 # was removed, it's no longer relevant. If X is missing (aka
2925 # was removed, it's no longer relevant. If X is missing (aka
2926 # deleted), old X must be preserved.
2926 # deleted), old X must be preserved.
2927 files.update(filestoamend)
2927 files.update(filestoamend)
2928 files = [
2928 files = [
2929 f
2929 f
2930 for f in files
2930 for f in files
2931 if (f not in filestoamend or not samefile(f, wctx, base))
2931 if (f not in filestoamend or not samefile(f, wctx, base))
2932 ]
2932 ]
2933
2933
2934 def filectxfn(repo, ctx_, path):
2934 def filectxfn(repo, ctx_, path):
2935 try:
2935 try:
2936 # If the file being considered is not amongst the files
2936 # If the file being considered is not amongst the files
2937 # to be amended, we should use the file context from the
2937 # to be amended, we should use the file context from the
2938 # old changeset. This avoids issues when only some files in
2938 # old changeset. This avoids issues when only some files in
2939 # the working copy are being amended but there are also
2939 # the working copy are being amended but there are also
2940 # changes to other files from the old changeset.
2940 # changes to other files from the old changeset.
2941 if path in filestoamend:
2941 if path in filestoamend:
2942 # Return None for removed files.
2942 # Return None for removed files.
2943 if path in wctx.removed():
2943 if path in wctx.removed():
2944 return None
2944 return None
2945 fctx = wctx[path]
2945 fctx = wctx[path]
2946 else:
2946 else:
2947 fctx = old.filectx(path)
2947 fctx = old.filectx(path)
2948 flags = fctx.flags()
2948 flags = fctx.flags()
2949 mctx = context.memfilectx(
2949 mctx = context.memfilectx(
2950 repo,
2950 repo,
2951 ctx_,
2951 ctx_,
2952 fctx.path(),
2952 fctx.path(),
2953 fctx.data(),
2953 fctx.data(),
2954 islink=b'l' in flags,
2954 islink=b'l' in flags,
2955 isexec=b'x' in flags,
2955 isexec=b'x' in flags,
2956 copysource=copied.get(path),
2956 copysource=copied.get(path),
2957 )
2957 )
2958 return mctx
2958 return mctx
2959 except KeyError:
2959 except KeyError:
2960 return None
2960 return None
2961
2961
2962 else:
2962 else:
2963 ui.note(_(b'copying changeset %s to %s\n') % (old, base))
2963 ui.note(_(b'copying changeset %s to %s\n') % (old, base))
2964
2964
2965 # Use version of files as in the old cset
2965 # Use version of files as in the old cset
2966 def filectxfn(repo, ctx_, path):
2966 def filectxfn(repo, ctx_, path):
2967 try:
2967 try:
2968 return old.filectx(path)
2968 return old.filectx(path)
2969 except KeyError:
2969 except KeyError:
2970 return None
2970 return None
2971
2971
2972 # See if we got a message from -m or -l, if not, open the editor with
2972 # See if we got a message from -m or -l, if not, open the editor with
2973 # the message of the changeset to amend.
2973 # the message of the changeset to amend.
2974 message = logmessage(ui, opts)
2974 message = logmessage(ui, opts)
2975
2975
2976 editform = mergeeditform(old, b'commit.amend')
2976 editform = mergeeditform(old, b'commit.amend')
2977
2977
2978 if not message:
2978 if not message:
2979 message = old.description()
2979 message = old.description()
2980 # Default if message isn't provided and --edit is not passed is to
2980 # Default if message isn't provided and --edit is not passed is to
2981 # invoke editor, but allow --no-edit. If somehow we don't have any
2981 # invoke editor, but allow --no-edit. If somehow we don't have any
2982 # description, let's always start the editor.
2982 # description, let's always start the editor.
2983 doedit = not message or opts.get(b'edit') in [True, None]
2983 doedit = not message or opts.get(b'edit') in [True, None]
2984 else:
2984 else:
2985 # Default if message is provided is to not invoke editor, but allow
2985 # Default if message is provided is to not invoke editor, but allow
2986 # --edit.
2986 # --edit.
2987 doedit = opts.get(b'edit') is True
2987 doedit = opts.get(b'edit') is True
2988 editor = getcommiteditor(edit=doedit, editform=editform)
2988 editor = getcommiteditor(edit=doedit, editform=editform)
2989
2989
2990 pureextra = extra.copy()
2990 pureextra = extra.copy()
2991 extra[b'amend_source'] = old.hex()
2991 extra[b'amend_source'] = old.hex()
2992
2992
2993 new = context.memctx(
2993 new = context.memctx(
2994 repo,
2994 repo,
2995 parents=[base.node(), old.p2().node()],
2995 parents=[base.node(), old.p2().node()],
2996 text=message,
2996 text=message,
2997 files=files,
2997 files=files,
2998 filectxfn=filectxfn,
2998 filectxfn=filectxfn,
2999 user=user,
2999 user=user,
3000 date=date,
3000 date=date,
3001 extra=extra,
3001 extra=extra,
3002 editor=editor,
3002 editor=editor,
3003 )
3003 )
3004
3004
3005 newdesc = changelog.stripdesc(new.description())
3005 newdesc = changelog.stripdesc(new.description())
3006 if (
3006 if (
3007 (not changes)
3007 (not changes)
3008 and newdesc == old.description()
3008 and newdesc == old.description()
3009 and user == old.user()
3009 and user == old.user()
3010 and (date == old.date() or datemaydiffer)
3010 and (date == old.date() or datemaydiffer)
3011 and pureextra == old.extra()
3011 and pureextra == old.extra()
3012 ):
3012 ):
3013 # nothing changed. continuing here would create a new node
3013 # nothing changed. continuing here would create a new node
3014 # anyway because of the amend_source noise.
3014 # anyway because of the amend_source noise.
3015 #
3015 #
3016 # This not what we expect from amend.
3016 # This not what we expect from amend.
3017 return old.node()
3017 return old.node()
3018
3018
3019 commitphase = None
3019 commitphase = None
3020 if opts.get(b'secret'):
3020 if opts.get(b'secret'):
3021 commitphase = phases.secret
3021 commitphase = phases.secret
3022 newid = repo.commitctx(new)
3022 newid = repo.commitctx(new)
3023 ms.reset()
3023 ms.reset()
3024
3024
3025 with repo.dirstate.parentchange():
3025 with repo.dirstate.parentchange():
3026 # Reroute the working copy parent to the new changeset
3026 # Reroute the working copy parent to the new changeset
3027 repo.setparents(newid, repo.nullid)
3027 repo.setparents(newid, repo.nullid)
3028
3028
3029 # Fixing the dirstate because localrepo.commitctx does not update
3029 # Fixing the dirstate because localrepo.commitctx does not update
3030 # it. This is rather convenient because we did not need to update
3030 # it. This is rather convenient because we did not need to update
3031 # the dirstate for all the files in the new commit which commitctx
3031 # the dirstate for all the files in the new commit which commitctx
3032 # could have done if it updated the dirstate. Now, we can
3032 # could have done if it updated the dirstate. Now, we can
3033 # selectively update the dirstate only for the amended files.
3033 # selectively update the dirstate only for the amended files.
3034 dirstate = repo.dirstate
3034 dirstate = repo.dirstate
3035
3035
3036 # Update the state of the files which were added and modified in the
3036 # Update the state of the files which were added and modified in the
3037 # amend to "normal" in the dirstate. We need to use "normallookup" since
3037 # amend to "normal" in the dirstate. We need to use "normallookup" since
3038 # the files may have changed since the command started; using "normal"
3038 # the files may have changed since the command started; using "normal"
3039 # would mark them as clean but with uncommitted contents.
3039 # would mark them as clean but with uncommitted contents.
3040 normalfiles = set(wctx.modified() + wctx.added()) & filestoamend
3040 normalfiles = set(wctx.modified() + wctx.added()) & filestoamend
3041 for f in normalfiles:
3041 for f in normalfiles:
3042 dirstate.update_file(
3042 dirstate.update_file(
3043 f, p1_tracked=True, wc_tracked=True, possibly_dirty=True
3043 f, p1_tracked=True, wc_tracked=True, possibly_dirty=True
3044 )
3044 )
3045
3045
3046 # Update the state of files which were removed in the amend
3046 # Update the state of files which were removed in the amend
3047 # to "removed" in the dirstate.
3047 # to "removed" in the dirstate.
3048 removedfiles = set(wctx.removed()) & filestoamend
3048 removedfiles = set(wctx.removed()) & filestoamend
3049 for f in removedfiles:
3049 for f in removedfiles:
3050 dirstate.update_file(f, p1_tracked=False, wc_tracked=False)
3050 dirstate.update_file(f, p1_tracked=False, wc_tracked=False)
3051
3051
3052 mapping = {old.node(): (newid,)}
3052 mapping = {old.node(): (newid,)}
3053 obsmetadata = None
3053 obsmetadata = None
3054 if opts.get(b'note'):
3054 if opts.get(b'note'):
3055 obsmetadata = {b'note': encoding.fromlocal(opts[b'note'])}
3055 obsmetadata = {b'note': encoding.fromlocal(opts[b'note'])}
3056 backup = ui.configbool(b'rewrite', b'backup-bundle')
3056 backup = ui.configbool(b'rewrite', b'backup-bundle')
3057 scmutil.cleanupnodes(
3057 scmutil.cleanupnodes(
3058 repo,
3058 repo,
3059 mapping,
3059 mapping,
3060 b'amend',
3060 b'amend',
3061 metadata=obsmetadata,
3061 metadata=obsmetadata,
3062 fixphase=True,
3062 fixphase=True,
3063 targetphase=commitphase,
3063 targetphase=commitphase,
3064 backup=backup,
3064 backup=backup,
3065 )
3065 )
3066
3066
3067 return newid
3067 return newid
3068
3068
3069
3069
3070 def commiteditor(repo, ctx, subs, editform=b''):
3070 def commiteditor(repo, ctx, subs, editform=b''):
3071 if ctx.description():
3071 if ctx.description():
3072 return ctx.description()
3072 return ctx.description()
3073 return commitforceeditor(
3073 return commitforceeditor(
3074 repo, ctx, subs, editform=editform, unchangedmessagedetection=True
3074 repo, ctx, subs, editform=editform, unchangedmessagedetection=True
3075 )
3075 )
3076
3076
3077
3077
3078 def commitforceeditor(
3078 def commitforceeditor(
3079 repo,
3079 repo,
3080 ctx,
3080 ctx,
3081 subs,
3081 subs,
3082 finishdesc=None,
3082 finishdesc=None,
3083 extramsg=None,
3083 extramsg=None,
3084 editform=b'',
3084 editform=b'',
3085 unchangedmessagedetection=False,
3085 unchangedmessagedetection=False,
3086 ):
3086 ):
3087 if not extramsg:
3087 if not extramsg:
3088 extramsg = _(b"Leave message empty to abort commit.")
3088 extramsg = _(b"Leave message empty to abort commit.")
3089
3089
3090 forms = [e for e in editform.split(b'.') if e]
3090 forms = [e for e in editform.split(b'.') if e]
3091 forms.insert(0, b'changeset')
3091 forms.insert(0, b'changeset')
3092 templatetext = None
3092 templatetext = None
3093 while forms:
3093 while forms:
3094 ref = b'.'.join(forms)
3094 ref = b'.'.join(forms)
3095 if repo.ui.config(b'committemplate', ref):
3095 if repo.ui.config(b'committemplate', ref):
3096 templatetext = committext = buildcommittemplate(
3096 templatetext = committext = buildcommittemplate(
3097 repo, ctx, subs, extramsg, ref
3097 repo, ctx, subs, extramsg, ref
3098 )
3098 )
3099 break
3099 break
3100 forms.pop()
3100 forms.pop()
3101 else:
3101 else:
3102 committext = buildcommittext(repo, ctx, subs, extramsg)
3102 committext = buildcommittext(repo, ctx, subs, extramsg)
3103
3103
3104 # run editor in the repository root
3104 # run editor in the repository root
3105 olddir = encoding.getcwd()
3105 olddir = encoding.getcwd()
3106 os.chdir(repo.root)
3106 os.chdir(repo.root)
3107
3107
3108 # make in-memory changes visible to external process
3108 # make in-memory changes visible to external process
3109 tr = repo.currenttransaction()
3109 tr = repo.currenttransaction()
3110 repo.dirstate.write(tr)
3110 repo.dirstate.write(tr)
3111 pending = tr and tr.writepending() and repo.root
3111 pending = tr and tr.writepending() and repo.root
3112
3112
3113 editortext = repo.ui.edit(
3113 editortext = repo.ui.edit(
3114 committext,
3114 committext,
3115 ctx.user(),
3115 ctx.user(),
3116 ctx.extra(),
3116 ctx.extra(),
3117 editform=editform,
3117 editform=editform,
3118 pending=pending,
3118 pending=pending,
3119 repopath=repo.path,
3119 repopath=repo.path,
3120 action=b'commit',
3120 action=b'commit',
3121 )
3121 )
3122 text = editortext
3122 text = editortext
3123
3123
3124 # strip away anything below this special string (used for editors that want
3124 # strip away anything below this special string (used for editors that want
3125 # to display the diff)
3125 # to display the diff)
3126 stripbelow = re.search(_linebelow, text, flags=re.MULTILINE)
3126 stripbelow = re.search(_linebelow, text, flags=re.MULTILINE)
3127 if stripbelow:
3127 if stripbelow:
3128 text = text[: stripbelow.start()]
3128 text = text[: stripbelow.start()]
3129
3129
3130 text = re.sub(b"(?m)^HG:.*(\n|$)", b"", text)
3130 text = re.sub(b"(?m)^HG:.*(\n|$)", b"", text)
3131 os.chdir(olddir)
3131 os.chdir(olddir)
3132
3132
3133 if finishdesc:
3133 if finishdesc:
3134 text = finishdesc(text)
3134 text = finishdesc(text)
3135 if not text.strip():
3135 if not text.strip():
3136 raise error.InputError(_(b"empty commit message"))
3136 raise error.InputError(_(b"empty commit message"))
3137 if unchangedmessagedetection and editortext == templatetext:
3137 if unchangedmessagedetection and editortext == templatetext:
3138 raise error.InputError(_(b"commit message unchanged"))
3138 raise error.InputError(_(b"commit message unchanged"))
3139
3139
3140 return text
3140 return text
3141
3141
3142
3142
3143 def buildcommittemplate(repo, ctx, subs, extramsg, ref):
3143 def buildcommittemplate(repo, ctx, subs, extramsg, ref):
3144 ui = repo.ui
3144 ui = repo.ui
3145 spec = formatter.reference_templatespec(ref)
3145 spec = formatter.reference_templatespec(ref)
3146 t = logcmdutil.changesettemplater(ui, repo, spec)
3146 t = logcmdutil.changesettemplater(ui, repo, spec)
3147 t.t.cache.update(
3147 t.t.cache.update(
3148 (k, templater.unquotestring(v))
3148 (k, templater.unquotestring(v))
3149 for k, v in repo.ui.configitems(b'committemplate')
3149 for k, v in repo.ui.configitems(b'committemplate')
3150 )
3150 )
3151
3151
3152 if not extramsg:
3152 if not extramsg:
3153 extramsg = b'' # ensure that extramsg is string
3153 extramsg = b'' # ensure that extramsg is string
3154
3154
3155 ui.pushbuffer()
3155 ui.pushbuffer()
3156 t.show(ctx, extramsg=extramsg)
3156 t.show(ctx, extramsg=extramsg)
3157 return ui.popbuffer()
3157 return ui.popbuffer()
3158
3158
3159
3159
3160 def hgprefix(msg):
3160 def hgprefix(msg):
3161 return b"\n".join([b"HG: %s" % a for a in msg.split(b"\n") if a])
3161 return b"\n".join([b"HG: %s" % a for a in msg.split(b"\n") if a])
3162
3162
3163
3163
3164 def buildcommittext(repo, ctx, subs, extramsg):
3164 def buildcommittext(repo, ctx, subs, extramsg):
3165 edittext = []
3165 edittext = []
3166 modified, added, removed = ctx.modified(), ctx.added(), ctx.removed()
3166 modified, added, removed = ctx.modified(), ctx.added(), ctx.removed()
3167 if ctx.description():
3167 if ctx.description():
3168 edittext.append(ctx.description())
3168 edittext.append(ctx.description())
3169 edittext.append(b"")
3169 edittext.append(b"")
3170 edittext.append(b"") # Empty line between message and comments.
3170 edittext.append(b"") # Empty line between message and comments.
3171 edittext.append(
3171 edittext.append(
3172 hgprefix(
3172 hgprefix(
3173 _(
3173 _(
3174 b"Enter commit message."
3174 b"Enter commit message."
3175 b" Lines beginning with 'HG:' are removed."
3175 b" Lines beginning with 'HG:' are removed."
3176 )
3176 )
3177 )
3177 )
3178 )
3178 )
3179 edittext.append(hgprefix(extramsg))
3179 edittext.append(hgprefix(extramsg))
3180 edittext.append(b"HG: --")
3180 edittext.append(b"HG: --")
3181 edittext.append(hgprefix(_(b"user: %s") % ctx.user()))
3181 edittext.append(hgprefix(_(b"user: %s") % ctx.user()))
3182 if ctx.p2():
3182 if ctx.p2():
3183 edittext.append(hgprefix(_(b"branch merge")))
3183 edittext.append(hgprefix(_(b"branch merge")))
3184 if ctx.branch():
3184 if ctx.branch():
3185 edittext.append(hgprefix(_(b"branch '%s'") % ctx.branch()))
3185 edittext.append(hgprefix(_(b"branch '%s'") % ctx.branch()))
3186 if bookmarks.isactivewdirparent(repo):
3186 if bookmarks.isactivewdirparent(repo):
3187 edittext.append(hgprefix(_(b"bookmark '%s'") % repo._activebookmark))
3187 edittext.append(hgprefix(_(b"bookmark '%s'") % repo._activebookmark))
3188 edittext.extend([hgprefix(_(b"subrepo %s") % s) for s in subs])
3188 edittext.extend([hgprefix(_(b"subrepo %s") % s) for s in subs])
3189 edittext.extend([hgprefix(_(b"added %s") % f) for f in added])
3189 edittext.extend([hgprefix(_(b"added %s") % f) for f in added])
3190 edittext.extend([hgprefix(_(b"changed %s") % f) for f in modified])
3190 edittext.extend([hgprefix(_(b"changed %s") % f) for f in modified])
3191 edittext.extend([hgprefix(_(b"removed %s") % f) for f in removed])
3191 edittext.extend([hgprefix(_(b"removed %s") % f) for f in removed])
3192 if not added and not modified and not removed:
3192 if not added and not modified and not removed:
3193 edittext.append(hgprefix(_(b"no files changed")))
3193 edittext.append(hgprefix(_(b"no files changed")))
3194 edittext.append(b"")
3194 edittext.append(b"")
3195
3195
3196 return b"\n".join(edittext)
3196 return b"\n".join(edittext)
3197
3197
3198
3198
3199 def commitstatus(repo, node, branch, bheads=None, tip=None, opts=None):
3199 def commitstatus(repo, node, branch, bheads=None, tip=None, opts=None):
3200 if opts is None:
3200 if opts is None:
3201 opts = {}
3201 opts = {}
3202 ctx = repo[node]
3202 ctx = repo[node]
3203 parents = ctx.parents()
3203 parents = ctx.parents()
3204
3204
3205 if tip is not None and repo.changelog.tip() == tip:
3205 if tip is not None and repo.changelog.tip() == tip:
3206 # avoid reporting something like "committed new head" when
3206 # avoid reporting something like "committed new head" when
3207 # recommitting old changesets, and issue a helpful warning
3207 # recommitting old changesets, and issue a helpful warning
3208 # for most instances
3208 # for most instances
3209 repo.ui.warn(_(b"warning: commit already existed in the repository!\n"))
3209 repo.ui.warn(_(b"warning: commit already existed in the repository!\n"))
3210 elif (
3210 elif (
3211 not opts.get(b'amend')
3211 not opts.get(b'amend')
3212 and bheads
3212 and bheads
3213 and node not in bheads
3213 and node not in bheads
3214 and not any(
3214 and not any(
3215 p.node() in bheads and p.branch() == branch for p in parents
3215 p.node() in bheads and p.branch() == branch for p in parents
3216 )
3216 )
3217 ):
3217 ):
3218 repo.ui.status(_(b'created new head\n'))
3218 repo.ui.status(_(b'created new head\n'))
3219 # The message is not printed for initial roots. For the other
3219 # The message is not printed for initial roots. For the other
3220 # changesets, it is printed in the following situations:
3220 # changesets, it is printed in the following situations:
3221 #
3221 #
3222 # Par column: for the 2 parents with ...
3222 # Par column: for the 2 parents with ...
3223 # N: null or no parent
3223 # N: null or no parent
3224 # B: parent is on another named branch
3224 # B: parent is on another named branch
3225 # C: parent is a regular non head changeset
3225 # C: parent is a regular non head changeset
3226 # H: parent was a branch head of the current branch
3226 # H: parent was a branch head of the current branch
3227 # Msg column: whether we print "created new head" message
3227 # Msg column: whether we print "created new head" message
3228 # In the following, it is assumed that there already exists some
3228 # In the following, it is assumed that there already exists some
3229 # initial branch heads of the current branch, otherwise nothing is
3229 # initial branch heads of the current branch, otherwise nothing is
3230 # printed anyway.
3230 # printed anyway.
3231 #
3231 #
3232 # Par Msg Comment
3232 # Par Msg Comment
3233 # N N y additional topo root
3233 # N N y additional topo root
3234 #
3234 #
3235 # B N y additional branch root
3235 # B N y additional branch root
3236 # C N y additional topo head
3236 # C N y additional topo head
3237 # H N n usual case
3237 # H N n usual case
3238 #
3238 #
3239 # B B y weird additional branch root
3239 # B B y weird additional branch root
3240 # C B y branch merge
3240 # C B y branch merge
3241 # H B n merge with named branch
3241 # H B n merge with named branch
3242 #
3242 #
3243 # C C y additional head from merge
3243 # C C y additional head from merge
3244 # C H n merge with a head
3244 # C H n merge with a head
3245 #
3245 #
3246 # H H n head merge: head count decreases
3246 # H H n head merge: head count decreases
3247
3247
3248 if not opts.get(b'close_branch'):
3248 if not opts.get(b'close_branch'):
3249 for r in parents:
3249 for r in parents:
3250 if r.closesbranch() and r.branch() == branch:
3250 if r.closesbranch() and r.branch() == branch:
3251 repo.ui.status(
3251 repo.ui.status(
3252 _(b'reopening closed branch head %d\n') % r.rev()
3252 _(b'reopening closed branch head %d\n') % r.rev()
3253 )
3253 )
3254
3254
3255 if repo.ui.debugflag:
3255 if repo.ui.debugflag:
3256 repo.ui.write(
3256 repo.ui.write(
3257 _(b'committed changeset %d:%s\n') % (ctx.rev(), ctx.hex())
3257 _(b'committed changeset %d:%s\n') % (ctx.rev(), ctx.hex())
3258 )
3258 )
3259 elif repo.ui.verbose:
3259 elif repo.ui.verbose:
3260 repo.ui.write(_(b'committed changeset %d:%s\n') % (ctx.rev(), ctx))
3260 repo.ui.write(_(b'committed changeset %d:%s\n') % (ctx.rev(), ctx))
3261
3261
3262
3262
3263 def postcommitstatus(repo, pats, opts):
3263 def postcommitstatus(repo, pats, opts):
3264 return repo.status(match=scmutil.match(repo[None], pats, opts))
3264 return repo.status(match=scmutil.match(repo[None], pats, opts))
3265
3265
3266
3266
3267 def revert(ui, repo, ctx, *pats, **opts):
3267 def revert(ui, repo, ctx, *pats, **opts):
3268 opts = pycompat.byteskwargs(opts)
3268 opts = pycompat.byteskwargs(opts)
3269 parent, p2 = repo.dirstate.parents()
3269 parent, p2 = repo.dirstate.parents()
3270 node = ctx.node()
3270 node = ctx.node()
3271
3271
3272 mf = ctx.manifest()
3272 mf = ctx.manifest()
3273 if node == p2:
3273 if node == p2:
3274 parent = p2
3274 parent = p2
3275
3275
3276 # need all matching names in dirstate and manifest of target rev,
3276 # need all matching names in dirstate and manifest of target rev,
3277 # so have to walk both. do not print errors if files exist in one
3277 # so have to walk both. do not print errors if files exist in one
3278 # but not other. in both cases, filesets should be evaluated against
3278 # but not other. in both cases, filesets should be evaluated against
3279 # workingctx to get consistent result (issue4497). this means 'set:**'
3279 # workingctx to get consistent result (issue4497). this means 'set:**'
3280 # cannot be used to select missing files from target rev.
3280 # cannot be used to select missing files from target rev.
3281
3281
3282 # `names` is a mapping for all elements in working copy and target revision
3282 # `names` is a mapping for all elements in working copy and target revision
3283 # The mapping is in the form:
3283 # The mapping is in the form:
3284 # <abs path in repo> -> (<path from CWD>, <exactly specified by matcher?>)
3284 # <abs path in repo> -> (<path from CWD>, <exactly specified by matcher?>)
3285 names = {}
3285 names = {}
3286 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
3286 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
3287
3287
3288 with repo.wlock():
3288 with repo.wlock():
3289 ## filling of the `names` mapping
3289 ## filling of the `names` mapping
3290 # walk dirstate to fill `names`
3290 # walk dirstate to fill `names`
3291
3291
3292 interactive = opts.get(b'interactive', False)
3292 interactive = opts.get(b'interactive', False)
3293 wctx = repo[None]
3293 wctx = repo[None]
3294 m = scmutil.match(wctx, pats, opts)
3294 m = scmutil.match(wctx, pats, opts)
3295
3295
3296 # we'll need this later
3296 # we'll need this later
3297 targetsubs = sorted(s for s in wctx.substate if m(s))
3297 targetsubs = sorted(s for s in wctx.substate if m(s))
3298
3298
3299 if not m.always():
3299 if not m.always():
3300 matcher = matchmod.badmatch(m, lambda x, y: False)
3300 matcher = matchmod.badmatch(m, lambda x, y: False)
3301 for abs in wctx.walk(matcher):
3301 for abs in wctx.walk(matcher):
3302 names[abs] = m.exact(abs)
3302 names[abs] = m.exact(abs)
3303
3303
3304 # walk target manifest to fill `names`
3304 # walk target manifest to fill `names`
3305
3305
3306 def badfn(path, msg):
3306 def badfn(path, msg):
3307 if path in names:
3307 if path in names:
3308 return
3308 return
3309 if path in ctx.substate:
3309 if path in ctx.substate:
3310 return
3310 return
3311 path_ = path + b'/'
3311 path_ = path + b'/'
3312 for f in names:
3312 for f in names:
3313 if f.startswith(path_):
3313 if f.startswith(path_):
3314 return
3314 return
3315 ui.warn(b"%s: %s\n" % (uipathfn(path), msg))
3315 ui.warn(b"%s: %s\n" % (uipathfn(path), msg))
3316
3316
3317 for abs in ctx.walk(matchmod.badmatch(m, badfn)):
3317 for abs in ctx.walk(matchmod.badmatch(m, badfn)):
3318 if abs not in names:
3318 if abs not in names:
3319 names[abs] = m.exact(abs)
3319 names[abs] = m.exact(abs)
3320
3320
3321 # Find status of all file in `names`.
3321 # Find status of all file in `names`.
3322 m = scmutil.matchfiles(repo, names)
3322 m = scmutil.matchfiles(repo, names)
3323
3323
3324 changes = repo.status(
3324 changes = repo.status(
3325 node1=node, match=m, unknown=True, ignored=True, clean=True
3325 node1=node, match=m, unknown=True, ignored=True, clean=True
3326 )
3326 )
3327 else:
3327 else:
3328 changes = repo.status(node1=node, match=m)
3328 changes = repo.status(node1=node, match=m)
3329 for kind in changes:
3329 for kind in changes:
3330 for abs in kind:
3330 for abs in kind:
3331 names[abs] = m.exact(abs)
3331 names[abs] = m.exact(abs)
3332
3332
3333 m = scmutil.matchfiles(repo, names)
3333 m = scmutil.matchfiles(repo, names)
3334
3334
3335 modified = set(changes.modified)
3335 modified = set(changes.modified)
3336 added = set(changes.added)
3336 added = set(changes.added)
3337 removed = set(changes.removed)
3337 removed = set(changes.removed)
3338 _deleted = set(changes.deleted)
3338 _deleted = set(changes.deleted)
3339 unknown = set(changes.unknown)
3339 unknown = set(changes.unknown)
3340 unknown.update(changes.ignored)
3340 unknown.update(changes.ignored)
3341 clean = set(changes.clean)
3341 clean = set(changes.clean)
3342 modadded = set()
3342 modadded = set()
3343
3343
3344 # We need to account for the state of the file in the dirstate,
3344 # We need to account for the state of the file in the dirstate,
3345 # even when we revert against something else than parent. This will
3345 # even when we revert against something else than parent. This will
3346 # slightly alter the behavior of revert (doing back up or not, delete
3346 # slightly alter the behavior of revert (doing back up or not, delete
3347 # or just forget etc).
3347 # or just forget etc).
3348 if parent == node:
3348 if parent == node:
3349 dsmodified = modified
3349 dsmodified = modified
3350 dsadded = added
3350 dsadded = added
3351 dsremoved = removed
3351 dsremoved = removed
3352 # store all local modifications, useful later for rename detection
3352 # store all local modifications, useful later for rename detection
3353 localchanges = dsmodified | dsadded
3353 localchanges = dsmodified | dsadded
3354 modified, added, removed = set(), set(), set()
3354 modified, added, removed = set(), set(), set()
3355 else:
3355 else:
3356 changes = repo.status(node1=parent, match=m)
3356 changes = repo.status(node1=parent, match=m)
3357 dsmodified = set(changes.modified)
3357 dsmodified = set(changes.modified)
3358 dsadded = set(changes.added)
3358 dsadded = set(changes.added)
3359 dsremoved = set(changes.removed)
3359 dsremoved = set(changes.removed)
3360 # store all local modifications, useful later for rename detection
3360 # store all local modifications, useful later for rename detection
3361 localchanges = dsmodified | dsadded
3361 localchanges = dsmodified | dsadded
3362
3362
3363 # only take into account for removes between wc and target
3363 # only take into account for removes between wc and target
3364 clean |= dsremoved - removed
3364 clean |= dsremoved - removed
3365 dsremoved &= removed
3365 dsremoved &= removed
3366 # distinct between dirstate remove and other
3366 # distinct between dirstate remove and other
3367 removed -= dsremoved
3367 removed -= dsremoved
3368
3368
3369 modadded = added & dsmodified
3369 modadded = added & dsmodified
3370 added -= modadded
3370 added -= modadded
3371
3371
3372 # tell newly modified apart.
3372 # tell newly modified apart.
3373 dsmodified &= modified
3373 dsmodified &= modified
3374 dsmodified |= modified & dsadded # dirstate added may need backup
3374 dsmodified |= modified & dsadded # dirstate added may need backup
3375 modified -= dsmodified
3375 modified -= dsmodified
3376
3376
3377 # We need to wait for some post-processing to update this set
3377 # We need to wait for some post-processing to update this set
3378 # before making the distinction. The dirstate will be used for
3378 # before making the distinction. The dirstate will be used for
3379 # that purpose.
3379 # that purpose.
3380 dsadded = added
3380 dsadded = added
3381
3381
3382 # in case of merge, files that are actually added can be reported as
3382 # in case of merge, files that are actually added can be reported as
3383 # modified, we need to post process the result
3383 # modified, we need to post process the result
3384 if p2 != repo.nullid:
3384 if p2 != repo.nullid:
3385 mergeadd = set(dsmodified)
3385 mergeadd = set(dsmodified)
3386 for path in dsmodified:
3386 for path in dsmodified:
3387 if path in mf:
3387 if path in mf:
3388 mergeadd.remove(path)
3388 mergeadd.remove(path)
3389 dsadded |= mergeadd
3389 dsadded |= mergeadd
3390 dsmodified -= mergeadd
3390 dsmodified -= mergeadd
3391
3391
3392 # if f is a rename, update `names` to also revert the source
3392 # if f is a rename, update `names` to also revert the source
3393 for f in localchanges:
3393 for f in localchanges:
3394 src = repo.dirstate.copied(f)
3394 src = repo.dirstate.copied(f)
3395 # XXX should we check for rename down to target node?
3395 # XXX should we check for rename down to target node?
3396 if (
3396 if (
3397 src
3397 src
3398 and src not in names
3398 and src not in names
3399 and repo.dirstate.get_entry(src).removed
3399 and repo.dirstate.get_entry(src).removed
3400 ):
3400 ):
3401 dsremoved.add(src)
3401 dsremoved.add(src)
3402 names[src] = True
3402 names[src] = True
3403
3403
3404 # determine the exact nature of the deleted changesets
3404 # determine the exact nature of the deleted changesets
3405 deladded = set(_deleted)
3405 deladded = set(_deleted)
3406 for path in _deleted:
3406 for path in _deleted:
3407 if path in mf:
3407 if path in mf:
3408 deladded.remove(path)
3408 deladded.remove(path)
3409 deleted = _deleted - deladded
3409 deleted = _deleted - deladded
3410
3410
3411 # distinguish between file to forget and the other
3411 # distinguish between file to forget and the other
3412 added = set()
3412 added = set()
3413 for abs in dsadded:
3413 for abs in dsadded:
3414 if not repo.dirstate.get_entry(abs).added:
3414 if not repo.dirstate.get_entry(abs).added:
3415 added.add(abs)
3415 added.add(abs)
3416 dsadded -= added
3416 dsadded -= added
3417
3417
3418 for abs in deladded:
3418 for abs in deladded:
3419 if repo.dirstate.get_entry(abs).added:
3419 if repo.dirstate.get_entry(abs).added:
3420 dsadded.add(abs)
3420 dsadded.add(abs)
3421 deladded -= dsadded
3421 deladded -= dsadded
3422
3422
3423 # For files marked as removed, we check if an unknown file is present at
3423 # For files marked as removed, we check if an unknown file is present at
3424 # the same path. If a such file exists it may need to be backed up.
3424 # the same path. If a such file exists it may need to be backed up.
3425 # Making the distinction at this stage helps have simpler backup
3425 # Making the distinction at this stage helps have simpler backup
3426 # logic.
3426 # logic.
3427 removunk = set()
3427 removunk = set()
3428 for abs in removed:
3428 for abs in removed:
3429 target = repo.wjoin(abs)
3429 target = repo.wjoin(abs)
3430 if os.path.lexists(target):
3430 if os.path.lexists(target):
3431 removunk.add(abs)
3431 removunk.add(abs)
3432 removed -= removunk
3432 removed -= removunk
3433
3433
3434 dsremovunk = set()
3434 dsremovunk = set()
3435 for abs in dsremoved:
3435 for abs in dsremoved:
3436 target = repo.wjoin(abs)
3436 target = repo.wjoin(abs)
3437 if os.path.lexists(target):
3437 if os.path.lexists(target):
3438 dsremovunk.add(abs)
3438 dsremovunk.add(abs)
3439 dsremoved -= dsremovunk
3439 dsremoved -= dsremovunk
3440
3440
3441 # action to be actually performed by revert
3441 # action to be actually performed by revert
3442 # (<list of file>, message>) tuple
3442 # (<list of file>, message>) tuple
3443 actions = {
3443 actions = {
3444 b'revert': ([], _(b'reverting %s\n')),
3444 b'revert': ([], _(b'reverting %s\n')),
3445 b'add': ([], _(b'adding %s\n')),
3445 b'add': ([], _(b'adding %s\n')),
3446 b'remove': ([], _(b'removing %s\n')),
3446 b'remove': ([], _(b'removing %s\n')),
3447 b'drop': ([], _(b'removing %s\n')),
3447 b'drop': ([], _(b'removing %s\n')),
3448 b'forget': ([], _(b'forgetting %s\n')),
3448 b'forget': ([], _(b'forgetting %s\n')),
3449 b'undelete': ([], _(b'undeleting %s\n')),
3449 b'undelete': ([], _(b'undeleting %s\n')),
3450 b'noop': (None, _(b'no changes needed to %s\n')),
3450 b'noop': (None, _(b'no changes needed to %s\n')),
3451 b'unknown': (None, _(b'file not managed: %s\n')),
3451 b'unknown': (None, _(b'file not managed: %s\n')),
3452 }
3452 }
3453
3453
3454 # "constant" that convey the backup strategy.
3454 # "constant" that convey the backup strategy.
3455 # All set to `discard` if `no-backup` is set do avoid checking
3455 # All set to `discard` if `no-backup` is set do avoid checking
3456 # no_backup lower in the code.
3456 # no_backup lower in the code.
3457 # These values are ordered for comparison purposes
3457 # These values are ordered for comparison purposes
3458 backupinteractive = 3 # do backup if interactively modified
3458 backupinteractive = 3 # do backup if interactively modified
3459 backup = 2 # unconditionally do backup
3459 backup = 2 # unconditionally do backup
3460 check = 1 # check if the existing file differs from target
3460 check = 1 # check if the existing file differs from target
3461 discard = 0 # never do backup
3461 discard = 0 # never do backup
3462 if opts.get(b'no_backup'):
3462 if opts.get(b'no_backup'):
3463 backupinteractive = backup = check = discard
3463 backupinteractive = backup = check = discard
3464 if interactive:
3464 if interactive:
3465 dsmodifiedbackup = backupinteractive
3465 dsmodifiedbackup = backupinteractive
3466 else:
3466 else:
3467 dsmodifiedbackup = backup
3467 dsmodifiedbackup = backup
3468 tobackup = set()
3468 tobackup = set()
3469
3469
3470 backupanddel = actions[b'remove']
3470 backupanddel = actions[b'remove']
3471 if not opts.get(b'no_backup'):
3471 if not opts.get(b'no_backup'):
3472 backupanddel = actions[b'drop']
3472 backupanddel = actions[b'drop']
3473
3473
3474 disptable = (
3474 disptable = (
3475 # dispatch table:
3475 # dispatch table:
3476 # file state
3476 # file state
3477 # action
3477 # action
3478 # make backup
3478 # make backup
3479 ## Sets that results that will change file on disk
3479 ## Sets that results that will change file on disk
3480 # Modified compared to target, no local change
3480 # Modified compared to target, no local change
3481 (modified, actions[b'revert'], discard),
3481 (modified, actions[b'revert'], discard),
3482 # Modified compared to target, but local file is deleted
3482 # Modified compared to target, but local file is deleted
3483 (deleted, actions[b'revert'], discard),
3483 (deleted, actions[b'revert'], discard),
3484 # Modified compared to target, local change
3484 # Modified compared to target, local change
3485 (dsmodified, actions[b'revert'], dsmodifiedbackup),
3485 (dsmodified, actions[b'revert'], dsmodifiedbackup),
3486 # Added since target
3486 # Added since target
3487 (added, actions[b'remove'], discard),
3487 (added, actions[b'remove'], discard),
3488 # Added in working directory
3488 # Added in working directory
3489 (dsadded, actions[b'forget'], discard),
3489 (dsadded, actions[b'forget'], discard),
3490 # Added since target, have local modification
3490 # Added since target, have local modification
3491 (modadded, backupanddel, backup),
3491 (modadded, backupanddel, backup),
3492 # Added since target but file is missing in working directory
3492 # Added since target but file is missing in working directory
3493 (deladded, actions[b'drop'], discard),
3493 (deladded, actions[b'drop'], discard),
3494 # Removed since target, before working copy parent
3494 # Removed since target, before working copy parent
3495 (removed, actions[b'add'], discard),
3495 (removed, actions[b'add'], discard),
3496 # Same as `removed` but an unknown file exists at the same path
3496 # Same as `removed` but an unknown file exists at the same path
3497 (removunk, actions[b'add'], check),
3497 (removunk, actions[b'add'], check),
3498 # Removed since targe, marked as such in working copy parent
3498 # Removed since targe, marked as such in working copy parent
3499 (dsremoved, actions[b'undelete'], discard),
3499 (dsremoved, actions[b'undelete'], discard),
3500 # Same as `dsremoved` but an unknown file exists at the same path
3500 # Same as `dsremoved` but an unknown file exists at the same path
3501 (dsremovunk, actions[b'undelete'], check),
3501 (dsremovunk, actions[b'undelete'], check),
3502 ## the following sets does not result in any file changes
3502 ## the following sets does not result in any file changes
3503 # File with no modification
3503 # File with no modification
3504 (clean, actions[b'noop'], discard),
3504 (clean, actions[b'noop'], discard),
3505 # Existing file, not tracked anywhere
3505 # Existing file, not tracked anywhere
3506 (unknown, actions[b'unknown'], discard),
3506 (unknown, actions[b'unknown'], discard),
3507 )
3507 )
3508
3508
3509 for abs, exact in sorted(names.items()):
3509 for abs, exact in sorted(names.items()):
3510 # target file to be touch on disk (relative to cwd)
3510 # target file to be touch on disk (relative to cwd)
3511 target = repo.wjoin(abs)
3511 target = repo.wjoin(abs)
3512 # search the entry in the dispatch table.
3512 # search the entry in the dispatch table.
3513 # if the file is in any of these sets, it was touched in the working
3513 # if the file is in any of these sets, it was touched in the working
3514 # directory parent and we are sure it needs to be reverted.
3514 # directory parent and we are sure it needs to be reverted.
3515 for table, (xlist, msg), dobackup in disptable:
3515 for table, (xlist, msg), dobackup in disptable:
3516 if abs not in table:
3516 if abs not in table:
3517 continue
3517 continue
3518 if xlist is not None:
3518 if xlist is not None:
3519 xlist.append(abs)
3519 xlist.append(abs)
3520 if dobackup:
3520 if dobackup:
3521 # If in interactive mode, don't automatically create
3521 # If in interactive mode, don't automatically create
3522 # .orig files (issue4793)
3522 # .orig files (issue4793)
3523 if dobackup == backupinteractive:
3523 if dobackup == backupinteractive:
3524 tobackup.add(abs)
3524 tobackup.add(abs)
3525 elif backup <= dobackup or wctx[abs].cmp(ctx[abs]):
3525 elif backup <= dobackup or wctx[abs].cmp(ctx[abs]):
3526 absbakname = scmutil.backuppath(ui, repo, abs)
3526 absbakname = scmutil.backuppath(ui, repo, abs)
3527 bakname = os.path.relpath(
3527 bakname = os.path.relpath(
3528 absbakname, start=repo.root
3528 absbakname, start=repo.root
3529 )
3529 )
3530 ui.note(
3530 ui.note(
3531 _(b'saving current version of %s as %s\n')
3531 _(b'saving current version of %s as %s\n')
3532 % (uipathfn(abs), uipathfn(bakname))
3532 % (uipathfn(abs), uipathfn(bakname))
3533 )
3533 )
3534 if not opts.get(b'dry_run'):
3534 if not opts.get(b'dry_run'):
3535 if interactive:
3535 if interactive:
3536 util.copyfile(target, absbakname)
3536 util.copyfile(target, absbakname)
3537 else:
3537 else:
3538 util.rename(target, absbakname)
3538 util.rename(target, absbakname)
3539 if opts.get(b'dry_run'):
3539 if opts.get(b'dry_run'):
3540 if ui.verbose or not exact:
3540 if ui.verbose or not exact:
3541 ui.status(msg % uipathfn(abs))
3541 ui.status(msg % uipathfn(abs))
3542 elif exact:
3542 elif exact:
3543 ui.warn(msg % uipathfn(abs))
3543 ui.warn(msg % uipathfn(abs))
3544 break
3544 break
3545
3545
3546 if not opts.get(b'dry_run'):
3546 if not opts.get(b'dry_run'):
3547 needdata = (b'revert', b'add', b'undelete')
3547 needdata = (b'revert', b'add', b'undelete')
3548 oplist = [actions[name][0] for name in needdata]
3548 oplist = [actions[name][0] for name in needdata]
3549 prefetch = scmutil.prefetchfiles
3549 prefetch = scmutil.prefetchfiles
3550 matchfiles = scmutil.matchfiles(
3550 matchfiles = scmutil.matchfiles(
3551 repo, [f for sublist in oplist for f in sublist]
3551 repo, [f for sublist in oplist for f in sublist]
3552 )
3552 )
3553 prefetch(
3553 prefetch(
3554 repo,
3554 repo,
3555 [(ctx.rev(), matchfiles)],
3555 [(ctx.rev(), matchfiles)],
3556 )
3556 )
3557 match = scmutil.match(repo[None], pats)
3557 match = scmutil.match(repo[None], pats)
3558 _performrevert(
3558 _performrevert(
3559 repo,
3559 repo,
3560 ctx,
3560 ctx,
3561 names,
3561 names,
3562 uipathfn,
3562 uipathfn,
3563 actions,
3563 actions,
3564 match,
3564 match,
3565 interactive,
3565 interactive,
3566 tobackup,
3566 tobackup,
3567 )
3567 )
3568
3568
3569 if targetsubs:
3569 if targetsubs:
3570 # Revert the subrepos on the revert list
3570 # Revert the subrepos on the revert list
3571 for sub in targetsubs:
3571 for sub in targetsubs:
3572 try:
3572 try:
3573 wctx.sub(sub).revert(
3573 wctx.sub(sub).revert(
3574 ctx.substate[sub], *pats, **pycompat.strkwargs(opts)
3574 ctx.substate[sub], *pats, **pycompat.strkwargs(opts)
3575 )
3575 )
3576 except KeyError:
3576 except KeyError:
3577 raise error.Abort(
3577 raise error.Abort(
3578 b"subrepository '%s' does not exist in %s!"
3578 b"subrepository '%s' does not exist in %s!"
3579 % (sub, short(ctx.node()))
3579 % (sub, short(ctx.node()))
3580 )
3580 )
3581
3581
3582
3582
3583 def _performrevert(
3583 def _performrevert(
3584 repo,
3584 repo,
3585 ctx,
3585 ctx,
3586 names,
3586 names,
3587 uipathfn,
3587 uipathfn,
3588 actions,
3588 actions,
3589 match,
3589 match,
3590 interactive=False,
3590 interactive=False,
3591 tobackup=None,
3591 tobackup=None,
3592 ):
3592 ):
3593 """function that actually perform all the actions computed for revert
3593 """function that actually perform all the actions computed for revert
3594
3594
3595 This is an independent function to let extension to plug in and react to
3595 This is an independent function to let extension to plug in and react to
3596 the imminent revert.
3596 the imminent revert.
3597
3597
3598 Make sure you have the working directory locked when calling this function.
3598 Make sure you have the working directory locked when calling this function.
3599 """
3599 """
3600 parent, p2 = repo.dirstate.parents()
3600 parent, p2 = repo.dirstate.parents()
3601 node = ctx.node()
3601 node = ctx.node()
3602 excluded_files = []
3602 excluded_files = []
3603
3603
3604 def checkout(f):
3604 def checkout(f):
3605 fc = ctx[f]
3605 fc = ctx[f]
3606 repo.wwrite(f, fc.data(), fc.flags())
3606 repo.wwrite(f, fc.data(), fc.flags())
3607
3607
3608 def doremove(f):
3608 def doremove(f):
3609 try:
3609 try:
3610 rmdir = repo.ui.configbool(b'experimental', b'removeemptydirs')
3610 rmdir = repo.ui.configbool(b'experimental', b'removeemptydirs')
3611 repo.wvfs.unlinkpath(f, rmdir=rmdir)
3611 repo.wvfs.unlinkpath(f, rmdir=rmdir)
3612 except OSError:
3612 except OSError:
3613 pass
3613 pass
3614 repo.dirstate.set_untracked(f)
3614 repo.dirstate.set_untracked(f)
3615
3615
3616 def prntstatusmsg(action, f):
3616 def prntstatusmsg(action, f):
3617 exact = names[f]
3617 exact = names[f]
3618 if repo.ui.verbose or not exact:
3618 if repo.ui.verbose or not exact:
3619 repo.ui.status(actions[action][1] % uipathfn(f))
3619 repo.ui.status(actions[action][1] % uipathfn(f))
3620
3620
3621 audit_path = pathutil.pathauditor(repo.root, cached=True)
3621 audit_path = pathutil.pathauditor(repo.root, cached=True)
3622 for f in actions[b'forget'][0]:
3622 for f in actions[b'forget'][0]:
3623 if interactive:
3623 if interactive:
3624 choice = repo.ui.promptchoice(
3624 choice = repo.ui.promptchoice(
3625 _(b"forget added file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f)
3625 _(b"forget added file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f)
3626 )
3626 )
3627 if choice == 0:
3627 if choice == 0:
3628 prntstatusmsg(b'forget', f)
3628 prntstatusmsg(b'forget', f)
3629 repo.dirstate.set_untracked(f)
3629 repo.dirstate.set_untracked(f)
3630 else:
3630 else:
3631 excluded_files.append(f)
3631 excluded_files.append(f)
3632 else:
3632 else:
3633 prntstatusmsg(b'forget', f)
3633 prntstatusmsg(b'forget', f)
3634 repo.dirstate.set_untracked(f)
3634 repo.dirstate.set_untracked(f)
3635 for f in actions[b'remove'][0]:
3635 for f in actions[b'remove'][0]:
3636 audit_path(f)
3636 audit_path(f)
3637 if interactive:
3637 if interactive:
3638 choice = repo.ui.promptchoice(
3638 choice = repo.ui.promptchoice(
3639 _(b"remove added file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f)
3639 _(b"remove added file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f)
3640 )
3640 )
3641 if choice == 0:
3641 if choice == 0:
3642 prntstatusmsg(b'remove', f)
3642 prntstatusmsg(b'remove', f)
3643 doremove(f)
3643 doremove(f)
3644 else:
3644 else:
3645 excluded_files.append(f)
3645 excluded_files.append(f)
3646 else:
3646 else:
3647 prntstatusmsg(b'remove', f)
3647 prntstatusmsg(b'remove', f)
3648 doremove(f)
3648 doremove(f)
3649 for f in actions[b'drop'][0]:
3649 for f in actions[b'drop'][0]:
3650 audit_path(f)
3650 audit_path(f)
3651 prntstatusmsg(b'drop', f)
3651 prntstatusmsg(b'drop', f)
3652 repo.dirstate.set_untracked(f)
3652 repo.dirstate.set_untracked(f)
3653
3653
3654 # We are reverting to our parent. If possible, we had like `hg status`
3654 # We are reverting to our parent. If possible, we had like `hg status`
3655 # to report the file as clean. We have to be less agressive for
3655 # to report the file as clean. We have to be less agressive for
3656 # merges to avoid losing information about copy introduced by the merge.
3656 # merges to avoid losing information about copy introduced by the merge.
3657 # This might comes with bugs ?
3657 # This might comes with bugs ?
3658 reset_copy = p2 == repo.nullid
3658 reset_copy = p2 == repo.nullid
3659
3659
3660 def normal(filename):
3660 def normal(filename):
3661 return repo.dirstate.set_tracked(filename, reset_copy=reset_copy)
3661 return repo.dirstate.set_tracked(filename, reset_copy=reset_copy)
3662
3662
3663 newlyaddedandmodifiedfiles = set()
3663 newlyaddedandmodifiedfiles = set()
3664 if interactive:
3664 if interactive:
3665 # Prompt the user for changes to revert
3665 # Prompt the user for changes to revert
3666 torevert = [f for f in actions[b'revert'][0] if f not in excluded_files]
3666 torevert = [f for f in actions[b'revert'][0] if f not in excluded_files]
3667 m = scmutil.matchfiles(repo, torevert)
3667 m = scmutil.matchfiles(repo, torevert)
3668 diffopts = patch.difffeatureopts(
3668 diffopts = patch.difffeatureopts(
3669 repo.ui,
3669 repo.ui,
3670 whitespace=True,
3670 whitespace=True,
3671 section=b'commands',
3671 section=b'commands',
3672 configprefix=b'revert.interactive.',
3672 configprefix=b'revert.interactive.',
3673 )
3673 )
3674 diffopts.nodates = True
3674 diffopts.nodates = True
3675 diffopts.git = True
3675 diffopts.git = True
3676 operation = b'apply'
3676 operation = b'apply'
3677 if node == parent:
3677 if node == parent:
3678 if repo.ui.configbool(
3678 if repo.ui.configbool(
3679 b'experimental', b'revert.interactive.select-to-keep'
3679 b'experimental', b'revert.interactive.select-to-keep'
3680 ):
3680 ):
3681 operation = b'keep'
3681 operation = b'keep'
3682 else:
3682 else:
3683 operation = b'discard'
3683 operation = b'discard'
3684
3684
3685 if operation == b'apply':
3685 if operation == b'apply':
3686 diff = patch.diff(repo, None, ctx.node(), m, opts=diffopts)
3686 diff = patch.diff(repo, None, ctx.node(), m, opts=diffopts)
3687 else:
3687 else:
3688 diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts)
3688 diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts)
3689 original_headers = patch.parsepatch(diff)
3689 original_headers = patch.parsepatch(diff)
3690
3690
3691 try:
3691 try:
3692
3692
3693 chunks, opts = recordfilter(
3693 chunks, opts = recordfilter(
3694 repo.ui, original_headers, match, operation=operation
3694 repo.ui, original_headers, match, operation=operation
3695 )
3695 )
3696 if operation == b'discard':
3696 if operation == b'discard':
3697 chunks = patch.reversehunks(chunks)
3697 chunks = patch.reversehunks(chunks)
3698
3698
3699 except error.PatchParseError as err:
3699 except error.PatchParseError as err:
3700 raise error.InputError(_(b'error parsing patch: %s') % err)
3700 raise error.InputError(_(b'error parsing patch: %s') % err)
3701 except error.PatchApplicationError as err:
3701 except error.PatchApplicationError as err:
3702 raise error.StateError(_(b'error applying patch: %s') % err)
3702 raise error.StateError(_(b'error applying patch: %s') % err)
3703
3703
3704 # FIXME: when doing an interactive revert of a copy, there's no way of
3704 # FIXME: when doing an interactive revert of a copy, there's no way of
3705 # performing a partial revert of the added file, the only option is
3705 # performing a partial revert of the added file, the only option is
3706 # "remove added file <name> (Yn)?", so we don't need to worry about the
3706 # "remove added file <name> (Yn)?", so we don't need to worry about the
3707 # alsorestore value. Ideally we'd be able to partially revert
3707 # alsorestore value. Ideally we'd be able to partially revert
3708 # copied/renamed files.
3708 # copied/renamed files.
3709 newlyaddedandmodifiedfiles, unusedalsorestore = newandmodified(chunks)
3709 newlyaddedandmodifiedfiles, unusedalsorestore = newandmodified(chunks)
3710 if tobackup is None:
3710 if tobackup is None:
3711 tobackup = set()
3711 tobackup = set()
3712 # Apply changes
3712 # Apply changes
3713 fp = stringio()
3713 fp = stringio()
3714 # chunks are serialized per file, but files aren't sorted
3714 # chunks are serialized per file, but files aren't sorted
3715 for f in sorted({c.header.filename() for c in chunks if ishunk(c)}):
3715 for f in sorted({c.header.filename() for c in chunks if ishunk(c)}):
3716 prntstatusmsg(b'revert', f)
3716 prntstatusmsg(b'revert', f)
3717 files = set()
3717 files = set()
3718 for c in chunks:
3718 for c in chunks:
3719 if ishunk(c):
3719 if ishunk(c):
3720 abs = c.header.filename()
3720 abs = c.header.filename()
3721 # Create a backup file only if this hunk should be backed up
3721 # Create a backup file only if this hunk should be backed up
3722 if c.header.filename() in tobackup:
3722 if c.header.filename() in tobackup:
3723 target = repo.wjoin(abs)
3723 target = repo.wjoin(abs)
3724 bakname = scmutil.backuppath(repo.ui, repo, abs)
3724 bakname = scmutil.backuppath(repo.ui, repo, abs)
3725 util.copyfile(target, bakname)
3725 util.copyfile(target, bakname)
3726 tobackup.remove(abs)
3726 tobackup.remove(abs)
3727 if abs not in files:
3727 if abs not in files:
3728 files.add(abs)
3728 files.add(abs)
3729 if operation == b'keep':
3729 if operation == b'keep':
3730 checkout(abs)
3730 checkout(abs)
3731 c.write(fp)
3731 c.write(fp)
3732 dopatch = fp.tell()
3732 dopatch = fp.tell()
3733 fp.seek(0)
3733 fp.seek(0)
3734 if dopatch:
3734 if dopatch:
3735 try:
3735 try:
3736 patch.internalpatch(repo.ui, repo, fp, 1, eolmode=None)
3736 patch.internalpatch(repo.ui, repo, fp, 1, eolmode=None)
3737 except error.PatchParseError as err:
3737 except error.PatchParseError as err:
3738 raise error.InputError(pycompat.bytestr(err))
3738 raise error.InputError(pycompat.bytestr(err))
3739 except error.PatchApplicationError as err:
3739 except error.PatchApplicationError as err:
3740 raise error.StateError(pycompat.bytestr(err))
3740 raise error.StateError(pycompat.bytestr(err))
3741 del fp
3741 del fp
3742 else:
3742 else:
3743 for f in actions[b'revert'][0]:
3743 for f in actions[b'revert'][0]:
3744 prntstatusmsg(b'revert', f)
3744 prntstatusmsg(b'revert', f)
3745 checkout(f)
3745 checkout(f)
3746 if normal:
3746 if normal:
3747 normal(f)
3747 normal(f)
3748
3748
3749 for f in actions[b'add'][0]:
3749 for f in actions[b'add'][0]:
3750 # Don't checkout modified files, they are already created by the diff
3750 # Don't checkout modified files, they are already created by the diff
3751 if f in newlyaddedandmodifiedfiles:
3751 if f in newlyaddedandmodifiedfiles:
3752 continue
3752 continue
3753
3753
3754 if interactive:
3754 if interactive:
3755 choice = repo.ui.promptchoice(
3755 choice = repo.ui.promptchoice(
3756 _(b"add new file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f)
3756 _(b"add new file %s (Yn)?$$ &Yes $$ &No") % uipathfn(f)
3757 )
3757 )
3758 if choice != 0:
3758 if choice != 0:
3759 continue
3759 continue
3760 prntstatusmsg(b'add', f)
3760 prntstatusmsg(b'add', f)
3761 checkout(f)
3761 checkout(f)
3762 repo.dirstate.set_tracked(f)
3762 repo.dirstate.set_tracked(f)
3763
3763
3764 for f in actions[b'undelete'][0]:
3764 for f in actions[b'undelete'][0]:
3765 if interactive:
3765 if interactive:
3766 choice = repo.ui.promptchoice(
3766 choice = repo.ui.promptchoice(
3767 _(b"add back removed file %s (Yn)?$$ &Yes $$ &No") % f
3767 _(b"add back removed file %s (Yn)?$$ &Yes $$ &No") % f
3768 )
3768 )
3769 if choice == 0:
3769 if choice == 0:
3770 prntstatusmsg(b'undelete', f)
3770 prntstatusmsg(b'undelete', f)
3771 checkout(f)
3771 checkout(f)
3772 normal(f)
3772 normal(f)
3773 else:
3773 else:
3774 excluded_files.append(f)
3774 excluded_files.append(f)
3775 else:
3775 else:
3776 prntstatusmsg(b'undelete', f)
3776 prntstatusmsg(b'undelete', f)
3777 checkout(f)
3777 checkout(f)
3778 normal(f)
3778 normal(f)
3779
3779
3780 copied = copies.pathcopies(repo[parent], ctx)
3780 copied = copies.pathcopies(repo[parent], ctx)
3781
3781
3782 for f in (
3782 for f in (
3783 actions[b'add'][0] + actions[b'undelete'][0] + actions[b'revert'][0]
3783 actions[b'add'][0] + actions[b'undelete'][0] + actions[b'revert'][0]
3784 ):
3784 ):
3785 if f in copied:
3785 if f in copied:
3786 repo.dirstate.copy(copied[f], f)
3786 repo.dirstate.copy(copied[f], f)
3787
3787
3788
3788
3789 # a list of (ui, repo, otherpeer, opts, missing) functions called by
3789 # a list of (ui, repo, otherpeer, opts, missing) functions called by
3790 # commands.outgoing. "missing" is "missing" of the result of
3790 # commands.outgoing. "missing" is "missing" of the result of
3791 # "findcommonoutgoing()"
3791 # "findcommonoutgoing()"
3792 outgoinghooks = util.hooks()
3792 outgoinghooks = util.hooks()
3793
3793
3794 # a list of (ui, repo) functions called by commands.summary
3794 # a list of (ui, repo) functions called by commands.summary
3795 summaryhooks = util.hooks()
3795 summaryhooks = util.hooks()
3796
3796
3797 # a list of (ui, repo, opts, changes) functions called by commands.summary.
3797 # a list of (ui, repo, opts, changes) functions called by commands.summary.
3798 #
3798 #
3799 # functions should return tuple of booleans below, if 'changes' is None:
3799 # functions should return tuple of booleans below, if 'changes' is None:
3800 # (whether-incomings-are-needed, whether-outgoings-are-needed)
3800 # (whether-incomings-are-needed, whether-outgoings-are-needed)
3801 #
3801 #
3802 # otherwise, 'changes' is a tuple of tuples below:
3802 # otherwise, 'changes' is a tuple of tuples below:
3803 # - (sourceurl, sourcebranch, sourcepeer, incoming)
3803 # - (sourceurl, sourcebranch, sourcepeer, incoming)
3804 # - (desturl, destbranch, destpeer, outgoing)
3804 # - (desturl, destbranch, destpeer, outgoing)
3805 summaryremotehooks = util.hooks()
3805 summaryremotehooks = util.hooks()
3806
3806
3807
3807
3808 def checkunfinished(repo, commit=False, skipmerge=False):
3808 def checkunfinished(repo, commit=False, skipmerge=False):
3809 """Look for an unfinished multistep operation, like graft, and abort
3809 """Look for an unfinished multistep operation, like graft, and abort
3810 if found. It's probably good to check this right before
3810 if found. It's probably good to check this right before
3811 bailifchanged().
3811 bailifchanged().
3812 """
3812 """
3813 # Check for non-clearable states first, so things like rebase will take
3813 # Check for non-clearable states first, so things like rebase will take
3814 # precedence over update.
3814 # precedence over update.
3815 for state in statemod._unfinishedstates:
3815 for state in statemod._unfinishedstates:
3816 if (
3816 if (
3817 state._clearable
3817 state._clearable
3818 or (commit and state._allowcommit)
3818 or (commit and state._allowcommit)
3819 or state._reportonly
3819 or state._reportonly
3820 ):
3820 ):
3821 continue
3821 continue
3822 if state.isunfinished(repo):
3822 if state.isunfinished(repo):
3823 raise error.StateError(state.msg(), hint=state.hint())
3823 raise error.StateError(state.msg(), hint=state.hint())
3824
3824
3825 for s in statemod._unfinishedstates:
3825 for s in statemod._unfinishedstates:
3826 if (
3826 if (
3827 not s._clearable
3827 not s._clearable
3828 or (commit and s._allowcommit)
3828 or (commit and s._allowcommit)
3829 or (s._opname == b'merge' and skipmerge)
3829 or (s._opname == b'merge' and skipmerge)
3830 or s._reportonly
3830 or s._reportonly
3831 ):
3831 ):
3832 continue
3832 continue
3833 if s.isunfinished(repo):
3833 if s.isunfinished(repo):
3834 raise error.StateError(s.msg(), hint=s.hint())
3834 raise error.StateError(s.msg(), hint=s.hint())
3835
3835
3836
3836
3837 def clearunfinished(repo):
3837 def clearunfinished(repo):
3838 """Check for unfinished operations (as above), and clear the ones
3838 """Check for unfinished operations (as above), and clear the ones
3839 that are clearable.
3839 that are clearable.
3840 """
3840 """
3841 for state in statemod._unfinishedstates:
3841 for state in statemod._unfinishedstates:
3842 if state._reportonly:
3842 if state._reportonly:
3843 continue
3843 continue
3844 if not state._clearable and state.isunfinished(repo):
3844 if not state._clearable and state.isunfinished(repo):
3845 raise error.StateError(state.msg(), hint=state.hint())
3845 raise error.StateError(state.msg(), hint=state.hint())
3846
3846
3847 for s in statemod._unfinishedstates:
3847 for s in statemod._unfinishedstates:
3848 if s._opname == b'merge' or s._reportonly:
3848 if s._opname == b'merge' or s._reportonly:
3849 continue
3849 continue
3850 if s._clearable and s.isunfinished(repo):
3850 if s._clearable and s.isunfinished(repo):
3851 util.unlink(repo.vfs.join(s._fname))
3851 util.unlink(repo.vfs.join(s._fname))
3852
3852
3853
3853
3854 def getunfinishedstate(repo):
3854 def getunfinishedstate(repo):
3855 """Checks for unfinished operations and returns statecheck object
3855 """Checks for unfinished operations and returns statecheck object
3856 for it"""
3856 for it"""
3857 for state in statemod._unfinishedstates:
3857 for state in statemod._unfinishedstates:
3858 if state.isunfinished(repo):
3858 if state.isunfinished(repo):
3859 return state
3859 return state
3860 return None
3860 return None
3861
3861
3862
3862
3863 def howtocontinue(repo):
3863 def howtocontinue(repo):
3864 """Check for an unfinished operation and return the command to finish
3864 """Check for an unfinished operation and return the command to finish
3865 it.
3865 it.
3866
3866
3867 statemod._unfinishedstates list is checked for an unfinished operation
3867 statemod._unfinishedstates list is checked for an unfinished operation
3868 and the corresponding message to finish it is generated if a method to
3868 and the corresponding message to finish it is generated if a method to
3869 continue is supported by the operation.
3869 continue is supported by the operation.
3870
3870
3871 Returns a (msg, warning) tuple. 'msg' is a string and 'warning' is
3871 Returns a (msg, warning) tuple. 'msg' is a string and 'warning' is
3872 a boolean.
3872 a boolean.
3873 """
3873 """
3874 contmsg = _(b"continue: %s")
3874 contmsg = _(b"continue: %s")
3875 for state in statemod._unfinishedstates:
3875 for state in statemod._unfinishedstates:
3876 if not state._continueflag:
3876 if not state._continueflag:
3877 continue
3877 continue
3878 if state.isunfinished(repo):
3878 if state.isunfinished(repo):
3879 return contmsg % state.continuemsg(), True
3879 return contmsg % state.continuemsg(), True
3880 if repo[None].dirty(missing=True, merge=False, branch=False):
3880 if repo[None].dirty(missing=True, merge=False, branch=False):
3881 return contmsg % _(b"hg commit"), False
3881 return contmsg % _(b"hg commit"), False
3882 return None, None
3882 return None, None
3883
3883
3884
3884
3885 def checkafterresolved(repo):
3885 def checkafterresolved(repo):
3886 """Inform the user about the next action after completing hg resolve
3886 """Inform the user about the next action after completing hg resolve
3887
3887
3888 If there's a an unfinished operation that supports continue flag,
3888 If there's a an unfinished operation that supports continue flag,
3889 howtocontinue will yield repo.ui.warn as the reporter.
3889 howtocontinue will yield repo.ui.warn as the reporter.
3890
3890
3891 Otherwise, it will yield repo.ui.note.
3891 Otherwise, it will yield repo.ui.note.
3892 """
3892 """
3893 msg, warning = howtocontinue(repo)
3893 msg, warning = howtocontinue(repo)
3894 if msg is not None:
3894 if msg is not None:
3895 if warning:
3895 if warning:
3896 repo.ui.warn(b"%s\n" % msg)
3896 repo.ui.warn(b"%s\n" % msg)
3897 else:
3897 else:
3898 repo.ui.note(b"%s\n" % msg)
3898 repo.ui.note(b"%s\n" % msg)
3899
3899
3900
3900
3901 def wrongtooltocontinue(repo, task):
3901 def wrongtooltocontinue(repo, task):
3902 """Raise an abort suggesting how to properly continue if there is an
3902 """Raise an abort suggesting how to properly continue if there is an
3903 active task.
3903 active task.
3904
3904
3905 Uses howtocontinue() to find the active task.
3905 Uses howtocontinue() to find the active task.
3906
3906
3907 If there's no task (repo.ui.note for 'hg commit'), it does not offer
3907 If there's no task (repo.ui.note for 'hg commit'), it does not offer
3908 a hint.
3908 a hint.
3909 """
3909 """
3910 after = howtocontinue(repo)
3910 after = howtocontinue(repo)
3911 hint = None
3911 hint = None
3912 if after[1]:
3912 if after[1]:
3913 hint = after[0]
3913 hint = after[0]
3914 raise error.StateError(_(b'no %s in progress') % task, hint=hint)
3914 raise error.StateError(_(b'no %s in progress') % task, hint=hint)
3915
3915
3916
3916
3917 def abortgraft(ui, repo, graftstate):
3917 def abortgraft(ui, repo, graftstate):
3918 """abort the interrupted graft and rollbacks to the state before interrupted
3918 """abort the interrupted graft and rollbacks to the state before interrupted
3919 graft"""
3919 graft"""
3920 if not graftstate.exists():
3920 if not graftstate.exists():
3921 raise error.StateError(_(b"no interrupted graft to abort"))
3921 raise error.StateError(_(b"no interrupted graft to abort"))
3922 statedata = readgraftstate(repo, graftstate)
3922 statedata = readgraftstate(repo, graftstate)
3923 newnodes = statedata.get(b'newnodes')
3923 newnodes = statedata.get(b'newnodes')
3924 if newnodes is None:
3924 if newnodes is None:
3925 # and old graft state which does not have all the data required to abort
3925 # and old graft state which does not have all the data required to abort
3926 # the graft
3926 # the graft
3927 raise error.Abort(_(b"cannot abort using an old graftstate"))
3927 raise error.Abort(_(b"cannot abort using an old graftstate"))
3928
3928
3929 # changeset from which graft operation was started
3929 # changeset from which graft operation was started
3930 if len(newnodes) > 0:
3930 if len(newnodes) > 0:
3931 startctx = repo[newnodes[0]].p1()
3931 startctx = repo[newnodes[0]].p1()
3932 else:
3932 else:
3933 startctx = repo[b'.']
3933 startctx = repo[b'.']
3934 # whether to strip or not
3934 # whether to strip or not
3935 cleanup = False
3935 cleanup = False
3936
3936
3937 if newnodes:
3937 if newnodes:
3938 newnodes = [repo[r].rev() for r in newnodes]
3938 newnodes = [repo[r].rev() for r in newnodes]
3939 cleanup = True
3939 cleanup = True
3940 # checking that none of the newnodes turned public or is public
3940 # checking that none of the newnodes turned public or is public
3941 immutable = [c for c in newnodes if not repo[c].mutable()]
3941 immutable = [c for c in newnodes if not repo[c].mutable()]
3942 if immutable:
3942 if immutable:
3943 repo.ui.warn(
3943 repo.ui.warn(
3944 _(b"cannot clean up public changesets %s\n")
3944 _(b"cannot clean up public changesets %s\n")
3945 % b', '.join(bytes(repo[r]) for r in immutable),
3945 % b', '.join(bytes(repo[r]) for r in immutable),
3946 hint=_(b"see 'hg help phases' for details"),
3946 hint=_(b"see 'hg help phases' for details"),
3947 )
3947 )
3948 cleanup = False
3948 cleanup = False
3949
3949
3950 # checking that no new nodes are created on top of grafted revs
3950 # checking that no new nodes are created on top of grafted revs
3951 desc = set(repo.changelog.descendants(newnodes))
3951 desc = set(repo.changelog.descendants(newnodes))
3952 if desc - set(newnodes):
3952 if desc - set(newnodes):
3953 repo.ui.warn(
3953 repo.ui.warn(
3954 _(
3954 _(
3955 b"new changesets detected on destination "
3955 b"new changesets detected on destination "
3956 b"branch, can't strip\n"
3956 b"branch, can't strip\n"
3957 )
3957 )
3958 )
3958 )
3959 cleanup = False
3959 cleanup = False
3960
3960
3961 if cleanup:
3961 if cleanup:
3962 with repo.wlock(), repo.lock():
3962 with repo.wlock(), repo.lock():
3963 mergemod.clean_update(startctx)
3963 mergemod.clean_update(startctx)
3964 # stripping the new nodes created
3964 # stripping the new nodes created
3965 strippoints = [
3965 strippoints = [
3966 c.node() for c in repo.set(b"roots(%ld)", newnodes)
3966 c.node() for c in repo.set(b"roots(%ld)", newnodes)
3967 ]
3967 ]
3968 repair.strip(repo.ui, repo, strippoints, backup=False)
3968 repair.strip(repo.ui, repo, strippoints, backup=False)
3969
3969
3970 if not cleanup:
3970 if not cleanup:
3971 # we don't update to the startnode if we can't strip
3971 # we don't update to the startnode if we can't strip
3972 startctx = repo[b'.']
3972 startctx = repo[b'.']
3973 mergemod.clean_update(startctx)
3973 mergemod.clean_update(startctx)
3974
3974
3975 ui.status(_(b"graft aborted\n"))
3975 ui.status(_(b"graft aborted\n"))
3976 ui.status(_(b"working directory is now at %s\n") % startctx.hex()[:12])
3976 ui.status(_(b"working directory is now at %s\n") % startctx.hex()[:12])
3977 graftstate.delete()
3977 graftstate.delete()
3978 return 0
3978 return 0
3979
3979
3980
3980
3981 def readgraftstate(repo, graftstate):
3981 def readgraftstate(repo, graftstate):
3982 # type: (Any, statemod.cmdstate) -> Dict[bytes, Any]
3982 # type: (Any, statemod.cmdstate) -> Dict[bytes, Any]
3983 """read the graft state file and return a dict of the data stored in it"""
3983 """read the graft state file and return a dict of the data stored in it"""
3984 try:
3984 try:
3985 return graftstate.read()
3985 return graftstate.read()
3986 except error.CorruptedState:
3986 except error.CorruptedState:
3987 nodes = repo.vfs.read(b'graftstate').splitlines()
3987 nodes = repo.vfs.read(b'graftstate').splitlines()
3988 return {b'nodes': nodes}
3988 return {b'nodes': nodes}
3989
3989
3990
3990
3991 def hgabortgraft(ui, repo):
3991 def hgabortgraft(ui, repo):
3992 """abort logic for aborting graft using 'hg abort'"""
3992 """abort logic for aborting graft using 'hg abort'"""
3993 with repo.wlock():
3993 with repo.wlock():
3994 graftstate = statemod.cmdstate(repo, b'graftstate')
3994 graftstate = statemod.cmdstate(repo, b'graftstate')
3995 return abortgraft(ui, repo, graftstate)
3995 return abortgraft(ui, repo, graftstate)
@@ -1,295 +1,295 b''
1 # filelog.py - file history class for mercurial
1 # filelog.py - file history class for mercurial
2 #
2 #
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8
8
9 from .i18n import _
9 from .i18n import _
10 from .node import nullrev
10 from .node import nullrev
11 from . import (
11 from . import (
12 error,
12 error,
13 revlog,
13 revlog,
14 )
14 )
15 from .interfaces import (
15 from .interfaces import (
16 repository,
16 repository,
17 util as interfaceutil,
17 util as interfaceutil,
18 )
18 )
19 from .utils import storageutil
19 from .utils import storageutil
20 from .revlogutils import (
20 from .revlogutils import (
21 constants as revlog_constants,
21 constants as revlog_constants,
22 rewrite,
22 rewrite,
23 )
23 )
24
24
25
25
26 @interfaceutil.implementer(repository.ifilestorage)
26 @interfaceutil.implementer(repository.ifilestorage)
27 class filelog:
27 class filelog:
28 def __init__(self, opener, path):
28 def __init__(self, opener, path):
29 self._revlog = revlog.revlog(
29 self._revlog = revlog.revlog(
30 opener,
30 opener,
31 # XXX should use the unencoded path
31 # XXX should use the unencoded path
32 target=(revlog_constants.KIND_FILELOG, path),
32 target=(revlog_constants.KIND_FILELOG, path),
33 radix=b'/'.join((b'data', path)),
33 radix=b'/'.join((b'data', path)),
34 censorable=True,
34 censorable=True,
35 canonical_parent_order=False, # see comment in revlog.py
35 canonical_parent_order=False, # see comment in revlog.py
36 )
36 )
37 # Full name of the user visible file, relative to the repository root.
37 # Full name of the user visible file, relative to the repository root.
38 # Used by LFS.
38 # Used by LFS.
39 self._revlog.filename = path
39 self._revlog.filename = path
40 self.nullid = self._revlog.nullid
40 self.nullid = self._revlog.nullid
41 opts = opener.options
41 opts = opener.options
42 self._fix_issue6528 = opts.get(b'issue6528.fix-incoming', True)
42 self._fix_issue6528 = opts.get(b'issue6528.fix-incoming', True)
43
43
44 def __len__(self):
44 def __len__(self):
45 return len(self._revlog)
45 return len(self._revlog)
46
46
47 def __iter__(self):
47 def __iter__(self):
48 return self._revlog.__iter__()
48 return self._revlog.__iter__()
49
49
50 def hasnode(self, node):
50 def hasnode(self, node):
51 if node in (self.nullid, nullrev):
51 if node in (self.nullid, nullrev):
52 return False
52 return False
53
53
54 try:
54 try:
55 self._revlog.rev(node)
55 self._revlog.rev(node)
56 return True
56 return True
57 except (TypeError, ValueError, IndexError, error.LookupError):
57 except (TypeError, ValueError, IndexError, error.LookupError):
58 return False
58 return False
59
59
60 def revs(self, start=0, stop=None):
60 def revs(self, start=0, stop=None):
61 return self._revlog.revs(start=start, stop=stop)
61 return self._revlog.revs(start=start, stop=stop)
62
62
63 def parents(self, node):
63 def parents(self, node):
64 return self._revlog.parents(node)
64 return self._revlog.parents(node)
65
65
66 def parentrevs(self, rev):
66 def parentrevs(self, rev):
67 return self._revlog.parentrevs(rev)
67 return self._revlog.parentrevs(rev)
68
68
69 def rev(self, node):
69 def rev(self, node):
70 return self._revlog.rev(node)
70 return self._revlog.rev(node)
71
71
72 def node(self, rev):
72 def node(self, rev):
73 return self._revlog.node(rev)
73 return self._revlog.node(rev)
74
74
75 def lookup(self, node):
75 def lookup(self, node):
76 return storageutil.fileidlookup(
76 return storageutil.fileidlookup(
77 self._revlog, node, self._revlog.display_id
77 self._revlog, node, self._revlog.display_id
78 )
78 )
79
79
80 def linkrev(self, rev):
80 def linkrev(self, rev):
81 return self._revlog.linkrev(rev)
81 return self._revlog.linkrev(rev)
82
82
83 def commonancestorsheads(self, node1, node2):
83 def commonancestorsheads(self, node1, node2):
84 return self._revlog.commonancestorsheads(node1, node2)
84 return self._revlog.commonancestorsheads(node1, node2)
85
85
86 # Used by dagop.blockdescendants().
86 # Used by dagop.blockdescendants().
87 def descendants(self, revs):
87 def descendants(self, revs):
88 return self._revlog.descendants(revs)
88 return self._revlog.descendants(revs)
89
89
90 def heads(self, start=None, stop=None):
90 def heads(self, start=None, stop=None):
91 return self._revlog.heads(start, stop)
91 return self._revlog.heads(start, stop)
92
92
93 # Used by hgweb, children extension.
93 # Used by hgweb, children extension.
94 def children(self, node):
94 def children(self, node):
95 return self._revlog.children(node)
95 return self._revlog.children(node)
96
96
97 def iscensored(self, rev):
97 def iscensored(self, rev):
98 return self._revlog.iscensored(rev)
98 return self._revlog.iscensored(rev)
99
99
100 def revision(self, node, _df=None):
100 def revision(self, node, _df=None):
101 return self._revlog.revision(node, _df=_df)
101 return self._revlog.revision(node, _df=_df)
102
102
103 def rawdata(self, node, _df=None):
103 def rawdata(self, node, _df=None):
104 return self._revlog.rawdata(node, _df=_df)
104 return self._revlog.rawdata(node, _df=_df)
105
105
106 def emitrevisions(
106 def emitrevisions(
107 self,
107 self,
108 nodes,
108 nodes,
109 nodesorder=None,
109 nodesorder=None,
110 revisiondata=False,
110 revisiondata=False,
111 assumehaveparentrevisions=False,
111 assumehaveparentrevisions=False,
112 deltamode=repository.CG_DELTAMODE_STD,
112 deltamode=repository.CG_DELTAMODE_STD,
113 sidedata_helpers=None,
113 sidedata_helpers=None,
114 ):
114 ):
115 return self._revlog.emitrevisions(
115 return self._revlog.emitrevisions(
116 nodes,
116 nodes,
117 nodesorder=nodesorder,
117 nodesorder=nodesorder,
118 revisiondata=revisiondata,
118 revisiondata=revisiondata,
119 assumehaveparentrevisions=assumehaveparentrevisions,
119 assumehaveparentrevisions=assumehaveparentrevisions,
120 deltamode=deltamode,
120 deltamode=deltamode,
121 sidedata_helpers=sidedata_helpers,
121 sidedata_helpers=sidedata_helpers,
122 )
122 )
123
123
124 def addrevision(
124 def addrevision(
125 self,
125 self,
126 revisiondata,
126 revisiondata,
127 transaction,
127 transaction,
128 linkrev,
128 linkrev,
129 p1,
129 p1,
130 p2,
130 p2,
131 node=None,
131 node=None,
132 flags=revlog.REVIDX_DEFAULT_FLAGS,
132 flags=revlog.REVIDX_DEFAULT_FLAGS,
133 cachedelta=None,
133 cachedelta=None,
134 ):
134 ):
135 return self._revlog.addrevision(
135 return self._revlog.addrevision(
136 revisiondata,
136 revisiondata,
137 transaction,
137 transaction,
138 linkrev,
138 linkrev,
139 p1,
139 p1,
140 p2,
140 p2,
141 node=node,
141 node=node,
142 flags=flags,
142 flags=flags,
143 cachedelta=cachedelta,
143 cachedelta=cachedelta,
144 )
144 )
145
145
146 def addgroup(
146 def addgroup(
147 self,
147 self,
148 deltas,
148 deltas,
149 linkmapper,
149 linkmapper,
150 transaction,
150 transaction,
151 addrevisioncb=None,
151 addrevisioncb=None,
152 duplicaterevisioncb=None,
152 duplicaterevisioncb=None,
153 maybemissingparents=False,
153 maybemissingparents=False,
154 ):
154 ):
155 if maybemissingparents:
155 if maybemissingparents:
156 raise error.Abort(
156 raise error.Abort(
157 _(
157 _(
158 b'revlog storage does not support missing '
158 b'revlog storage does not support missing '
159 b'parents write mode'
159 b'parents write mode'
160 )
160 )
161 )
161 )
162
162
163 with self._revlog._writing(transaction):
163 with self._revlog._writing(transaction):
164
164
165 if self._fix_issue6528:
165 if self._fix_issue6528:
166 deltas = rewrite.filter_delta_issue6528(self._revlog, deltas)
166 deltas = rewrite.filter_delta_issue6528(self._revlog, deltas)
167
167
168 return self._revlog.addgroup(
168 return self._revlog.addgroup(
169 deltas,
169 deltas,
170 linkmapper,
170 linkmapper,
171 transaction,
171 transaction,
172 addrevisioncb=addrevisioncb,
172 addrevisioncb=addrevisioncb,
173 duplicaterevisioncb=duplicaterevisioncb,
173 duplicaterevisioncb=duplicaterevisioncb,
174 )
174 )
175
175
176 def getstrippoint(self, minlink):
176 def getstrippoint(self, minlink):
177 return self._revlog.getstrippoint(minlink)
177 return self._revlog.getstrippoint(minlink)
178
178
179 def strip(self, minlink, transaction):
179 def strip(self, minlink, transaction):
180 return self._revlog.strip(minlink, transaction)
180 return self._revlog.strip(minlink, transaction)
181
181
182 def censorrevision(self, tr, node, tombstone=b''):
182 def censorrevision(self, tr, node, tombstone=b''):
183 return self._revlog.censorrevision(tr, node, tombstone=tombstone)
183 return self._revlog.censorrevision(tr, node, tombstone=tombstone)
184
184
185 def files(self):
185 def files(self):
186 return self._revlog.files()
186 return self._revlog.files()
187
187
188 def read(self, node):
188 def read(self, node):
189 return storageutil.filtermetadata(self.revision(node))
189 return storageutil.filtermetadata(self.revision(node))
190
190
191 def add(self, text, meta, transaction, link, p1=None, p2=None):
191 def add(self, text, meta, transaction, link, p1=None, p2=None):
192 if meta or text.startswith(b'\1\n'):
192 if meta or text.startswith(b'\1\n'):
193 text = storageutil.packmeta(meta, text)
193 text = storageutil.packmeta(meta, text)
194 rev = self.addrevision(text, transaction, link, p1, p2)
194 rev = self.addrevision(text, transaction, link, p1, p2)
195 return self.node(rev)
195 return self.node(rev)
196
196
197 def renamed(self, node):
197 def renamed(self, node):
198 return storageutil.filerevisioncopied(self, node)
198 return storageutil.filerevisioncopied(self, node)
199
199
200 def size(self, rev):
200 def size(self, rev):
201 """return the size of a given revision"""
201 """return the size of a given revision"""
202
202
203 # for revisions with renames, we have to go the slow way
203 # for revisions with renames, we have to go the slow way
204 node = self.node(rev)
204 node = self.node(rev)
205 if self.iscensored(rev):
206 return 0
205 if self.renamed(node):
207 if self.renamed(node):
206 return len(self.read(node))
208 return len(self.read(node))
207 if self.iscensored(rev):
208 return 0
209
209
210 # XXX if self.read(node).startswith("\1\n"), this returns (size+4)
210 # XXX if self.read(node).startswith("\1\n"), this returns (size+4)
211 # XXX See also basefilectx.cmp.
211 # XXX See also basefilectx.cmp.
212 return self._revlog.size(rev)
212 return self._revlog.size(rev)
213
213
214 def cmp(self, node, text):
214 def cmp(self, node, text):
215 """compare text with a given file revision
215 """compare text with a given file revision
216
216
217 returns True if text is different than what is stored.
217 returns True if text is different than what is stored.
218 """
218 """
219 return not storageutil.filedataequivalent(self, node, text)
219 return not storageutil.filedataequivalent(self, node, text)
220
220
221 def verifyintegrity(self, state):
221 def verifyintegrity(self, state):
222 return self._revlog.verifyintegrity(state)
222 return self._revlog.verifyintegrity(state)
223
223
224 def storageinfo(
224 def storageinfo(
225 self,
225 self,
226 exclusivefiles=False,
226 exclusivefiles=False,
227 sharedfiles=False,
227 sharedfiles=False,
228 revisionscount=False,
228 revisionscount=False,
229 trackedsize=False,
229 trackedsize=False,
230 storedsize=False,
230 storedsize=False,
231 ):
231 ):
232 return self._revlog.storageinfo(
232 return self._revlog.storageinfo(
233 exclusivefiles=exclusivefiles,
233 exclusivefiles=exclusivefiles,
234 sharedfiles=sharedfiles,
234 sharedfiles=sharedfiles,
235 revisionscount=revisionscount,
235 revisionscount=revisionscount,
236 trackedsize=trackedsize,
236 trackedsize=trackedsize,
237 storedsize=storedsize,
237 storedsize=storedsize,
238 )
238 )
239
239
240 # Used by repo upgrade.
240 # Used by repo upgrade.
241 def clone(self, tr, destrevlog, **kwargs):
241 def clone(self, tr, destrevlog, **kwargs):
242 if not isinstance(destrevlog, filelog):
242 if not isinstance(destrevlog, filelog):
243 raise error.ProgrammingError(b'expected filelog to clone()')
243 raise error.ProgrammingError(b'expected filelog to clone()')
244
244
245 return self._revlog.clone(tr, destrevlog._revlog, **kwargs)
245 return self._revlog.clone(tr, destrevlog._revlog, **kwargs)
246
246
247
247
248 class narrowfilelog(filelog):
248 class narrowfilelog(filelog):
249 """Filelog variation to be used with narrow stores."""
249 """Filelog variation to be used with narrow stores."""
250
250
251 def __init__(self, opener, path, narrowmatch):
251 def __init__(self, opener, path, narrowmatch):
252 super(narrowfilelog, self).__init__(opener, path)
252 super(narrowfilelog, self).__init__(opener, path)
253 self._narrowmatch = narrowmatch
253 self._narrowmatch = narrowmatch
254
254
255 def renamed(self, node):
255 def renamed(self, node):
256 res = super(narrowfilelog, self).renamed(node)
256 res = super(narrowfilelog, self).renamed(node)
257
257
258 # Renames that come from outside the narrowspec are problematic
258 # Renames that come from outside the narrowspec are problematic
259 # because we may lack the base text for the rename. This can result
259 # because we may lack the base text for the rename. This can result
260 # in code attempting to walk the ancestry or compute a diff
260 # in code attempting to walk the ancestry or compute a diff
261 # encountering a missing revision. We address this by silently
261 # encountering a missing revision. We address this by silently
262 # removing rename metadata if the source file is outside the
262 # removing rename metadata if the source file is outside the
263 # narrow spec.
263 # narrow spec.
264 #
264 #
265 # A better solution would be to see if the base revision is available,
265 # A better solution would be to see if the base revision is available,
266 # rather than assuming it isn't.
266 # rather than assuming it isn't.
267 #
267 #
268 # An even better solution would be to teach all consumers of rename
268 # An even better solution would be to teach all consumers of rename
269 # metadata that the base revision may not be available.
269 # metadata that the base revision may not be available.
270 #
270 #
271 # TODO consider better ways of doing this.
271 # TODO consider better ways of doing this.
272 if res and not self._narrowmatch(res[0]):
272 if res and not self._narrowmatch(res[0]):
273 return None
273 return None
274
274
275 return res
275 return res
276
276
277 def size(self, rev):
277 def size(self, rev):
278 # Because we have a custom renamed() that may lie, we need to call
278 # Because we have a custom renamed() that may lie, we need to call
279 # the base renamed() to report accurate results.
279 # the base renamed() to report accurate results.
280 node = self.node(rev)
280 node = self.node(rev)
281 if super(narrowfilelog, self).renamed(node):
281 if super(narrowfilelog, self).renamed(node):
282 return len(self.read(node))
282 return len(self.read(node))
283 else:
283 else:
284 return super(narrowfilelog, self).size(rev)
284 return super(narrowfilelog, self).size(rev)
285
285
286 def cmp(self, node, text):
286 def cmp(self, node, text):
287 # We don't call `super` because narrow parents can be buggy in case of a
287 # We don't call `super` because narrow parents can be buggy in case of a
288 # ambiguous dirstate. Always take the slow path until there is a better
288 # ambiguous dirstate. Always take the slow path until there is a better
289 # fix, see issue6150.
289 # fix, see issue6150.
290
290
291 # Censored files compare against the empty file.
291 # Censored files compare against the empty file.
292 if self.iscensored(self.rev(node)):
292 if self.iscensored(self.rev(node)):
293 return text != b''
293 return text != b''
294
294
295 return self.read(node) != text
295 return self.read(node) != text
@@ -1,611 +1,628 b''
1 #testcases obsstore-off obsstore-on
1 #testcases obsstore-off obsstore-on
2
2
3 $ cat << EOF >> $HGRCPATH
3 $ cat << EOF >> $HGRCPATH
4 > [extensions]
4 > [extensions]
5 > amend=
5 > amend=
6 > debugdrawdag=$TESTDIR/drawdag.py
6 > debugdrawdag=$TESTDIR/drawdag.py
7 > [diff]
7 > [diff]
8 > git=1
8 > git=1
9 > EOF
9 > EOF
10
10
11 #if obsstore-on
11 #if obsstore-on
12 $ cat << EOF >> $HGRCPATH
12 $ cat << EOF >> $HGRCPATH
13 > [experimental]
13 > [experimental]
14 > evolution.createmarkers=True
14 > evolution.createmarkers=True
15 > EOF
15 > EOF
16 #endif
16 #endif
17
17
18 Basic amend
18 Basic amend
19
19
20 $ hg init repo1
20 $ hg init repo1
21 $ cd repo1
21 $ cd repo1
22 $ hg debugdrawdag <<'EOS'
22 $ hg debugdrawdag <<'EOS'
23 > B
23 > B
24 > |
24 > |
25 > A
25 > A
26 > EOS
26 > EOS
27
27
28 $ hg update B -q
28 $ hg update B -q
29 $ echo 2 >> B
29 $ echo 2 >> B
30
30
31 $ hg amend
31 $ hg amend
32 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/112478962961-7e959a55-amend.hg (obsstore-off !)
32 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/112478962961-7e959a55-amend.hg (obsstore-off !)
33 #if obsstore-off
33 #if obsstore-off
34 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
34 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
35 @ 1 be169c7e8dbe B
35 @ 1 be169c7e8dbe B
36 | diff --git a/B b/B
36 | diff --git a/B b/B
37 | new file mode 100644
37 | new file mode 100644
38 | --- /dev/null
38 | --- /dev/null
39 | +++ b/B
39 | +++ b/B
40 | @@ -0,0 +1,1 @@
40 | @@ -0,0 +1,1 @@
41 | +B2
41 | +B2
42 |
42 |
43 o 0 426bada5c675 A
43 o 0 426bada5c675 A
44 diff --git a/A b/A
44 diff --git a/A b/A
45 new file mode 100644
45 new file mode 100644
46 --- /dev/null
46 --- /dev/null
47 +++ b/A
47 +++ b/A
48 @@ -0,0 +1,1 @@
48 @@ -0,0 +1,1 @@
49 +A
49 +A
50 \ No newline at end of file
50 \ No newline at end of file
51
51
52 #else
52 #else
53 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
53 $ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n'
54 @ 2 be169c7e8dbe B
54 @ 2 be169c7e8dbe B
55 | diff --git a/B b/B
55 | diff --git a/B b/B
56 | new file mode 100644
56 | new file mode 100644
57 | --- /dev/null
57 | --- /dev/null
58 | +++ b/B
58 | +++ b/B
59 | @@ -0,0 +1,1 @@
59 | @@ -0,0 +1,1 @@
60 | +B2
60 | +B2
61 |
61 |
62 | x 1 112478962961 B
62 | x 1 112478962961 B
63 |/ diff --git a/B b/B
63 |/ diff --git a/B b/B
64 | new file mode 100644
64 | new file mode 100644
65 | --- /dev/null
65 | --- /dev/null
66 | +++ b/B
66 | +++ b/B
67 | @@ -0,0 +1,1 @@
67 | @@ -0,0 +1,1 @@
68 | +B
68 | +B
69 | \ No newline at end of file
69 | \ No newline at end of file
70 |
70 |
71 o 0 426bada5c675 A
71 o 0 426bada5c675 A
72 diff --git a/A b/A
72 diff --git a/A b/A
73 new file mode 100644
73 new file mode 100644
74 --- /dev/null
74 --- /dev/null
75 +++ b/A
75 +++ b/A
76 @@ -0,0 +1,1 @@
76 @@ -0,0 +1,1 @@
77 +A
77 +A
78 \ No newline at end of file
78 \ No newline at end of file
79
79
80 #endif
80 #endif
81
81
82 Nothing changed
82 Nothing changed
83
83
84 $ hg amend
84 $ hg amend
85 nothing changed
85 nothing changed
86 [1]
86 [1]
87
87
88 $ hg amend -d "0 0"
88 $ hg amend -d "0 0"
89 nothing changed
89 nothing changed
90 [1]
90 [1]
91
91
92 $ hg amend -d "Thu Jan 01 00:00:00 1970 UTC"
92 $ hg amend -d "Thu Jan 01 00:00:00 1970 UTC"
93 nothing changed
93 nothing changed
94 [1]
94 [1]
95
95
96 #if obsstore-on
96 #if obsstore-on
97 $ hg init repo-merge-state
97 $ hg init repo-merge-state
98 $ cd repo-merge-state
98 $ cd repo-merge-state
99 $ echo a > f
99 $ echo a > f
100 $ hg ci -Aqm a
100 $ hg ci -Aqm a
101 $ echo b > f
101 $ echo b > f
102 $ hg ci -Aqm b
102 $ hg ci -Aqm b
103 $ echo c > f
103 $ echo c > f
104 $ hg co -m '.^'
104 $ hg co -m '.^'
105 merging f
105 merging f
106 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
106 warning: conflicts while merging f! (edit, then use 'hg resolve --mark')
107 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
107 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
108 use 'hg resolve' to retry unresolved file merges
108 use 'hg resolve' to retry unresolved file merges
109 [1]
109 [1]
110 $ echo d > f
110 $ echo d > f
111 $ hg resolve -m f
111 $ hg resolve -m f
112 (no more unresolved files)
112 (no more unresolved files)
113 $ hg ci --amend --config experimental.evolution.allowunstable=True
113 $ hg ci --amend --config experimental.evolution.allowunstable=True
114 1 new orphan changesets
114 1 new orphan changesets
115 $ hg resolve -l
115 $ hg resolve -l
116 $ cd ..
116 $ cd ..
117 #endif
117 #endif
118
118
119 Matcher and metadata options
119 Matcher and metadata options
120
120
121 $ echo 3 > C
121 $ echo 3 > C
122 $ echo 4 > D
122 $ echo 4 > D
123 $ hg add C D
123 $ hg add C D
124 $ hg amend -m NEWMESSAGE -I C
124 $ hg amend -m NEWMESSAGE -I C
125 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/be169c7e8dbe-7684ddc5-amend.hg (obsstore-off !)
125 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/be169c7e8dbe-7684ddc5-amend.hg (obsstore-off !)
126 $ hg log -r . -T '{node|short} {desc} {files}\n'
126 $ hg log -r . -T '{node|short} {desc} {files}\n'
127 c7ba14d9075b NEWMESSAGE B C
127 c7ba14d9075b NEWMESSAGE B C
128 $ echo 5 > E
128 $ echo 5 > E
129 $ rm C
129 $ rm C
130 $ hg amend -d '2000 1000' -u 'Foo <foo@example.com>' -A C D
130 $ hg amend -d '2000 1000' -u 'Foo <foo@example.com>' -A C D
131 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/c7ba14d9075b-b3e76daa-amend.hg (obsstore-off !)
131 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/c7ba14d9075b-b3e76daa-amend.hg (obsstore-off !)
132 $ hg log -r . -T '{node|short} {desc} {files} {author} {date}\n'
132 $ hg log -r . -T '{node|short} {desc} {files} {author} {date}\n'
133 14f6c4bcc865 NEWMESSAGE B D Foo <foo@example.com> 2000.01000
133 14f6c4bcc865 NEWMESSAGE B D Foo <foo@example.com> 2000.01000
134
134
135 Amend with editor
135 Amend with editor
136
136
137 $ cat > $TESTTMP/prefix.sh <<'EOF'
137 $ cat > $TESTTMP/prefix.sh <<'EOF'
138 > printf 'EDITED: ' > $TESTTMP/msg
138 > printf 'EDITED: ' > $TESTTMP/msg
139 > cat "$1" >> $TESTTMP/msg
139 > cat "$1" >> $TESTTMP/msg
140 > mv $TESTTMP/msg "$1"
140 > mv $TESTTMP/msg "$1"
141 > EOF
141 > EOF
142 $ chmod +x $TESTTMP/prefix.sh
142 $ chmod +x $TESTTMP/prefix.sh
143
143
144 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend --edit
144 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend --edit
145 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/14f6c4bcc865-6591f15d-amend.hg (obsstore-off !)
145 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/14f6c4bcc865-6591f15d-amend.hg (obsstore-off !)
146 $ hg log -r . -T '{node|short} {desc}\n'
146 $ hg log -r . -T '{node|short} {desc}\n'
147 298f085230c3 EDITED: NEWMESSAGE
147 298f085230c3 EDITED: NEWMESSAGE
148 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend -e -m MSG
148 $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend -e -m MSG
149 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/298f085230c3-d81a6ad3-amend.hg (obsstore-off !)
149 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/298f085230c3-d81a6ad3-amend.hg (obsstore-off !)
150 $ hg log -r . -T '{node|short} {desc}\n'
150 $ hg log -r . -T '{node|short} {desc}\n'
151 974f07f28537 EDITED: MSG
151 974f07f28537 EDITED: MSG
152
152
153 $ echo FOO > $TESTTMP/msg
153 $ echo FOO > $TESTTMP/msg
154 $ hg amend -l $TESTTMP/msg -m BAR
154 $ hg amend -l $TESTTMP/msg -m BAR
155 abort: cannot specify both --message and --logfile
155 abort: cannot specify both --message and --logfile
156 [10]
156 [10]
157 $ hg amend -l $TESTTMP/msg
157 $ hg amend -l $TESTTMP/msg
158 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/974f07f28537-edb6470a-amend.hg (obsstore-off !)
158 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/974f07f28537-edb6470a-amend.hg (obsstore-off !)
159 $ hg log -r . -T '{node|short} {desc}\n'
159 $ hg log -r . -T '{node|short} {desc}\n'
160 507be9bdac71 FOO
160 507be9bdac71 FOO
161
161
162 Interactive mode
162 Interactive mode
163
163
164 $ touch F G
164 $ touch F G
165 $ hg add F G
165 $ hg add F G
166 $ cat <<EOS | hg amend -i --config ui.interactive=1
166 $ cat <<EOS | hg amend -i --config ui.interactive=1
167 > y
167 > y
168 > n
168 > n
169 > EOS
169 > EOS
170 diff --git a/F b/F
170 diff --git a/F b/F
171 new file mode 100644
171 new file mode 100644
172 examine changes to 'F'?
172 examine changes to 'F'?
173 (enter ? for help) [Ynesfdaq?] y
173 (enter ? for help) [Ynesfdaq?] y
174
174
175 diff --git a/G b/G
175 diff --git a/G b/G
176 new file mode 100644
176 new file mode 100644
177 examine changes to 'G'?
177 examine changes to 'G'?
178 (enter ? for help) [Ynesfdaq?] n
178 (enter ? for help) [Ynesfdaq?] n
179
179
180 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/507be9bdac71-c8077452-amend.hg (obsstore-off !)
180 saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/507be9bdac71-c8077452-amend.hg (obsstore-off !)
181 $ hg log -r . -T '{files}\n'
181 $ hg log -r . -T '{files}\n'
182 B D F
182 B D F
183
183
184 Amend in the middle of a stack
184 Amend in the middle of a stack
185
185
186 $ hg init $TESTTMP/repo2
186 $ hg init $TESTTMP/repo2
187 $ cd $TESTTMP/repo2
187 $ cd $TESTTMP/repo2
188 $ hg debugdrawdag <<'EOS'
188 $ hg debugdrawdag <<'EOS'
189 > C
189 > C
190 > |
190 > |
191 > B
191 > B
192 > |
192 > |
193 > A
193 > A
194 > EOS
194 > EOS
195
195
196 $ hg update -q B
196 $ hg update -q B
197 $ echo 2 >> B
197 $ echo 2 >> B
198 $ hg amend
198 $ hg amend
199 abort: cannot amend changeset, as that will orphan 1 descendants
199 abort: cannot amend changeset, as that will orphan 1 descendants
200 (see 'hg help evolution.instability')
200 (see 'hg help evolution.instability')
201 [10]
201 [10]
202
202
203 #if obsstore-on
203 #if obsstore-on
204
204
205 With allowunstable, amend could work in the middle of a stack
205 With allowunstable, amend could work in the middle of a stack
206
206
207 $ cat >> $HGRCPATH <<EOF
207 $ cat >> $HGRCPATH <<EOF
208 > [experimental]
208 > [experimental]
209 > evolution.createmarkers=True
209 > evolution.createmarkers=True
210 > evolution.allowunstable=True
210 > evolution.allowunstable=True
211 > EOF
211 > EOF
212
212
213 $ hg amend
213 $ hg amend
214 1 new orphan changesets
214 1 new orphan changesets
215 $ hg log -T '{rev} {node|short} {desc}\n' -G
215 $ hg log -T '{rev} {node|short} {desc}\n' -G
216 @ 3 be169c7e8dbe B
216 @ 3 be169c7e8dbe B
217 |
217 |
218 | * 2 26805aba1e60 C
218 | * 2 26805aba1e60 C
219 | |
219 | |
220 | x 1 112478962961 B
220 | x 1 112478962961 B
221 |/
221 |/
222 o 0 426bada5c675 A
222 o 0 426bada5c675 A
223
223
224 Checking the note stored in the obsmarker
224 Checking the note stored in the obsmarker
225
225
226 $ echo foo > bar
226 $ echo foo > bar
227 $ hg add bar
227 $ hg add bar
228 $ hg amend --note 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
228 $ hg amend --note 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
229 abort: cannot store a note of more than 255 bytes
229 abort: cannot store a note of more than 255 bytes
230 [10]
230 [10]
231 $ hg amend --note "adding bar"
231 $ hg amend --note "adding bar"
232 $ hg debugobsolete -r .
232 $ hg debugobsolete -r .
233 112478962961147124edd43549aedd1a335e44bf be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
233 112478962961147124edd43549aedd1a335e44bf be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
234 be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 16084da537dd8f84cfdb3055c633772269d62e1b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'adding bar', 'operation': 'amend', 'user': 'test'}
234 be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 16084da537dd8f84cfdb3055c633772269d62e1b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'adding bar', 'operation': 'amend', 'user': 'test'}
235
235
236 Cannot cause divergence by default
236 Cannot cause divergence by default
237
237
238 $ hg co --hidden 1
238 $ hg co --hidden 1
239 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
239 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
240 $ hg amend -m divergent
240 $ hg amend -m divergent
241 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
241 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
242 (add --verbose for details or see 'hg help evolution.instability')
242 (add --verbose for details or see 'hg help evolution.instability')
243 [10]
243 [10]
244 $ hg amend -m divergent --verbose
244 $ hg amend -m divergent --verbose
245 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
245 abort: cannot amend 112478962961, as that creates content-divergence with 16084da537dd
246 changeset 112478962961 already has a successor in changeset 16084da537dd
246 changeset 112478962961 already has a successor in changeset 16084da537dd
247 rewriting changeset 112478962961 would create "content-divergence"
247 rewriting changeset 112478962961 would create "content-divergence"
248 set experimental.evolution.allowdivergence=True to skip this check
248 set experimental.evolution.allowdivergence=True to skip this check
249 (see 'hg help evolution.instability' for details on content-divergence)
249 (see 'hg help evolution.instability' for details on content-divergence)
250 [10]
250 [10]
251 $ hg amend -m divergent --config experimental.evolution.allowdivergence=true
251 $ hg amend -m divergent --config experimental.evolution.allowdivergence=true
252 2 new content-divergent changesets
252 2 new content-divergent changesets
253
253
254 Amending pruned part of split commit does not cause divergence (issue6262)
254 Amending pruned part of split commit does not cause divergence (issue6262)
255
255
256 $ hg debugobsolete $(hg log -T '{node}' -r .)
256 $ hg debugobsolete $(hg log -T '{node}' -r .)
257 1 new obsolescence markers
257 1 new obsolescence markers
258 obsoleted 1 changesets
258 obsoleted 1 changesets
259 $ hg co '.^'
259 $ hg co '.^'
260 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
260 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
261 $ node_B=$(hg log -T '{node}' -r 4)
261 $ node_B=$(hg log -T '{node}' -r 4)
262 $ hg revert -r $node_B -a
262 $ hg revert -r $node_B -a
263 adding B
263 adding B
264 adding bar
264 adding bar
265 $ hg ci -m B-split1
265 $ hg ci -m B-split1
266 created new head
266 created new head
267 $ node_B_split1=$(hg log -T '{node}' -r .)
267 $ node_B_split1=$(hg log -T '{node}' -r .)
268 $ hg co '.^'
268 $ hg co '.^'
269 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
269 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
270 $ hg revert -r 4 -a
270 $ hg revert -r 4 -a
271 adding B
271 adding B
272 adding bar
272 adding bar
273 $ hg ci -m B-split2
273 $ hg ci -m B-split2
274 created new head
274 created new head
275 $ node_B_split2=$(hg log -T '{node}' -r .)
275 $ node_B_split2=$(hg log -T '{node}' -r .)
276 $ hg debugobsolete $node_B $node_B_split1 $node_B_split2
276 $ hg debugobsolete $node_B $node_B_split1 $node_B_split2
277 1 new obsolescence markers
277 1 new obsolescence markers
278 obsoleted 1 changesets
278 obsoleted 1 changesets
279 $ hg debugobsolete $node_B_split2
279 $ hg debugobsolete $node_B_split2
280 1 new obsolescence markers
280 1 new obsolescence markers
281 obsoleted 1 changesets
281 obsoleted 1 changesets
282 $ hg co --hidden $node_B_split2
282 $ hg co --hidden $node_B_split2
283 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
283 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
284 $ hg amend -m 'revived B-split2'
284 $ hg amend -m 'revived B-split2'
285 abort: cannot amend 809fe227532f, as that creates content-divergence with c68306a86921, from 16084da537dd (known-bad-output !)
285 abort: cannot amend 809fe227532f, as that creates content-divergence with c68306a86921, from 16084da537dd (known-bad-output !)
286 (add --verbose for details or see 'hg help evolution.instability') (known-bad-output !)
286 (add --verbose for details or see 'hg help evolution.instability') (known-bad-output !)
287 [10]
287 [10]
288
288
289 Hidden common predecessor of divergence does not cause crash
289 Hidden common predecessor of divergence does not cause crash
290
290
291 First create C1 as a pruned successor of C
291 First create C1 as a pruned successor of C
292 $ hg co C
292 $ hg co C
293 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
293 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
294 $ hg amend -m C1
294 $ hg amend -m C1
295 $ hg tag --local C1
295 $ hg tag --local C1
296 $ hg debugobsolete $(hg log -T '{node}' -r C1)
296 $ hg debugobsolete $(hg log -T '{node}' -r C1)
297 1 new obsolescence markers
297 1 new obsolescence markers
298 obsoleted 1 changesets
298 obsoleted 1 changesets
299 Now create C2 as other side of divergence (not actually divergent because C1 is
299 Now create C2 as other side of divergence (not actually divergent because C1 is
300 pruned)
300 pruned)
301 $ hg co C
301 $ hg co C
302 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
302 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
303 $ hg amend -m C2
303 $ hg amend -m C2
304 1 new orphan changesets
304 1 new orphan changesets
305 Make the common predecessor (C) pruned
305 Make the common predecessor (C) pruned
306 $ hg tag --local --remove C
306 $ hg tag --local --remove C
307 $ hg co C1
307 $ hg co C1
308 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
308 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
309 Try to cause divergence
309 Try to cause divergence
310 $ hg amend -m C11
310 $ hg amend -m C11
311 abort: cannot amend 2758767f5d17, as that creates content-divergence with bfcb433a0dea, from 26805aba1e60
311 abort: cannot amend 2758767f5d17, as that creates content-divergence with bfcb433a0dea, from 26805aba1e60
312 (add --verbose for details or see 'hg help evolution.instability')
312 (add --verbose for details or see 'hg help evolution.instability')
313 [10]
313 [10]
314 #endif
314 #endif
315
315
316 Cannot amend public changeset
316 Cannot amend public changeset
317
317
318 $ hg phase -r A --public
318 $ hg phase -r A --public
319 $ hg update -C -q A
319 $ hg update -C -q A
320 $ hg amend -m AMEND
320 $ hg amend -m AMEND
321 abort: cannot amend public changesets: 426bada5c675
321 abort: cannot amend public changesets: 426bada5c675
322 (see 'hg help phases' for details)
322 (see 'hg help phases' for details)
323 [10]
323 [10]
324
324
325 Amend a merge changeset
325 Amend a merge changeset
326
326
327 $ hg init $TESTTMP/repo3
327 $ hg init $TESTTMP/repo3
328 $ cd $TESTTMP/repo3
328 $ cd $TESTTMP/repo3
329 $ hg debugdrawdag <<'EOS'
329 $ hg debugdrawdag <<'EOS'
330 > C
330 > C
331 > /|
331 > /|
332 > A B
332 > A B
333 > EOS
333 > EOS
334 $ hg update -q C
334 $ hg update -q C
335 $ hg amend -m FOO
335 $ hg amend -m FOO
336 saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !)
336 saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !)
337 $ rm .hg/localtags
337 $ rm .hg/localtags
338 $ hg log -G -T '{desc}\n'
338 $ hg log -G -T '{desc}\n'
339 @ FOO
339 @ FOO
340 |\
340 |\
341 | o B
341 | o B
342 |
342 |
343 o A
343 o A
344
344
345
345
346 More complete test for status changes (issue5732)
346 More complete test for status changes (issue5732)
347 -------------------------------------------------
347 -------------------------------------------------
348
348
349 Generates history of files having 3 states, r0_r1_wc:
349 Generates history of files having 3 states, r0_r1_wc:
350
350
351 r0: ground (content/missing)
351 r0: ground (content/missing)
352 r1: old state to be amended (content/missing, where missing means removed)
352 r1: old state to be amended (content/missing, where missing means removed)
353 wc: changes to be included in r1 (content/missing-tracked/untracked)
353 wc: changes to be included in r1 (content/missing-tracked/untracked)
354
354
355 $ hg init $TESTTMP/wcstates
355 $ hg init $TESTTMP/wcstates
356 $ cd $TESTTMP/wcstates
356 $ cd $TESTTMP/wcstates
357
357
358 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1
358 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1
359 $ hg addremove -q --similarity 0
359 $ hg addremove -q --similarity 0
360 $ hg commit -m0
360 $ hg commit -m0
361
361
362 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2
362 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2
363 $ hg addremove -q --similarity 0
363 $ hg addremove -q --similarity 0
364 $ hg commit -m1
364 $ hg commit -m1
365
365
366 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc
366 $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc
367 $ hg addremove -q --similarity 0
367 $ hg addremove -q --similarity 0
368 $ hg forget *_*_*-untracked
368 $ hg forget *_*_*-untracked
369 $ rm *_*_missing-*
369 $ rm *_*_missing-*
370
370
371 amend r1 to include wc changes
371 amend r1 to include wc changes
372
372
373 $ hg amend
373 $ hg amend
374 saved backup bundle to * (glob) (obsstore-off !)
374 saved backup bundle to * (glob) (obsstore-off !)
375
375
376 clean/modified/removed/added states of the amended revision
376 clean/modified/removed/added states of the amended revision
377
377
378 $ hg status --all --change . 'glob:content1_*_content1-tracked'
378 $ hg status --all --change . 'glob:content1_*_content1-tracked'
379 C content1_content1_content1-tracked
379 C content1_content1_content1-tracked
380 C content1_content2_content1-tracked
380 C content1_content2_content1-tracked
381 C content1_missing_content1-tracked
381 C content1_missing_content1-tracked
382 $ hg status --all --change . 'glob:content1_*_content[23]-tracked'
382 $ hg status --all --change . 'glob:content1_*_content[23]-tracked'
383 M content1_content1_content3-tracked
383 M content1_content1_content3-tracked
384 M content1_content2_content2-tracked
384 M content1_content2_content2-tracked
385 M content1_content2_content3-tracked
385 M content1_content2_content3-tracked
386 M content1_missing_content3-tracked
386 M content1_missing_content3-tracked
387 $ hg status --all --change . 'glob:content1_*_missing-tracked'
387 $ hg status --all --change . 'glob:content1_*_missing-tracked'
388 M content1_content2_missing-tracked
388 M content1_content2_missing-tracked
389 R content1_missing_missing-tracked
389 R content1_missing_missing-tracked
390 C content1_content1_missing-tracked
390 C content1_content1_missing-tracked
391 $ hg status --all --change . 'glob:content1_*_*-untracked'
391 $ hg status --all --change . 'glob:content1_*_*-untracked'
392 R content1_content1_content1-untracked
392 R content1_content1_content1-untracked
393 R content1_content1_content3-untracked
393 R content1_content1_content3-untracked
394 R content1_content1_missing-untracked
394 R content1_content1_missing-untracked
395 R content1_content2_content1-untracked
395 R content1_content2_content1-untracked
396 R content1_content2_content2-untracked
396 R content1_content2_content2-untracked
397 R content1_content2_content3-untracked
397 R content1_content2_content3-untracked
398 R content1_content2_missing-untracked
398 R content1_content2_missing-untracked
399 R content1_missing_content1-untracked
399 R content1_missing_content1-untracked
400 R content1_missing_content3-untracked
400 R content1_missing_content3-untracked
401 R content1_missing_missing-untracked
401 R content1_missing_missing-untracked
402 $ hg status --all --change . 'glob:missing_content2_*'
402 $ hg status --all --change . 'glob:missing_content2_*'
403 A missing_content2_content2-tracked
403 A missing_content2_content2-tracked
404 A missing_content2_content3-tracked
404 A missing_content2_content3-tracked
405 A missing_content2_missing-tracked
405 A missing_content2_missing-tracked
406 $ hg status --all --change . 'glob:missing_missing_*'
406 $ hg status --all --change . 'glob:missing_missing_*'
407 A missing_missing_content3-tracked
407 A missing_missing_content3-tracked
408
408
409 working directory should be all clean (with some missing/untracked files)
409 working directory should be all clean (with some missing/untracked files)
410
410
411 $ hg status --all 'glob:*_content?-tracked'
411 $ hg status --all 'glob:*_content?-tracked'
412 C content1_content1_content1-tracked
412 C content1_content1_content1-tracked
413 C content1_content1_content3-tracked
413 C content1_content1_content3-tracked
414 C content1_content2_content1-tracked
414 C content1_content2_content1-tracked
415 C content1_content2_content2-tracked
415 C content1_content2_content2-tracked
416 C content1_content2_content3-tracked
416 C content1_content2_content3-tracked
417 C content1_missing_content1-tracked
417 C content1_missing_content1-tracked
418 C content1_missing_content3-tracked
418 C content1_missing_content3-tracked
419 C missing_content2_content2-tracked
419 C missing_content2_content2-tracked
420 C missing_content2_content3-tracked
420 C missing_content2_content3-tracked
421 C missing_missing_content3-tracked
421 C missing_missing_content3-tracked
422 $ hg status --all 'glob:*_missing-tracked'
422 $ hg status --all 'glob:*_missing-tracked'
423 ! content1_content1_missing-tracked
423 ! content1_content1_missing-tracked
424 ! content1_content2_missing-tracked
424 ! content1_content2_missing-tracked
425 ! content1_missing_missing-tracked
425 ! content1_missing_missing-tracked
426 ! missing_content2_missing-tracked
426 ! missing_content2_missing-tracked
427 ! missing_missing_missing-tracked
427 ! missing_missing_missing-tracked
428 $ hg status --all 'glob:*-untracked'
428 $ hg status --all 'glob:*-untracked'
429 ? content1_content1_content1-untracked
429 ? content1_content1_content1-untracked
430 ? content1_content1_content3-untracked
430 ? content1_content1_content3-untracked
431 ? content1_content2_content1-untracked
431 ? content1_content2_content1-untracked
432 ? content1_content2_content2-untracked
432 ? content1_content2_content2-untracked
433 ? content1_content2_content3-untracked
433 ? content1_content2_content3-untracked
434 ? content1_missing_content1-untracked
434 ? content1_missing_content1-untracked
435 ? content1_missing_content3-untracked
435 ? content1_missing_content3-untracked
436 ? missing_content2_content2-untracked
436 ? missing_content2_content2-untracked
437 ? missing_content2_content3-untracked
437 ? missing_content2_content3-untracked
438 ? missing_missing_content3-untracked
438 ? missing_missing_content3-untracked
439
439
440 =================================
440 =================================
441 Test backup-bundle config option|
441 Test backup-bundle config option|
442 =================================
442 =================================
443 $ hg init $TESTTMP/repo4
443 $ hg init $TESTTMP/repo4
444 $ cd $TESTTMP/repo4
444 $ cd $TESTTMP/repo4
445 $ echo a>a
445 $ echo a>a
446 $ hg ci -Aqma
446 $ hg ci -Aqma
447 $ echo oops>b
447 $ echo oops>b
448 $ hg ci -Aqm "b"
448 $ hg ci -Aqm "b"
449 $ echo partiallyfixed > b
449 $ echo partiallyfixed > b
450
450
451 #if obsstore-off
451 #if obsstore-off
452 $ hg amend
452 $ hg amend
453 saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg
453 saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg
454 When backup-bundle config option is set:
454 When backup-bundle config option is set:
455 $ cat << EOF >> $HGRCPATH
455 $ cat << EOF >> $HGRCPATH
456 > [rewrite]
456 > [rewrite]
457 > backup-bundle = False
457 > backup-bundle = False
458 > EOF
458 > EOF
459 $ echo fixed > b
459 $ echo fixed > b
460 $ hg amend
460 $ hg amend
461
461
462 #else
462 #else
463 $ hg amend
463 $ hg amend
464 When backup-bundle config option is set:
464 When backup-bundle config option is set:
465 $ cat << EOF >> $HGRCPATH
465 $ cat << EOF >> $HGRCPATH
466 > [rewrite]
466 > [rewrite]
467 > backup-bundle = False
467 > backup-bundle = False
468 > EOF
468 > EOF
469 $ echo fixed > b
469 $ echo fixed > b
470 $ hg amend
470 $ hg amend
471
471
472 #endif
472 #endif
473 ==========================================
473 ==========================================
474 Test update-timestamp config option|
474 Test update-timestamp config option|
475 ==========================================
475 ==========================================
476
476
477 $ cat >> $HGRCPATH << EOF
477 $ cat >> $HGRCPATH << EOF
478 > [extensions]
478 > [extensions]
479 > amend=
479 > amend=
480 > mockmakedate = $TESTDIR/mockmakedate.py
480 > mockmakedate = $TESTDIR/mockmakedate.py
481 > EOF
481 > EOF
482
482
483 $ hg init $TESTTMP/repo5
483 $ hg init $TESTTMP/repo5
484 $ cd $TESTTMP/repo5
484 $ cd $TESTTMP/repo5
485 $ cat <<'EOF' >> .hg/hgrc
485 $ cat <<'EOF' >> .hg/hgrc
486 > [command-templates]
486 > [command-templates]
487 > log = 'user: {user}
487 > log = 'user: {user}
488 > date: {date|date}
488 > date: {date|date}
489 > summary: {desc|firstline}\n'
489 > summary: {desc|firstline}\n'
490 > EOF
490 > EOF
491
491
492 $ echo a>a
492 $ echo a>a
493 $ hg ci -Am 'commit 1'
493 $ hg ci -Am 'commit 1'
494 adding a
494 adding a
495
495
496 When updatetimestamp is False
496 When updatetimestamp is False
497
497
498 $ hg amend --date '1997-1-1 0:1'
498 $ hg amend --date '1997-1-1 0:1'
499 $ hg log --limit 1
499 $ hg log --limit 1
500 user: test
500 user: test
501 date: Wed Jan 01 00:01:00 1997 +0000
501 date: Wed Jan 01 00:01:00 1997 +0000
502 summary: commit 1
502 summary: commit 1
503
503
504 When update-timestamp is True and no other change than the date
504 When update-timestamp is True and no other change than the date
505
505
506 $ hg amend --config rewrite.update-timestamp=True
506 $ hg amend --config rewrite.update-timestamp=True
507 nothing changed
507 nothing changed
508 [1]
508 [1]
509 $ hg log --limit 1
509 $ hg log --limit 1
510 user: test
510 user: test
511 date: Wed Jan 01 00:01:00 1997 +0000
511 date: Wed Jan 01 00:01:00 1997 +0000
512 summary: commit 1
512 summary: commit 1
513
513
514 When update-timestamp is True and there is other change than the date
514 When update-timestamp is True and there is other change than the date
515 $ hg amend --user foobar --config rewrite.update-timestamp=True
515 $ hg amend --user foobar --config rewrite.update-timestamp=True
516 $ hg log --limit 1
516 $ hg log --limit 1
517 user: foobar
517 user: foobar
518 date: Thu Jan 01 00:00:02 1970 +0000
518 date: Thu Jan 01 00:00:02 1970 +0000
519 summary: commit 1
519 summary: commit 1
520
520
521 When date option is applicable and update-timestamp is True
521 When date option is applicable and update-timestamp is True
522 $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True
522 $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True
523 $ hg log --limit 1
523 $ hg log --limit 1
524 user: foobar
524 user: foobar
525 date: Thu Jan 01 00:01:00 1998 +0000
525 date: Thu Jan 01 00:01:00 1998 +0000
526 summary: commit 1
526 summary: commit 1
527
527
528 Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp
528 Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp
529
529
530 $ hg amend -D
530 $ hg amend -D
531 $ hg log --limit 1
531 $ hg log --limit 1
532 user: foobar
532 user: foobar
533 date: Thu Jan 01 00:00:04 1970 +0000
533 date: Thu Jan 01 00:00:04 1970 +0000
534 summary: commit 1
534 summary: commit 1
535
535
536 $ hg amend -D --config rewrite.update-timestamp=True
536 $ hg amend -D --config rewrite.update-timestamp=True
537 $ hg log --limit 1
537 $ hg log --limit 1
538 user: foobar
538 user: foobar
539 date: Thu Jan 01 00:00:05 1970 +0000
539 date: Thu Jan 01 00:00:05 1970 +0000
540 summary: commit 1
540 summary: commit 1
541
541
542 rewrite.update-timestamp can be negated by --no-currentdate
542 rewrite.update-timestamp can be negated by --no-currentdate
543
543
544 $ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz
544 $ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz
545 $ hg log --limit 1
545 $ hg log --limit 1
546 user: baz
546 user: baz
547 date: Thu Jan 01 00:00:05 1970 +0000
547 date: Thu Jan 01 00:00:05 1970 +0000
548 summary: commit 1
548 summary: commit 1
549
549
550 Bad combination of date options:
550 Bad combination of date options:
551
551
552 $ hg amend -D --date '0 0'
552 $ hg amend -D --date '0 0'
553 abort: cannot specify both --date and --currentdate
553 abort: cannot specify both --date and --currentdate
554 [10]
554 [10]
555
555
556 Close branch
556 Close branch
557
557
558 $ hg amend --secret --close-branch
558 $ hg amend --secret --close-branch
559 $ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n'
559 $ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n'
560 close=1
560 close=1
561 phase=secret
561 phase=secret
562
562
563 $ cd ..
563 $ cd ..
564
564
565 Corner case of amend from issue6157:
565 Corner case of amend from issue6157:
566 - working copy parent has a change to file `a`
566 - working copy parent has a change to file `a`
567 - working copy has the inverse change
567 - working copy has the inverse change
568 - we amend the working copy parent for files other than `a`
568 - we amend the working copy parent for files other than `a`
569 hg used to include the changes to `a` anyway.
569 hg used to include the changes to `a` anyway.
570
570
571 $ hg init 6157; cd 6157
571 $ hg init 6157; cd 6157
572 $ echo a > a; echo b > b; hg commit -qAm_
572 $ echo a > a; echo b > b; hg commit -qAm_
573 $ echo a2 > a; hg commit -qm_
573 $ echo a2 > a; hg commit -qm_
574 $ hg diff --stat -c .
574 $ hg diff --stat -c .
575 a | 2 +-
575 a | 2 +-
576 1 files changed, 1 insertions(+), 1 deletions(-)
576 1 files changed, 1 insertions(+), 1 deletions(-)
577 $ echo a > a; echo b2 > b; hg amend -q b
577 $ echo a > a; echo b2 > b; hg amend -q b
578 $ hg diff --stat -c .
578 $ hg diff --stat -c .
579 a | 2 +-
579 a | 2 +-
580 b | 2 +-
580 b | 2 +-
581 2 files changed, 2 insertions(+), 2 deletions(-)
581 2 files changed, 2 insertions(+), 2 deletions(-)
582
582
583 Modifying a file while the editor is open can cause dirstate corruption
583 Modifying a file while the editor is open can cause dirstate corruption
584 (issue6233)
584 (issue6233)
585
585
586 $ cd $TESTTMP
586 $ cd $TESTTMP
587 $ hg init modify-during-amend; cd modify-during-amend
587 $ hg init modify-during-amend; cd modify-during-amend
588 $ echo r0 > foo; hg commit -qAm "r0"
588 $ echo r0 > foo; hg commit -qAm "r0"
589 $ echo alpha > foo; hg commit -qm "alpha"
589 $ echo alpha > foo; hg commit -qm "alpha"
590 $ echo beta >> foo
590 $ echo beta >> foo
591 $ cat > $TESTTMP/touchy_editor.sh <<EOF
591 $ cat > $TESTTMP/touchy_editor.sh <<EOF
592 > sleep 1
592 > sleep 1
593 > echo delta >> "$TESTTMP/modify-during-amend/foo"
593 > echo delta >> "$TESTTMP/modify-during-amend/foo"
594 > sleep 1
594 > sleep 1
595 > echo hi > "\$1"
595 > echo hi > "\$1"
596 > sleep 1
596 > sleep 1
597 > EOF
597 > EOF
598 $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend
598 $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend
599 $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then
599 $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then
600 > echo "OK."
600 > echo "OK."
601 > else
601 > else
602 > echo "Bug detected. 'delta' is not part of the commit OR the wdir"
602 > echo "Bug detected. 'delta' is not part of the commit OR the wdir"
603 > echo "Diff and status before rebuild:"
603 > echo "Diff and status before rebuild:"
604 > hg diff
604 > hg diff
605 > hg status
605 > hg status
606 > hg debugrebuilddirstate
606 > hg debugrebuilddirstate
607 > echo "Diff and status after rebuild:"
607 > echo "Diff and status after rebuild:"
608 > hg diff
608 > hg diff
609 > hg status
609 > hg status
610 > fi
610 > fi
611 OK.
611 OK.
612
613 Amending a commit that has copies but not specifying those copies shouldn't
614 cause them to be lost
615
616 $ cd $TESTTMP
617 $ hg init dont-lose-copies; cd dont-lose-copies
618 $ echo r0 > r0; hg commit -qAm "r0"
619 $ hg cp r0 r0_copied; hg commit -qm "copy r0"
620 $ echo hi > new_file_amend_me
621 $ hg status --change . --copies
622 A r0_copied
623 r0
624 $ hg amend -qA new_file_amend_me
625 $ hg status --change . --copies
626 A new_file_amend_me
627 A r0_copied
628 r0
General Comments 0
You need to be logged in to leave comments. Login now