##// END OF EJS Templates
merge with stable
Pulkit Goyal -
r41601:311f563c merge default draft
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,177 +1,178 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,190 +1,191 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
@@ -1,27 +1,27 b''
1 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
1 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
2 Upstream-Name: mercurial
2 Upstream-Name: mercurial
3 Source: https://www.mercurial-scm.org/
3 Source: https://www.mercurial-scm.org/
4
4
5 Files: *
5 Files: *
6 Copyright: 2005-2018, Matt Mackall <mpm@selenic.com> and others.
6 Copyright: 2005-2019, Matt Mackall <mpm@selenic.com> and others.
7 License: GPL-2+
7 License: GPL-2+
8 This program is free software; you can redistribute it
8 This program is free software; you can redistribute it
9 and/or modify it under the terms of the GNU General Public
9 and/or modify it under the terms of the GNU General Public
10 License as published by the Free Software Foundation; either
10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later
11 version 2 of the License, or (at your option) any later
12 version.
12 version.
13 .
13 .
14 This program is distributed in the hope that it will be
14 This program is distributed in the hope that it will be
15 useful, but WITHOUT ANY WARRANTY; without even the implied
15 useful, but WITHOUT ANY WARRANTY; without even the implied
16 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
17 PURPOSE. See the GNU General Public License for more
17 PURPOSE. See the GNU General Public License for more
18 details.
18 details.
19 .
19 .
20 You should have received a copy of the GNU General Public
20 You should have received a copy of the GNU General Public
21 License along with this package; if not, write to the Free
21 License along with this package; if not, write to the Free
22 Software Foundation, Inc., 51 Franklin St, Fifth Floor,
22 Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23 Boston, MA 02110-1301 USA
23 Boston, MA 02110-1301 USA
24 .
24 .
25 On Debian systems, the full text of the GNU General Public
25 On Debian systems, the full text of the GNU General Public
26 License version 2 can be found in the file
26 License version 2 can be found in the file
27 `/usr/share/common-licenses/GPL-2'.
27 `/usr/share/common-licenses/GPL-2'.
@@ -1,162 +1,162 b''
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
2 <html>
3 <head>
3 <head>
4 <title>Mercurial for Windows</title>
4 <title>Mercurial for Windows</title>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
6 <style type="text/css">
6 <style type="text/css">
7 <!--
7 <!--
8 html {
8 html {
9 font-family: sans-serif;
9 font-family: sans-serif;
10 margin: 1em 2em;
10 margin: 1em 2em;
11 }
11 }
12
12
13 p {
13 p {
14 margin-top: 0.5em;
14 margin-top: 0.5em;
15 margin-bottom: 0.5em;
15 margin-bottom: 0.5em;
16 }
16 }
17
17
18 pre {
18 pre {
19 margin: 0.25em 0em;
19 margin: 0.25em 0em;
20 padding: 0.5em;
20 padding: 0.5em;
21 background-color: #EEE;
21 background-color: #EEE;
22 border: thin solid #CCC;
22 border: thin solid #CCC;
23 }
23 }
24
24
25 .indented {
25 .indented {
26 padding-left: 10pt;
26 padding-left: 10pt;
27 }
27 }
28 -->
28 -->
29 </style>
29 </style>
30 </head>
30 </head>
31
31
32 <body>
32 <body>
33 <h1>Mercurial for Windows</h1>
33 <h1>Mercurial for Windows</h1>
34
34
35 <p>Welcome to Mercurial for Windows!</p>
35 <p>Welcome to Mercurial for Windows!</p>
36
36
37 <p>
37 <p>
38 Mercurial is a command-line application. You must run it from
38 Mercurial is a command-line application. You must run it from
39 the Windows command prompt (or if you're hard core, a <a
39 the Windows command prompt (or if you're hard core, a <a
40 href="http://www.mingw.org/">MinGW</a> shell).
40 href="http://www.mingw.org/">MinGW</a> shell).
41 </p>
41 </p>
42
42
43 <p class="indented">
43 <p class="indented">
44 <i>Note: the standard <a href="http://www.mingw.org/">MinGW</a>
44 <i>Note: the standard <a href="http://www.mingw.org/">MinGW</a>
45 msys startup script uses rxvt which has problems setting up
45 msys startup script uses rxvt which has problems setting up
46 standard input and output. Running bash directly works
46 standard input and output. Running bash directly works
47 correctly.</i>
47 correctly.</i>
48 </p>
48 </p>
49
49
50 <p>
50 <p>
51 For documentation, please visit the <a
51 For documentation, please visit the <a
52 href="https://mercurial-scm.org/">Mercurial web site</a>.
52 href="https://mercurial-scm.org/">Mercurial web site</a>.
53 You can also download a free book, <a
53 You can also download a free book, <a
54 href="https://book.mercurial-scm.org/">Mercurial: The Definitive
54 href="https://book.mercurial-scm.org/">Mercurial: The Definitive
55 Guide</a>.
55 Guide</a>.
56 </p>
56 </p>
57
57
58 <p>
58 <p>
59 By default, Mercurial installs to <tt>C:\Program
59 By default, Mercurial installs to <tt>C:\Program
60 Files\Mercurial</tt>. The Mercurial command is called
60 Files\Mercurial</tt>. The Mercurial command is called
61 <tt>hg.exe</tt>.
61 <tt>hg.exe</tt>.
62 </p>
62 </p>
63
63
64 <h1>Testing Mercurial after you've installed it</h1>
64 <h1>Testing Mercurial after you've installed it</h1>
65
65
66 <p>
66 <p>
67 The easiest way to check that Mercurial is installed properly is
67 The easiest way to check that Mercurial is installed properly is
68 to just type the following at the command prompt:
68 to just type the following at the command prompt:
69 </p>
69 </p>
70
70
71 <pre>
71 <pre>
72 hg
72 hg
73 </pre>
73 </pre>
74
74
75 <p>
75 <p>
76 This command should print a useful help message. If it does,
76 This command should print a useful help message. If it does,
77 other Mercurial commands should work fine for you.
77 other Mercurial commands should work fine for you.
78 </p>
78 </p>
79
79
80 <h1>Configuration notes</h1>
80 <h1>Configuration notes</h1>
81 <h4>Default editor</h4>
81 <h4>Default editor</h4>
82 <p>
82 <p>
83 The default editor for commit messages is 'notepad'. You can set
83 The default editor for commit messages is 'notepad'. You can set
84 the <tt>EDITOR</tt> (or <tt>HGEDITOR</tt>) environment variable
84 the <tt>EDITOR</tt> (or <tt>HGEDITOR</tt>) environment variable
85 to specify your preference or set it in <tt>mercurial.ini</tt>:
85 to specify your preference or set it in <tt>mercurial.ini</tt>:
86 </p>
86 </p>
87 <pre>
87 <pre>
88 [ui]
88 [ui]
89 editor = whatever
89 editor = whatever
90 </pre>
90 </pre>
91
91
92 <h4>Configuring a Merge program</h4>
92 <h4>Configuring a Merge program</h4>
93 <p>
93 <p>
94 It should be emphasized that Mercurial by itself doesn't attempt
94 It should be emphasized that Mercurial by itself doesn't attempt
95 to do a Merge at the file level, neither does it make any
95 to do a Merge at the file level, neither does it make any
96 attempt to Resolve the conflicts.
96 attempt to Resolve the conflicts.
97 </p>
97 </p>
98
98
99 <p>
99 <p>
100 By default, Mercurial will use the merge program defined by the
100 By default, Mercurial will use the merge program defined by the
101 <tt>HGMERGE</tt> environment variable, or uses the one defined
101 <tt>HGMERGE</tt> environment variable, or uses the one defined
102 in the <tt>mercurial.ini</tt> file. (see <a
102 in the <tt>mercurial.ini</tt> file. (see <a
103 href="https://mercurial-scm.org/wiki/MergeProgram">MergeProgram</a>
103 href="https://mercurial-scm.org/wiki/MergeProgram">MergeProgram</a>
104 on the Mercurial Wiki for more information)
104 on the Mercurial Wiki for more information)
105 </p>
105 </p>
106
106
107 <h1>Reporting problems</h1>
107 <h1>Reporting problems</h1>
108
108
109 <p>
109 <p>
110 Before you report any problems, please consult the <a
110 Before you report any problems, please consult the <a
111 href="https://mercurial-scm.org/">Mercurial web site</a>
111 href="https://mercurial-scm.org/">Mercurial web site</a>
112 and see if your question is already in our list of <a
112 and see if your question is already in our list of <a
113 href="https://mercurial-scm.org/wiki/FAQ">Frequently
113 href="https://mercurial-scm.org/wiki/FAQ">Frequently
114 Answered Questions</a> (the "FAQ").
114 Answered Questions</a> (the "FAQ").
115 </p>
115 </p>
116
116
117 <p>
117 <p>
118 If you cannot find an answer to your question, please feel free
118 If you cannot find an answer to your question, please feel free
119 to send mail to the Mercurial mailing list, at <a
119 to send mail to the Mercurial mailing list, at <a
120 href="mailto:mercurial@mercurial-scm.org">mercurial@mercurial-scm.org</a>.
120 href="mailto:mercurial@mercurial-scm.org">mercurial@mercurial-scm.org</a>.
121 <b>Remember</b>, the more useful information you include in your
121 <b>Remember</b>, the more useful information you include in your
122 report, the easier it will be for us to help you!
122 report, the easier it will be for us to help you!
123 </p>
123 </p>
124
124
125 <p>
125 <p>
126 If you are IRC-savvy, that's usually the fastest way to get
126 If you are IRC-savvy, that's usually the fastest way to get
127 help. Go to <tt>#mercurial</tt> on <tt>irc.freenode.net</tt>.
127 help. Go to <tt>#mercurial</tt> on <tt>irc.freenode.net</tt>.
128 </p>
128 </p>
129
129
130 <h1>Author and copyright information</h1>
130 <h1>Author and copyright information</h1>
131
131
132 <p>
132 <p>
133 Mercurial was written by <a href="http://www.selenic.com">Matt
133 Mercurial was written by <a href="http://www.selenic.com">Matt
134 Mackall</a>, and is maintained by Matt and a team of volunteers.
134 Mackall</a>, and is maintained by Matt and a team of volunteers.
135 </p>
135 </p>
136
136
137 <p>
137 <p>
138 The Windows installer was written by <a
138 The Windows installer was written by <a
139 href="http://www.serpentine.com/blog">Bryan O'Sullivan</a>.
139 href="http://www.serpentine.com/blog">Bryan O'Sullivan</a>.
140 </p>
140 </p>
141
141
142 <p>
142 <p>
143 Mercurial is Copyright 2005-2018 Matt Mackall and others. See
143 Mercurial is Copyright 2005-2019 Matt Mackall and others. See
144 the <tt>Contributors.txt</tt> file for a list of contributors.
144 the <tt>Contributors.txt</tt> file for a list of contributors.
145 </p>
145 </p>
146
146
147 <p>
147 <p>
148 Mercurial is free software; you can redistribute it and/or
148 Mercurial is free software; you can redistribute it and/or
149 modify it under the terms of the <a
149 modify it under the terms of the <a
150 href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GNU
150 href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GNU
151 General Public License version 2</a> or any later version.
151 General Public License version 2</a> or any later version.
152 </p>
152 </p>
153
153
154 <p>
154 <p>
155 Mercurial is distributed in the hope that it will be useful, but
155 Mercurial is distributed in the hope that it will be useful, but
156 <b>without any warranty</b>; without even the implied warranty
156 <b>without any warranty</b>; without even the implied warranty
157 of <b>merchantability</b> or <b>fitness for a particular
157 of <b>merchantability</b> or <b>fitness for a particular
158 purpose</b>. See the GNU General Public License for more
158 purpose</b>. See the GNU General Public License for more
159 details.
159 details.
160 </p>
160 </p>
161 </body>
161 </body>
162 </html>
162 </html>
@@ -1,120 +1,120 b''
1 ; Script generated by the Inno Setup Script Wizard.
1 ; Script generated by the Inno Setup Script Wizard.
2 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
2 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3
3
4 #ifndef VERSION
4 #ifndef VERSION
5 #define FileHandle
5 #define FileHandle
6 #define FileLine
6 #define FileLine
7 #define VERSION = "unknown"
7 #define VERSION = "unknown"
8 #if FileHandle = FileOpen(SourcePath + "\..\..\mercurial\__version__.py")
8 #if FileHandle = FileOpen(SourcePath + "\..\..\mercurial\__version__.py")
9 #expr FileLine = FileRead(FileHandle)
9 #expr FileLine = FileRead(FileHandle)
10 #expr FileLine = FileRead(FileHandle)
10 #expr FileLine = FileRead(FileHandle)
11 #define VERSION = Copy(FileLine, Pos('"', FileLine)+1, Len(FileLine)-Pos('"', FileLine)-1)
11 #define VERSION = Copy(FileLine, Pos('"', FileLine)+1, Len(FileLine)-Pos('"', FileLine)-1)
12 #endif
12 #endif
13 #if FileHandle
13 #if FileHandle
14 #expr FileClose(FileHandle)
14 #expr FileClose(FileHandle)
15 #endif
15 #endif
16 #pragma message "Detected Version: " + VERSION
16 #pragma message "Detected Version: " + VERSION
17 #endif
17 #endif
18
18
19 #ifndef ARCH
19 #ifndef ARCH
20 #define ARCH = "x86"
20 #define ARCH = "x86"
21 #endif
21 #endif
22
22
23 [Setup]
23 [Setup]
24 AppCopyright=Copyright 2005-2018 Matt Mackall and others
24 AppCopyright=Copyright 2005-2019 Matt Mackall and others
25 AppName=Mercurial
25 AppName=Mercurial
26 AppVersion={#VERSION}
26 AppVersion={#VERSION}
27 #if ARCH == "x64"
27 #if ARCH == "x64"
28 AppVerName=Mercurial {#VERSION} (64-bit)
28 AppVerName=Mercurial {#VERSION} (64-bit)
29 OutputBaseFilename=Mercurial-{#VERSION}-x64
29 OutputBaseFilename=Mercurial-{#VERSION}-x64
30 ArchitecturesAllowed=x64
30 ArchitecturesAllowed=x64
31 ArchitecturesInstallIn64BitMode=x64
31 ArchitecturesInstallIn64BitMode=x64
32 #else
32 #else
33 AppVerName=Mercurial {#VERSION}
33 AppVerName=Mercurial {#VERSION}
34 OutputBaseFilename=Mercurial-{#VERSION}
34 OutputBaseFilename=Mercurial-{#VERSION}
35 #endif
35 #endif
36 InfoAfterFile=contrib/win32/postinstall.txt
36 InfoAfterFile=contrib/win32/postinstall.txt
37 LicenseFile=COPYING
37 LicenseFile=COPYING
38 ShowLanguageDialog=yes
38 ShowLanguageDialog=yes
39 AppPublisher=Matt Mackall and others
39 AppPublisher=Matt Mackall and others
40 AppPublisherURL=https://mercurial-scm.org/
40 AppPublisherURL=https://mercurial-scm.org/
41 AppSupportURL=https://mercurial-scm.org/
41 AppSupportURL=https://mercurial-scm.org/
42 AppUpdatesURL=https://mercurial-scm.org/
42 AppUpdatesURL=https://mercurial-scm.org/
43 AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
43 AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
44 AppContact=mercurial@mercurial-scm.org
44 AppContact=mercurial@mercurial-scm.org
45 DefaultDirName={pf}\Mercurial
45 DefaultDirName={pf}\Mercurial
46 SourceDir=..\..
46 SourceDir=..\..
47 VersionInfoDescription=Mercurial distributed SCM (version {#VERSION})
47 VersionInfoDescription=Mercurial distributed SCM (version {#VERSION})
48 VersionInfoCopyright=Copyright 2005-2018 Matt Mackall and others
48 VersionInfoCopyright=Copyright 2005-2019 Matt Mackall and others
49 VersionInfoCompany=Matt Mackall and others
49 VersionInfoCompany=Matt Mackall and others
50 InternalCompressLevel=max
50 InternalCompressLevel=max
51 SolidCompression=true
51 SolidCompression=true
52 SetupIconFile=contrib\win32\mercurial.ico
52 SetupIconFile=contrib\win32\mercurial.ico
53 AllowNoIcons=true
53 AllowNoIcons=true
54 DefaultGroupName=Mercurial
54 DefaultGroupName=Mercurial
55 PrivilegesRequired=none
55 PrivilegesRequired=none
56
56
57 [Files]
57 [Files]
58 Source: contrib\mercurial.el; DestDir: {app}/Contrib
58 Source: contrib\mercurial.el; DestDir: {app}/Contrib
59 Source: contrib\vim\*.*; DestDir: {app}/Contrib/Vim
59 Source: contrib\vim\*.*; DestDir: {app}/Contrib/Vim
60 Source: contrib\zsh_completion; DestDir: {app}/Contrib
60 Source: contrib\zsh_completion; DestDir: {app}/Contrib
61 Source: contrib\bash_completion; DestDir: {app}/Contrib
61 Source: contrib\bash_completion; DestDir: {app}/Contrib
62 Source: contrib\tcsh_completion; DestDir: {app}/Contrib
62 Source: contrib\tcsh_completion; DestDir: {app}/Contrib
63 Source: contrib\tcsh_completion_build.sh; DestDir: {app}/Contrib
63 Source: contrib\tcsh_completion_build.sh; DestDir: {app}/Contrib
64 Source: contrib\hgk; DestDir: {app}/Contrib; DestName: hgk.tcl
64 Source: contrib\hgk; DestDir: {app}/Contrib; DestName: hgk.tcl
65 Source: contrib\xml.rnc; DestDir: {app}/Contrib
65 Source: contrib\xml.rnc; DestDir: {app}/Contrib
66 Source: contrib\mercurial.el; DestDir: {app}/Contrib
66 Source: contrib\mercurial.el; DestDir: {app}/Contrib
67 Source: contrib\mq.el; DestDir: {app}/Contrib
67 Source: contrib\mq.el; DestDir: {app}/Contrib
68 Source: contrib\hgweb.fcgi; DestDir: {app}/Contrib
68 Source: contrib\hgweb.fcgi; DestDir: {app}/Contrib
69 Source: contrib\hgweb.wsgi; DestDir: {app}/Contrib
69 Source: contrib\hgweb.wsgi; DestDir: {app}/Contrib
70 Source: contrib\win32\ReadMe.html; DestDir: {app}; Flags: isreadme
70 Source: contrib\win32\ReadMe.html; DestDir: {app}; Flags: isreadme
71 Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
71 Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
72 Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
72 Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
73 #if ARCH == "x64"
73 #if ARCH == "x64"
74 Source: dist\lib\*.dll; Destdir: {app}\lib
74 Source: dist\lib\*.dll; Destdir: {app}\lib
75 Source: dist\lib\*.pyd; Destdir: {app}\lib
75 Source: dist\lib\*.pyd; Destdir: {app}\lib
76 #else
76 #else
77 Source: dist\w9xpopen.exe; DestDir: {app}
77 Source: dist\w9xpopen.exe; DestDir: {app}
78 #endif
78 #endif
79 Source: dist\python*.dll; Destdir: {app}; Flags: skipifsourcedoesntexist
79 Source: dist\python*.dll; Destdir: {app}; Flags: skipifsourcedoesntexist
80 Source: dist\msvc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
80 Source: dist\msvc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
81 Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
81 Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
82 Source: dist\lib\library.zip; DestDir: {app}\lib
82 Source: dist\lib\library.zip; DestDir: {app}\lib
83 Source: dist\add_path.exe; DestDir: {app}
83 Source: dist\add_path.exe; DestDir: {app}
84 Source: doc\*.html; DestDir: {app}\Docs
84 Source: doc\*.html; DestDir: {app}\Docs
85 Source: doc\style.css; DestDir: {app}\Docs
85 Source: doc\style.css; DestDir: {app}\Docs
86 Source: mercurial\help\*.txt; DestDir: {app}\help
86 Source: mercurial\help\*.txt; DestDir: {app}\help
87 Source: mercurial\help\internals\*.txt; DestDir: {app}\help\internals
87 Source: mercurial\help\internals\*.txt; DestDir: {app}\help\internals
88 Source: mercurial\default.d\*.rc; DestDir: {app}\default.d
88 Source: mercurial\default.d\*.rc; DestDir: {app}\default.d
89 Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs skipifsourcedoesntexist
89 Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs skipifsourcedoesntexist
90 Source: mercurial\templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs
90 Source: mercurial\templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs
91 Source: CONTRIBUTORS; DestDir: {app}; DestName: Contributors.txt
91 Source: CONTRIBUTORS; DestDir: {app}; DestName: Contributors.txt
92 Source: COPYING; DestDir: {app}; DestName: Copying.txt
92 Source: COPYING; DestDir: {app}; DestName: Copying.txt
93
93
94 [INI]
94 [INI]
95 Filename: {app}\Mercurial.url; Section: InternetShortcut; Key: URL; String: https://mercurial-scm.org/
95 Filename: {app}\Mercurial.url; Section: InternetShortcut; Key: URL; String: https://mercurial-scm.org/
96 Filename: {app}\default.d\editor.rc; Section: ui; Key: editor; String: notepad
96 Filename: {app}\default.d\editor.rc; Section: ui; Key: editor; String: notepad
97
97
98 [UninstallDelete]
98 [UninstallDelete]
99 Type: files; Name: {app}\Mercurial.url
99 Type: files; Name: {app}\Mercurial.url
100 Type: filesandordirs; Name: {app}\default.d
100 Type: filesandordirs; Name: {app}\default.d
101 Type: files; Name: "{app}\hg.exe.local"
101 Type: files; Name: "{app}\hg.exe.local"
102
102
103 [Icons]
103 [Icons]
104 Name: {group}\Uninstall Mercurial; Filename: {uninstallexe}
104 Name: {group}\Uninstall Mercurial; Filename: {uninstallexe}
105 Name: {group}\Mercurial Command Reference; Filename: {app}\Docs\hg.1.html
105 Name: {group}\Mercurial Command Reference; Filename: {app}\Docs\hg.1.html
106 Name: {group}\Mercurial Configuration Files; Filename: {app}\Docs\hgrc.5.html
106 Name: {group}\Mercurial Configuration Files; Filename: {app}\Docs\hgrc.5.html
107 Name: {group}\Mercurial Ignore Files; Filename: {app}\Docs\hgignore.5.html
107 Name: {group}\Mercurial Ignore Files; Filename: {app}\Docs\hgignore.5.html
108 Name: {group}\Mercurial Web Site; Filename: {app}\Mercurial.url
108 Name: {group}\Mercurial Web Site; Filename: {app}\Mercurial.url
109
109
110 [Run]
110 [Run]
111 Filename: "{app}\add_path.exe"; Parameters: "{app}"; Flags: postinstall; Description: "Add the installation path to the search path"
111 Filename: "{app}\add_path.exe"; Parameters: "{app}"; Flags: postinstall; Description: "Add the installation path to the search path"
112
112
113 [UninstallRun]
113 [UninstallRun]
114 Filename: "{app}\add_path.exe"; Parameters: "/del {app}"
114 Filename: "{app}\add_path.exe"; Parameters: "/del {app}"
115
115
116 [Code]
116 [Code]
117 procedure Touch(fn: String);
117 procedure Touch(fn: String);
118 begin
118 begin
119 SaveStringToFile(ExpandConstant(fn), '', False);
119 SaveStringToFile(ExpandConstant(fn), '', False);
120 end;
120 end;
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,6227 +1,6227 b''
1 # commands.py - command processing for mercurial
1 # commands.py - command processing for mercurial
2 #
2 #
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2007 Matt Mackall <mpm@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 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import difflib
10 import difflib
11 import errno
11 import errno
12 import os
12 import os
13 import re
13 import re
14 import sys
14 import sys
15
15
16 from .i18n import _
16 from .i18n import _
17 from .node import (
17 from .node import (
18 hex,
18 hex,
19 nullid,
19 nullid,
20 nullrev,
20 nullrev,
21 short,
21 short,
22 wdirhex,
22 wdirhex,
23 wdirrev,
23 wdirrev,
24 )
24 )
25 from . import (
25 from . import (
26 archival,
26 archival,
27 bookmarks,
27 bookmarks,
28 bundle2,
28 bundle2,
29 changegroup,
29 changegroup,
30 cmdutil,
30 cmdutil,
31 copies,
31 copies,
32 debugcommands as debugcommandsmod,
32 debugcommands as debugcommandsmod,
33 destutil,
33 destutil,
34 dirstateguard,
34 dirstateguard,
35 discovery,
35 discovery,
36 encoding,
36 encoding,
37 error,
37 error,
38 exchange,
38 exchange,
39 extensions,
39 extensions,
40 filemerge,
40 filemerge,
41 formatter,
41 formatter,
42 graphmod,
42 graphmod,
43 hbisect,
43 hbisect,
44 help,
44 help,
45 hg,
45 hg,
46 logcmdutil,
46 logcmdutil,
47 merge as mergemod,
47 merge as mergemod,
48 narrowspec,
48 narrowspec,
49 obsolete,
49 obsolete,
50 obsutil,
50 obsutil,
51 patch,
51 patch,
52 phases,
52 phases,
53 pycompat,
53 pycompat,
54 rcutil,
54 rcutil,
55 registrar,
55 registrar,
56 repair,
56 repair,
57 revsetlang,
57 revsetlang,
58 rewriteutil,
58 rewriteutil,
59 scmutil,
59 scmutil,
60 server,
60 server,
61 state as statemod,
61 state as statemod,
62 streamclone,
62 streamclone,
63 tags as tagsmod,
63 tags as tagsmod,
64 templatekw,
64 templatekw,
65 ui as uimod,
65 ui as uimod,
66 util,
66 util,
67 wireprotoserver,
67 wireprotoserver,
68 )
68 )
69 from .utils import (
69 from .utils import (
70 dateutil,
70 dateutil,
71 stringutil,
71 stringutil,
72 )
72 )
73
73
74 table = {}
74 table = {}
75 table.update(debugcommandsmod.command._table)
75 table.update(debugcommandsmod.command._table)
76
76
77 command = registrar.command(table)
77 command = registrar.command(table)
78 INTENT_READONLY = registrar.INTENT_READONLY
78 INTENT_READONLY = registrar.INTENT_READONLY
79
79
80 # common command options
80 # common command options
81
81
82 globalopts = [
82 globalopts = [
83 ('R', 'repository', '',
83 ('R', 'repository', '',
84 _('repository root directory or name of overlay bundle file'),
84 _('repository root directory or name of overlay bundle file'),
85 _('REPO')),
85 _('REPO')),
86 ('', 'cwd', '',
86 ('', 'cwd', '',
87 _('change working directory'), _('DIR')),
87 _('change working directory'), _('DIR')),
88 ('y', 'noninteractive', None,
88 ('y', 'noninteractive', None,
89 _('do not prompt, automatically pick the first choice for all prompts')),
89 _('do not prompt, automatically pick the first choice for all prompts')),
90 ('q', 'quiet', None, _('suppress output')),
90 ('q', 'quiet', None, _('suppress output')),
91 ('v', 'verbose', None, _('enable additional output')),
91 ('v', 'verbose', None, _('enable additional output')),
92 ('', 'color', '',
92 ('', 'color', '',
93 # i18n: 'always', 'auto', 'never', and 'debug' are keywords
93 # i18n: 'always', 'auto', 'never', and 'debug' are keywords
94 # and should not be translated
94 # and should not be translated
95 _("when to colorize (boolean, always, auto, never, or debug)"),
95 _("when to colorize (boolean, always, auto, never, or debug)"),
96 _('TYPE')),
96 _('TYPE')),
97 ('', 'config', [],
97 ('', 'config', [],
98 _('set/override config option (use \'section.name=value\')'),
98 _('set/override config option (use \'section.name=value\')'),
99 _('CONFIG')),
99 _('CONFIG')),
100 ('', 'debug', None, _('enable debugging output')),
100 ('', 'debug', None, _('enable debugging output')),
101 ('', 'debugger', None, _('start debugger')),
101 ('', 'debugger', None, _('start debugger')),
102 ('', 'encoding', encoding.encoding, _('set the charset encoding'),
102 ('', 'encoding', encoding.encoding, _('set the charset encoding'),
103 _('ENCODE')),
103 _('ENCODE')),
104 ('', 'encodingmode', encoding.encodingmode,
104 ('', 'encodingmode', encoding.encodingmode,
105 _('set the charset encoding mode'), _('MODE')),
105 _('set the charset encoding mode'), _('MODE')),
106 ('', 'traceback', None, _('always print a traceback on exception')),
106 ('', 'traceback', None, _('always print a traceback on exception')),
107 ('', 'time', None, _('time how long the command takes')),
107 ('', 'time', None, _('time how long the command takes')),
108 ('', 'profile', None, _('print command execution profile')),
108 ('', 'profile', None, _('print command execution profile')),
109 ('', 'version', None, _('output version information and exit')),
109 ('', 'version', None, _('output version information and exit')),
110 ('h', 'help', None, _('display help and exit')),
110 ('h', 'help', None, _('display help and exit')),
111 ('', 'hidden', False, _('consider hidden changesets')),
111 ('', 'hidden', False, _('consider hidden changesets')),
112 ('', 'pager', 'auto',
112 ('', 'pager', 'auto',
113 _("when to paginate (boolean, always, auto, or never)"), _('TYPE')),
113 _("when to paginate (boolean, always, auto, or never)"), _('TYPE')),
114 ]
114 ]
115
115
116 dryrunopts = cmdutil.dryrunopts
116 dryrunopts = cmdutil.dryrunopts
117 remoteopts = cmdutil.remoteopts
117 remoteopts = cmdutil.remoteopts
118 walkopts = cmdutil.walkopts
118 walkopts = cmdutil.walkopts
119 commitopts = cmdutil.commitopts
119 commitopts = cmdutil.commitopts
120 commitopts2 = cmdutil.commitopts2
120 commitopts2 = cmdutil.commitopts2
121 formatteropts = cmdutil.formatteropts
121 formatteropts = cmdutil.formatteropts
122 templateopts = cmdutil.templateopts
122 templateopts = cmdutil.templateopts
123 logopts = cmdutil.logopts
123 logopts = cmdutil.logopts
124 diffopts = cmdutil.diffopts
124 diffopts = cmdutil.diffopts
125 diffwsopts = cmdutil.diffwsopts
125 diffwsopts = cmdutil.diffwsopts
126 diffopts2 = cmdutil.diffopts2
126 diffopts2 = cmdutil.diffopts2
127 mergetoolopts = cmdutil.mergetoolopts
127 mergetoolopts = cmdutil.mergetoolopts
128 similarityopts = cmdutil.similarityopts
128 similarityopts = cmdutil.similarityopts
129 subrepoopts = cmdutil.subrepoopts
129 subrepoopts = cmdutil.subrepoopts
130 debugrevlogopts = cmdutil.debugrevlogopts
130 debugrevlogopts = cmdutil.debugrevlogopts
131
131
132 # Commands start here, listed alphabetically
132 # Commands start here, listed alphabetically
133
133
134 @command('add',
134 @command('add',
135 walkopts + subrepoopts + dryrunopts,
135 walkopts + subrepoopts + dryrunopts,
136 _('[OPTION]... [FILE]...'),
136 _('[OPTION]... [FILE]...'),
137 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
137 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
138 helpbasic=True, inferrepo=True)
138 helpbasic=True, inferrepo=True)
139 def add(ui, repo, *pats, **opts):
139 def add(ui, repo, *pats, **opts):
140 """add the specified files on the next commit
140 """add the specified files on the next commit
141
141
142 Schedule files to be version controlled and added to the
142 Schedule files to be version controlled and added to the
143 repository.
143 repository.
144
144
145 The files will be added to the repository at the next commit. To
145 The files will be added to the repository at the next commit. To
146 undo an add before that, see :hg:`forget`.
146 undo an add before that, see :hg:`forget`.
147
147
148 If no names are given, add all files to the repository (except
148 If no names are given, add all files to the repository (except
149 files matching ``.hgignore``).
149 files matching ``.hgignore``).
150
150
151 .. container:: verbose
151 .. container:: verbose
152
152
153 Examples:
153 Examples:
154
154
155 - New (unknown) files are added
155 - New (unknown) files are added
156 automatically by :hg:`add`::
156 automatically by :hg:`add`::
157
157
158 $ ls
158 $ ls
159 foo.c
159 foo.c
160 $ hg status
160 $ hg status
161 ? foo.c
161 ? foo.c
162 $ hg add
162 $ hg add
163 adding foo.c
163 adding foo.c
164 $ hg status
164 $ hg status
165 A foo.c
165 A foo.c
166
166
167 - Specific files to be added can be specified::
167 - Specific files to be added can be specified::
168
168
169 $ ls
169 $ ls
170 bar.c foo.c
170 bar.c foo.c
171 $ hg status
171 $ hg status
172 ? bar.c
172 ? bar.c
173 ? foo.c
173 ? foo.c
174 $ hg add bar.c
174 $ hg add bar.c
175 $ hg status
175 $ hg status
176 A bar.c
176 A bar.c
177 ? foo.c
177 ? foo.c
178
178
179 Returns 0 if all files are successfully added.
179 Returns 0 if all files are successfully added.
180 """
180 """
181
181
182 m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts))
182 m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts))
183 rejected = cmdutil.add(ui, repo, m, "", False, **opts)
183 rejected = cmdutil.add(ui, repo, m, "", False, **opts)
184 return rejected and 1 or 0
184 return rejected and 1 or 0
185
185
186 @command('addremove',
186 @command('addremove',
187 similarityopts + subrepoopts + walkopts + dryrunopts,
187 similarityopts + subrepoopts + walkopts + dryrunopts,
188 _('[OPTION]... [FILE]...'),
188 _('[OPTION]... [FILE]...'),
189 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
189 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
190 inferrepo=True)
190 inferrepo=True)
191 def addremove(ui, repo, *pats, **opts):
191 def addremove(ui, repo, *pats, **opts):
192 """add all new files, delete all missing files
192 """add all new files, delete all missing files
193
193
194 Add all new files and remove all missing files from the
194 Add all new files and remove all missing files from the
195 repository.
195 repository.
196
196
197 Unless names are given, new files are ignored if they match any of
197 Unless names are given, new files are ignored if they match any of
198 the patterns in ``.hgignore``. As with add, these changes take
198 the patterns in ``.hgignore``. As with add, these changes take
199 effect at the next commit.
199 effect at the next commit.
200
200
201 Use the -s/--similarity option to detect renamed files. This
201 Use the -s/--similarity option to detect renamed files. This
202 option takes a percentage between 0 (disabled) and 100 (files must
202 option takes a percentage between 0 (disabled) and 100 (files must
203 be identical) as its parameter. With a parameter greater than 0,
203 be identical) as its parameter. With a parameter greater than 0,
204 this compares every removed file with every added file and records
204 this compares every removed file with every added file and records
205 those similar enough as renames. Detecting renamed files this way
205 those similar enough as renames. Detecting renamed files this way
206 can be expensive. After using this option, :hg:`status -C` can be
206 can be expensive. After using this option, :hg:`status -C` can be
207 used to check which files were identified as moved or renamed. If
207 used to check which files were identified as moved or renamed. If
208 not specified, -s/--similarity defaults to 100 and only renames of
208 not specified, -s/--similarity defaults to 100 and only renames of
209 identical files are detected.
209 identical files are detected.
210
210
211 .. container:: verbose
211 .. container:: verbose
212
212
213 Examples:
213 Examples:
214
214
215 - A number of files (bar.c and foo.c) are new,
215 - A number of files (bar.c and foo.c) are new,
216 while foobar.c has been removed (without using :hg:`remove`)
216 while foobar.c has been removed (without using :hg:`remove`)
217 from the repository::
217 from the repository::
218
218
219 $ ls
219 $ ls
220 bar.c foo.c
220 bar.c foo.c
221 $ hg status
221 $ hg status
222 ! foobar.c
222 ! foobar.c
223 ? bar.c
223 ? bar.c
224 ? foo.c
224 ? foo.c
225 $ hg addremove
225 $ hg addremove
226 adding bar.c
226 adding bar.c
227 adding foo.c
227 adding foo.c
228 removing foobar.c
228 removing foobar.c
229 $ hg status
229 $ hg status
230 A bar.c
230 A bar.c
231 A foo.c
231 A foo.c
232 R foobar.c
232 R foobar.c
233
233
234 - A file foobar.c was moved to foo.c without using :hg:`rename`.
234 - A file foobar.c was moved to foo.c without using :hg:`rename`.
235 Afterwards, it was edited slightly::
235 Afterwards, it was edited slightly::
236
236
237 $ ls
237 $ ls
238 foo.c
238 foo.c
239 $ hg status
239 $ hg status
240 ! foobar.c
240 ! foobar.c
241 ? foo.c
241 ? foo.c
242 $ hg addremove --similarity 90
242 $ hg addremove --similarity 90
243 removing foobar.c
243 removing foobar.c
244 adding foo.c
244 adding foo.c
245 recording removal of foobar.c as rename to foo.c (94% similar)
245 recording removal of foobar.c as rename to foo.c (94% similar)
246 $ hg status -C
246 $ hg status -C
247 A foo.c
247 A foo.c
248 foobar.c
248 foobar.c
249 R foobar.c
249 R foobar.c
250
250
251 Returns 0 if all files are successfully added.
251 Returns 0 if all files are successfully added.
252 """
252 """
253 opts = pycompat.byteskwargs(opts)
253 opts = pycompat.byteskwargs(opts)
254 if not opts.get('similarity'):
254 if not opts.get('similarity'):
255 opts['similarity'] = '100'
255 opts['similarity'] = '100'
256 matcher = scmutil.match(repo[None], pats, opts)
256 matcher = scmutil.match(repo[None], pats, opts)
257 return scmutil.addremove(repo, matcher, "", opts)
257 return scmutil.addremove(repo, matcher, "", opts)
258
258
259 @command('annotate|blame',
259 @command('annotate|blame',
260 [('r', 'rev', '', _('annotate the specified revision'), _('REV')),
260 [('r', 'rev', '', _('annotate the specified revision'), _('REV')),
261 ('', 'follow', None,
261 ('', 'follow', None,
262 _('follow copies/renames and list the filename (DEPRECATED)')),
262 _('follow copies/renames and list the filename (DEPRECATED)')),
263 ('', 'no-follow', None, _("don't follow copies and renames")),
263 ('', 'no-follow', None, _("don't follow copies and renames")),
264 ('a', 'text', None, _('treat all files as text')),
264 ('a', 'text', None, _('treat all files as text')),
265 ('u', 'user', None, _('list the author (long with -v)')),
265 ('u', 'user', None, _('list the author (long with -v)')),
266 ('f', 'file', None, _('list the filename')),
266 ('f', 'file', None, _('list the filename')),
267 ('d', 'date', None, _('list the date (short with -q)')),
267 ('d', 'date', None, _('list the date (short with -q)')),
268 ('n', 'number', None, _('list the revision number (default)')),
268 ('n', 'number', None, _('list the revision number (default)')),
269 ('c', 'changeset', None, _('list the changeset')),
269 ('c', 'changeset', None, _('list the changeset')),
270 ('l', 'line-number', None, _('show line number at the first appearance')),
270 ('l', 'line-number', None, _('show line number at the first appearance')),
271 ('', 'skip', [], _('revision to not display (EXPERIMENTAL)'), _('REV')),
271 ('', 'skip', [], _('revision to not display (EXPERIMENTAL)'), _('REV')),
272 ] + diffwsopts + walkopts + formatteropts,
272 ] + diffwsopts + walkopts + formatteropts,
273 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...'),
273 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...'),
274 helpcategory=command.CATEGORY_FILE_CONTENTS,
274 helpcategory=command.CATEGORY_FILE_CONTENTS,
275 helpbasic=True, inferrepo=True)
275 helpbasic=True, inferrepo=True)
276 def annotate(ui, repo, *pats, **opts):
276 def annotate(ui, repo, *pats, **opts):
277 """show changeset information by line for each file
277 """show changeset information by line for each file
278
278
279 List changes in files, showing the revision id responsible for
279 List changes in files, showing the revision id responsible for
280 each line.
280 each line.
281
281
282 This command is useful for discovering when a change was made and
282 This command is useful for discovering when a change was made and
283 by whom.
283 by whom.
284
284
285 If you include --file, --user, or --date, the revision number is
285 If you include --file, --user, or --date, the revision number is
286 suppressed unless you also include --number.
286 suppressed unless you also include --number.
287
287
288 Without the -a/--text option, annotate will avoid processing files
288 Without the -a/--text option, annotate will avoid processing files
289 it detects as binary. With -a, annotate will annotate the file
289 it detects as binary. With -a, annotate will annotate the file
290 anyway, although the results will probably be neither useful
290 anyway, although the results will probably be neither useful
291 nor desirable.
291 nor desirable.
292
292
293 .. container:: verbose
293 .. container:: verbose
294
294
295 Template:
295 Template:
296
296
297 The following keywords are supported in addition to the common template
297 The following keywords are supported in addition to the common template
298 keywords and functions. See also :hg:`help templates`.
298 keywords and functions. See also :hg:`help templates`.
299
299
300 :lines: List of lines with annotation data.
300 :lines: List of lines with annotation data.
301 :path: String. Repository-absolute path of the specified file.
301 :path: String. Repository-absolute path of the specified file.
302
302
303 And each entry of ``{lines}`` provides the following sub-keywords in
303 And each entry of ``{lines}`` provides the following sub-keywords in
304 addition to ``{date}``, ``{node}``, ``{rev}``, ``{user}``, etc.
304 addition to ``{date}``, ``{node}``, ``{rev}``, ``{user}``, etc.
305
305
306 :line: String. Line content.
306 :line: String. Line content.
307 :lineno: Integer. Line number at that revision.
307 :lineno: Integer. Line number at that revision.
308 :path: String. Repository-absolute path of the file at that revision.
308 :path: String. Repository-absolute path of the file at that revision.
309
309
310 See :hg:`help templates.operators` for the list expansion syntax.
310 See :hg:`help templates.operators` for the list expansion syntax.
311
311
312 Returns 0 on success.
312 Returns 0 on success.
313 """
313 """
314 opts = pycompat.byteskwargs(opts)
314 opts = pycompat.byteskwargs(opts)
315 if not pats:
315 if not pats:
316 raise error.Abort(_('at least one filename or pattern is required'))
316 raise error.Abort(_('at least one filename or pattern is required'))
317
317
318 if opts.get('follow'):
318 if opts.get('follow'):
319 # --follow is deprecated and now just an alias for -f/--file
319 # --follow is deprecated and now just an alias for -f/--file
320 # to mimic the behavior of Mercurial before version 1.5
320 # to mimic the behavior of Mercurial before version 1.5
321 opts['file'] = True
321 opts['file'] = True
322
322
323 if (not opts.get('user') and not opts.get('changeset')
323 if (not opts.get('user') and not opts.get('changeset')
324 and not opts.get('date') and not opts.get('file')):
324 and not opts.get('date') and not opts.get('file')):
325 opts['number'] = True
325 opts['number'] = True
326
326
327 linenumber = opts.get('line_number') is not None
327 linenumber = opts.get('line_number') is not None
328 if linenumber and (not opts.get('changeset')) and (not opts.get('number')):
328 if linenumber and (not opts.get('changeset')) and (not opts.get('number')):
329 raise error.Abort(_('at least one of -n/-c is required for -l'))
329 raise error.Abort(_('at least one of -n/-c is required for -l'))
330
330
331 rev = opts.get('rev')
331 rev = opts.get('rev')
332 if rev:
332 if rev:
333 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
333 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
334 ctx = scmutil.revsingle(repo, rev)
334 ctx = scmutil.revsingle(repo, rev)
335
335
336 ui.pager('annotate')
336 ui.pager('annotate')
337 rootfm = ui.formatter('annotate', opts)
337 rootfm = ui.formatter('annotate', opts)
338 if ui.debugflag:
338 if ui.debugflag:
339 shorthex = pycompat.identity
339 shorthex = pycompat.identity
340 else:
340 else:
341 def shorthex(h):
341 def shorthex(h):
342 return h[:12]
342 return h[:12]
343 if ui.quiet:
343 if ui.quiet:
344 datefunc = dateutil.shortdate
344 datefunc = dateutil.shortdate
345 else:
345 else:
346 datefunc = dateutil.datestr
346 datefunc = dateutil.datestr
347 if ctx.rev() is None:
347 if ctx.rev() is None:
348 if opts.get('changeset'):
348 if opts.get('changeset'):
349 # omit "+" suffix which is appended to node hex
349 # omit "+" suffix which is appended to node hex
350 def formatrev(rev):
350 def formatrev(rev):
351 if rev == wdirrev:
351 if rev == wdirrev:
352 return '%d' % ctx.p1().rev()
352 return '%d' % ctx.p1().rev()
353 else:
353 else:
354 return '%d' % rev
354 return '%d' % rev
355 else:
355 else:
356 def formatrev(rev):
356 def formatrev(rev):
357 if rev == wdirrev:
357 if rev == wdirrev:
358 return '%d+' % ctx.p1().rev()
358 return '%d+' % ctx.p1().rev()
359 else:
359 else:
360 return '%d ' % rev
360 return '%d ' % rev
361 def formathex(h):
361 def formathex(h):
362 if h == wdirhex:
362 if h == wdirhex:
363 return '%s+' % shorthex(hex(ctx.p1().node()))
363 return '%s+' % shorthex(hex(ctx.p1().node()))
364 else:
364 else:
365 return '%s ' % shorthex(h)
365 return '%s ' % shorthex(h)
366 else:
366 else:
367 formatrev = b'%d'.__mod__
367 formatrev = b'%d'.__mod__
368 formathex = shorthex
368 formathex = shorthex
369
369
370 opmap = [
370 opmap = [
371 ('user', ' ', lambda x: x.fctx.user(), ui.shortuser),
371 ('user', ' ', lambda x: x.fctx.user(), ui.shortuser),
372 ('rev', ' ', lambda x: scmutil.intrev(x.fctx), formatrev),
372 ('rev', ' ', lambda x: scmutil.intrev(x.fctx), formatrev),
373 ('node', ' ', lambda x: hex(scmutil.binnode(x.fctx)), formathex),
373 ('node', ' ', lambda x: hex(scmutil.binnode(x.fctx)), formathex),
374 ('date', ' ', lambda x: x.fctx.date(), util.cachefunc(datefunc)),
374 ('date', ' ', lambda x: x.fctx.date(), util.cachefunc(datefunc)),
375 ('path', ' ', lambda x: x.fctx.path(), pycompat.bytestr),
375 ('path', ' ', lambda x: x.fctx.path(), pycompat.bytestr),
376 ('lineno', ':', lambda x: x.lineno, pycompat.bytestr),
376 ('lineno', ':', lambda x: x.lineno, pycompat.bytestr),
377 ]
377 ]
378 opnamemap = {
378 opnamemap = {
379 'rev': 'number',
379 'rev': 'number',
380 'node': 'changeset',
380 'node': 'changeset',
381 'path': 'file',
381 'path': 'file',
382 'lineno': 'line_number',
382 'lineno': 'line_number',
383 }
383 }
384
384
385 if rootfm.isplain():
385 if rootfm.isplain():
386 def makefunc(get, fmt):
386 def makefunc(get, fmt):
387 return lambda x: fmt(get(x))
387 return lambda x: fmt(get(x))
388 else:
388 else:
389 def makefunc(get, fmt):
389 def makefunc(get, fmt):
390 return get
390 return get
391 datahint = rootfm.datahint()
391 datahint = rootfm.datahint()
392 funcmap = [(makefunc(get, fmt), sep) for fn, sep, get, fmt in opmap
392 funcmap = [(makefunc(get, fmt), sep) for fn, sep, get, fmt in opmap
393 if opts.get(opnamemap.get(fn, fn)) or fn in datahint]
393 if opts.get(opnamemap.get(fn, fn)) or fn in datahint]
394 funcmap[0] = (funcmap[0][0], '') # no separator in front of first column
394 funcmap[0] = (funcmap[0][0], '') # no separator in front of first column
395 fields = ' '.join(fn for fn, sep, get, fmt in opmap
395 fields = ' '.join(fn for fn, sep, get, fmt in opmap
396 if opts.get(opnamemap.get(fn, fn)) or fn in datahint)
396 if opts.get(opnamemap.get(fn, fn)) or fn in datahint)
397
397
398 def bad(x, y):
398 def bad(x, y):
399 raise error.Abort("%s: %s" % (x, y))
399 raise error.Abort("%s: %s" % (x, y))
400
400
401 m = scmutil.match(ctx, pats, opts, badfn=bad)
401 m = scmutil.match(ctx, pats, opts, badfn=bad)
402
402
403 follow = not opts.get('no_follow')
403 follow = not opts.get('no_follow')
404 diffopts = patch.difffeatureopts(ui, opts, section='annotate',
404 diffopts = patch.difffeatureopts(ui, opts, section='annotate',
405 whitespace=True)
405 whitespace=True)
406 skiprevs = opts.get('skip')
406 skiprevs = opts.get('skip')
407 if skiprevs:
407 if skiprevs:
408 skiprevs = scmutil.revrange(repo, skiprevs)
408 skiprevs = scmutil.revrange(repo, skiprevs)
409
409
410 for abs in ctx.walk(m):
410 for abs in ctx.walk(m):
411 fctx = ctx[abs]
411 fctx = ctx[abs]
412 rootfm.startitem()
412 rootfm.startitem()
413 rootfm.data(path=abs)
413 rootfm.data(path=abs)
414 if not opts.get('text') and fctx.isbinary():
414 if not opts.get('text') and fctx.isbinary():
415 rootfm.plain(_("%s: binary file\n") % m.rel(abs))
415 rootfm.plain(_("%s: binary file\n") % m.rel(abs))
416 continue
416 continue
417
417
418 fm = rootfm.nested('lines', tmpl='{rev}: {line}')
418 fm = rootfm.nested('lines', tmpl='{rev}: {line}')
419 lines = fctx.annotate(follow=follow, skiprevs=skiprevs,
419 lines = fctx.annotate(follow=follow, skiprevs=skiprevs,
420 diffopts=diffopts)
420 diffopts=diffopts)
421 if not lines:
421 if not lines:
422 fm.end()
422 fm.end()
423 continue
423 continue
424 formats = []
424 formats = []
425 pieces = []
425 pieces = []
426
426
427 for f, sep in funcmap:
427 for f, sep in funcmap:
428 l = [f(n) for n in lines]
428 l = [f(n) for n in lines]
429 if fm.isplain():
429 if fm.isplain():
430 sizes = [encoding.colwidth(x) for x in l]
430 sizes = [encoding.colwidth(x) for x in l]
431 ml = max(sizes)
431 ml = max(sizes)
432 formats.append([sep + ' ' * (ml - w) + '%s' for w in sizes])
432 formats.append([sep + ' ' * (ml - w) + '%s' for w in sizes])
433 else:
433 else:
434 formats.append(['%s' for x in l])
434 formats.append(['%s' for x in l])
435 pieces.append(l)
435 pieces.append(l)
436
436
437 for f, p, n in zip(zip(*formats), zip(*pieces), lines):
437 for f, p, n in zip(zip(*formats), zip(*pieces), lines):
438 fm.startitem()
438 fm.startitem()
439 fm.context(fctx=n.fctx)
439 fm.context(fctx=n.fctx)
440 fm.write(fields, "".join(f), *p)
440 fm.write(fields, "".join(f), *p)
441 if n.skip:
441 if n.skip:
442 fmt = "* %s"
442 fmt = "* %s"
443 else:
443 else:
444 fmt = ": %s"
444 fmt = ": %s"
445 fm.write('line', fmt, n.text)
445 fm.write('line', fmt, n.text)
446
446
447 if not lines[-1].text.endswith('\n'):
447 if not lines[-1].text.endswith('\n'):
448 fm.plain('\n')
448 fm.plain('\n')
449 fm.end()
449 fm.end()
450
450
451 rootfm.end()
451 rootfm.end()
452
452
453 @command('archive',
453 @command('archive',
454 [('', 'no-decode', None, _('do not pass files through decoders')),
454 [('', 'no-decode', None, _('do not pass files through decoders')),
455 ('p', 'prefix', '', _('directory prefix for files in archive'),
455 ('p', 'prefix', '', _('directory prefix for files in archive'),
456 _('PREFIX')),
456 _('PREFIX')),
457 ('r', 'rev', '', _('revision to distribute'), _('REV')),
457 ('r', 'rev', '', _('revision to distribute'), _('REV')),
458 ('t', 'type', '', _('type of distribution to create'), _('TYPE')),
458 ('t', 'type', '', _('type of distribution to create'), _('TYPE')),
459 ] + subrepoopts + walkopts,
459 ] + subrepoopts + walkopts,
460 _('[OPTION]... DEST'),
460 _('[OPTION]... DEST'),
461 helpcategory=command.CATEGORY_IMPORT_EXPORT)
461 helpcategory=command.CATEGORY_IMPORT_EXPORT)
462 def archive(ui, repo, dest, **opts):
462 def archive(ui, repo, dest, **opts):
463 '''create an unversioned archive of a repository revision
463 '''create an unversioned archive of a repository revision
464
464
465 By default, the revision used is the parent of the working
465 By default, the revision used is the parent of the working
466 directory; use -r/--rev to specify a different revision.
466 directory; use -r/--rev to specify a different revision.
467
467
468 The archive type is automatically detected based on file
468 The archive type is automatically detected based on file
469 extension (to override, use -t/--type).
469 extension (to override, use -t/--type).
470
470
471 .. container:: verbose
471 .. container:: verbose
472
472
473 Examples:
473 Examples:
474
474
475 - create a zip file containing the 1.0 release::
475 - create a zip file containing the 1.0 release::
476
476
477 hg archive -r 1.0 project-1.0.zip
477 hg archive -r 1.0 project-1.0.zip
478
478
479 - create a tarball excluding .hg files::
479 - create a tarball excluding .hg files::
480
480
481 hg archive project.tar.gz -X ".hg*"
481 hg archive project.tar.gz -X ".hg*"
482
482
483 Valid types are:
483 Valid types are:
484
484
485 :``files``: a directory full of files (default)
485 :``files``: a directory full of files (default)
486 :``tar``: tar archive, uncompressed
486 :``tar``: tar archive, uncompressed
487 :``tbz2``: tar archive, compressed using bzip2
487 :``tbz2``: tar archive, compressed using bzip2
488 :``tgz``: tar archive, compressed using gzip
488 :``tgz``: tar archive, compressed using gzip
489 :``uzip``: zip archive, uncompressed
489 :``uzip``: zip archive, uncompressed
490 :``zip``: zip archive, compressed using deflate
490 :``zip``: zip archive, compressed using deflate
491
491
492 The exact name of the destination archive or directory is given
492 The exact name of the destination archive or directory is given
493 using a format string; see :hg:`help export` for details.
493 using a format string; see :hg:`help export` for details.
494
494
495 Each member added to an archive file has a directory prefix
495 Each member added to an archive file has a directory prefix
496 prepended. Use -p/--prefix to specify a format string for the
496 prepended. Use -p/--prefix to specify a format string for the
497 prefix. The default is the basename of the archive, with suffixes
497 prefix. The default is the basename of the archive, with suffixes
498 removed.
498 removed.
499
499
500 Returns 0 on success.
500 Returns 0 on success.
501 '''
501 '''
502
502
503 opts = pycompat.byteskwargs(opts)
503 opts = pycompat.byteskwargs(opts)
504 rev = opts.get('rev')
504 rev = opts.get('rev')
505 if rev:
505 if rev:
506 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
506 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
507 ctx = scmutil.revsingle(repo, rev)
507 ctx = scmutil.revsingle(repo, rev)
508 if not ctx:
508 if not ctx:
509 raise error.Abort(_('no working directory: please specify a revision'))
509 raise error.Abort(_('no working directory: please specify a revision'))
510 node = ctx.node()
510 node = ctx.node()
511 dest = cmdutil.makefilename(ctx, dest)
511 dest = cmdutil.makefilename(ctx, dest)
512 if os.path.realpath(dest) == repo.root:
512 if os.path.realpath(dest) == repo.root:
513 raise error.Abort(_('repository root cannot be destination'))
513 raise error.Abort(_('repository root cannot be destination'))
514
514
515 kind = opts.get('type') or archival.guesskind(dest) or 'files'
515 kind = opts.get('type') or archival.guesskind(dest) or 'files'
516 prefix = opts.get('prefix')
516 prefix = opts.get('prefix')
517
517
518 if dest == '-':
518 if dest == '-':
519 if kind == 'files':
519 if kind == 'files':
520 raise error.Abort(_('cannot archive plain files to stdout'))
520 raise error.Abort(_('cannot archive plain files to stdout'))
521 dest = cmdutil.makefileobj(ctx, dest)
521 dest = cmdutil.makefileobj(ctx, dest)
522 if not prefix:
522 if not prefix:
523 prefix = os.path.basename(repo.root) + '-%h'
523 prefix = os.path.basename(repo.root) + '-%h'
524
524
525 prefix = cmdutil.makefilename(ctx, prefix)
525 prefix = cmdutil.makefilename(ctx, prefix)
526 match = scmutil.match(ctx, [], opts)
526 match = scmutil.match(ctx, [], opts)
527 archival.archive(repo, dest, node, kind, not opts.get('no_decode'),
527 archival.archive(repo, dest, node, kind, not opts.get('no_decode'),
528 match, prefix, subrepos=opts.get('subrepos'))
528 match, prefix, subrepos=opts.get('subrepos'))
529
529
530 @command('backout',
530 @command('backout',
531 [('', 'merge', None, _('merge with old dirstate parent after backout')),
531 [('', 'merge', None, _('merge with old dirstate parent after backout')),
532 ('', 'commit', None,
532 ('', 'commit', None,
533 _('commit if no conflicts were encountered (DEPRECATED)')),
533 _('commit if no conflicts were encountered (DEPRECATED)')),
534 ('', 'no-commit', None, _('do not commit')),
534 ('', 'no-commit', None, _('do not commit')),
535 ('', 'parent', '',
535 ('', 'parent', '',
536 _('parent to choose when backing out merge (DEPRECATED)'), _('REV')),
536 _('parent to choose when backing out merge (DEPRECATED)'), _('REV')),
537 ('r', 'rev', '', _('revision to backout'), _('REV')),
537 ('r', 'rev', '', _('revision to backout'), _('REV')),
538 ('e', 'edit', False, _('invoke editor on commit messages')),
538 ('e', 'edit', False, _('invoke editor on commit messages')),
539 ] + mergetoolopts + walkopts + commitopts + commitopts2,
539 ] + mergetoolopts + walkopts + commitopts + commitopts2,
540 _('[OPTION]... [-r] REV'),
540 _('[OPTION]... [-r] REV'),
541 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT)
541 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT)
542 def backout(ui, repo, node=None, rev=None, **opts):
542 def backout(ui, repo, node=None, rev=None, **opts):
543 '''reverse effect of earlier changeset
543 '''reverse effect of earlier changeset
544
544
545 Prepare a new changeset with the effect of REV undone in the
545 Prepare a new changeset with the effect of REV undone in the
546 current working directory. If no conflicts were encountered,
546 current working directory. If no conflicts were encountered,
547 it will be committed immediately.
547 it will be committed immediately.
548
548
549 If REV is the parent of the working directory, then this new changeset
549 If REV is the parent of the working directory, then this new changeset
550 is committed automatically (unless --no-commit is specified).
550 is committed automatically (unless --no-commit is specified).
551
551
552 .. note::
552 .. note::
553
553
554 :hg:`backout` cannot be used to fix either an unwanted or
554 :hg:`backout` cannot be used to fix either an unwanted or
555 incorrect merge.
555 incorrect merge.
556
556
557 .. container:: verbose
557 .. container:: verbose
558
558
559 Examples:
559 Examples:
560
560
561 - Reverse the effect of the parent of the working directory.
561 - Reverse the effect of the parent of the working directory.
562 This backout will be committed immediately::
562 This backout will be committed immediately::
563
563
564 hg backout -r .
564 hg backout -r .
565
565
566 - Reverse the effect of previous bad revision 23::
566 - Reverse the effect of previous bad revision 23::
567
567
568 hg backout -r 23
568 hg backout -r 23
569
569
570 - Reverse the effect of previous bad revision 23 and
570 - Reverse the effect of previous bad revision 23 and
571 leave changes uncommitted::
571 leave changes uncommitted::
572
572
573 hg backout -r 23 --no-commit
573 hg backout -r 23 --no-commit
574 hg commit -m "Backout revision 23"
574 hg commit -m "Backout revision 23"
575
575
576 By default, the pending changeset will have one parent,
576 By default, the pending changeset will have one parent,
577 maintaining a linear history. With --merge, the pending
577 maintaining a linear history. With --merge, the pending
578 changeset will instead have two parents: the old parent of the
578 changeset will instead have two parents: the old parent of the
579 working directory and a new child of REV that simply undoes REV.
579 working directory and a new child of REV that simply undoes REV.
580
580
581 Before version 1.7, the behavior without --merge was equivalent
581 Before version 1.7, the behavior without --merge was equivalent
582 to specifying --merge followed by :hg:`update --clean .` to
582 to specifying --merge followed by :hg:`update --clean .` to
583 cancel the merge and leave the child of REV as a head to be
583 cancel the merge and leave the child of REV as a head to be
584 merged separately.
584 merged separately.
585
585
586 See :hg:`help dates` for a list of formats valid for -d/--date.
586 See :hg:`help dates` for a list of formats valid for -d/--date.
587
587
588 See :hg:`help revert` for a way to restore files to the state
588 See :hg:`help revert` for a way to restore files to the state
589 of another revision.
589 of another revision.
590
590
591 Returns 0 on success, 1 if nothing to backout or there are unresolved
591 Returns 0 on success, 1 if nothing to backout or there are unresolved
592 files.
592 files.
593 '''
593 '''
594 with repo.wlock(), repo.lock():
594 with repo.wlock(), repo.lock():
595 return _dobackout(ui, repo, node, rev, **opts)
595 return _dobackout(ui, repo, node, rev, **opts)
596
596
597 def _dobackout(ui, repo, node=None, rev=None, **opts):
597 def _dobackout(ui, repo, node=None, rev=None, **opts):
598 opts = pycompat.byteskwargs(opts)
598 opts = pycompat.byteskwargs(opts)
599 if opts.get('commit') and opts.get('no_commit'):
599 if opts.get('commit') and opts.get('no_commit'):
600 raise error.Abort(_("cannot use --commit with --no-commit"))
600 raise error.Abort(_("cannot use --commit with --no-commit"))
601 if opts.get('merge') and opts.get('no_commit'):
601 if opts.get('merge') and opts.get('no_commit'):
602 raise error.Abort(_("cannot use --merge with --no-commit"))
602 raise error.Abort(_("cannot use --merge with --no-commit"))
603
603
604 if rev and node:
604 if rev and node:
605 raise error.Abort(_("please specify just one revision"))
605 raise error.Abort(_("please specify just one revision"))
606
606
607 if not rev:
607 if not rev:
608 rev = node
608 rev = node
609
609
610 if not rev:
610 if not rev:
611 raise error.Abort(_("please specify a revision to backout"))
611 raise error.Abort(_("please specify a revision to backout"))
612
612
613 date = opts.get('date')
613 date = opts.get('date')
614 if date:
614 if date:
615 opts['date'] = dateutil.parsedate(date)
615 opts['date'] = dateutil.parsedate(date)
616
616
617 cmdutil.checkunfinished(repo)
617 cmdutil.checkunfinished(repo)
618 cmdutil.bailifchanged(repo)
618 cmdutil.bailifchanged(repo)
619 node = scmutil.revsingle(repo, rev).node()
619 node = scmutil.revsingle(repo, rev).node()
620
620
621 op1, op2 = repo.dirstate.parents()
621 op1, op2 = repo.dirstate.parents()
622 if not repo.changelog.isancestor(node, op1):
622 if not repo.changelog.isancestor(node, op1):
623 raise error.Abort(_('cannot backout change that is not an ancestor'))
623 raise error.Abort(_('cannot backout change that is not an ancestor'))
624
624
625 p1, p2 = repo.changelog.parents(node)
625 p1, p2 = repo.changelog.parents(node)
626 if p1 == nullid:
626 if p1 == nullid:
627 raise error.Abort(_('cannot backout a change with no parents'))
627 raise error.Abort(_('cannot backout a change with no parents'))
628 if p2 != nullid:
628 if p2 != nullid:
629 if not opts.get('parent'):
629 if not opts.get('parent'):
630 raise error.Abort(_('cannot backout a merge changeset'))
630 raise error.Abort(_('cannot backout a merge changeset'))
631 p = repo.lookup(opts['parent'])
631 p = repo.lookup(opts['parent'])
632 if p not in (p1, p2):
632 if p not in (p1, p2):
633 raise error.Abort(_('%s is not a parent of %s') %
633 raise error.Abort(_('%s is not a parent of %s') %
634 (short(p), short(node)))
634 (short(p), short(node)))
635 parent = p
635 parent = p
636 else:
636 else:
637 if opts.get('parent'):
637 if opts.get('parent'):
638 raise error.Abort(_('cannot use --parent on non-merge changeset'))
638 raise error.Abort(_('cannot use --parent on non-merge changeset'))
639 parent = p1
639 parent = p1
640
640
641 # the backout should appear on the same branch
641 # the backout should appear on the same branch
642 branch = repo.dirstate.branch()
642 branch = repo.dirstate.branch()
643 bheads = repo.branchheads(branch)
643 bheads = repo.branchheads(branch)
644 rctx = scmutil.revsingle(repo, hex(parent))
644 rctx = scmutil.revsingle(repo, hex(parent))
645 if not opts.get('merge') and op1 != node:
645 if not opts.get('merge') and op1 != node:
646 with dirstateguard.dirstateguard(repo, 'backout'):
646 with dirstateguard.dirstateguard(repo, 'backout'):
647 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
647 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
648 with ui.configoverride(overrides, 'backout'):
648 with ui.configoverride(overrides, 'backout'):
649 stats = mergemod.update(repo, parent, branchmerge=True,
649 stats = mergemod.update(repo, parent, branchmerge=True,
650 force=True, ancestor=node,
650 force=True, ancestor=node,
651 mergeancestor=False)
651 mergeancestor=False)
652 repo.setparents(op1, op2)
652 repo.setparents(op1, op2)
653 hg._showstats(repo, stats)
653 hg._showstats(repo, stats)
654 if stats.unresolvedcount:
654 if stats.unresolvedcount:
655 repo.ui.status(_("use 'hg resolve' to retry unresolved "
655 repo.ui.status(_("use 'hg resolve' to retry unresolved "
656 "file merges\n"))
656 "file merges\n"))
657 return 1
657 return 1
658 else:
658 else:
659 hg.clean(repo, node, show_stats=False)
659 hg.clean(repo, node, show_stats=False)
660 repo.dirstate.setbranch(branch)
660 repo.dirstate.setbranch(branch)
661 cmdutil.revert(ui, repo, rctx, repo.dirstate.parents())
661 cmdutil.revert(ui, repo, rctx, repo.dirstate.parents())
662
662
663 if opts.get('no_commit'):
663 if opts.get('no_commit'):
664 msg = _("changeset %s backed out, "
664 msg = _("changeset %s backed out, "
665 "don't forget to commit.\n")
665 "don't forget to commit.\n")
666 ui.status(msg % short(node))
666 ui.status(msg % short(node))
667 return 0
667 return 0
668
668
669 def commitfunc(ui, repo, message, match, opts):
669 def commitfunc(ui, repo, message, match, opts):
670 editform = 'backout'
670 editform = 'backout'
671 e = cmdutil.getcommiteditor(editform=editform,
671 e = cmdutil.getcommiteditor(editform=editform,
672 **pycompat.strkwargs(opts))
672 **pycompat.strkwargs(opts))
673 if not message:
673 if not message:
674 # we don't translate commit messages
674 # we don't translate commit messages
675 message = "Backed out changeset %s" % short(node)
675 message = "Backed out changeset %s" % short(node)
676 e = cmdutil.getcommiteditor(edit=True, editform=editform)
676 e = cmdutil.getcommiteditor(edit=True, editform=editform)
677 return repo.commit(message, opts.get('user'), opts.get('date'),
677 return repo.commit(message, opts.get('user'), opts.get('date'),
678 match, editor=e)
678 match, editor=e)
679 newnode = cmdutil.commit(ui, repo, commitfunc, [], opts)
679 newnode = cmdutil.commit(ui, repo, commitfunc, [], opts)
680 if not newnode:
680 if not newnode:
681 ui.status(_("nothing changed\n"))
681 ui.status(_("nothing changed\n"))
682 return 1
682 return 1
683 cmdutil.commitstatus(repo, newnode, branch, bheads)
683 cmdutil.commitstatus(repo, newnode, branch, bheads)
684
684
685 def nice(node):
685 def nice(node):
686 return '%d:%s' % (repo.changelog.rev(node), short(node))
686 return '%d:%s' % (repo.changelog.rev(node), short(node))
687 ui.status(_('changeset %s backs out changeset %s\n') %
687 ui.status(_('changeset %s backs out changeset %s\n') %
688 (nice(repo.changelog.tip()), nice(node)))
688 (nice(repo.changelog.tip()), nice(node)))
689 if opts.get('merge') and op1 != node:
689 if opts.get('merge') and op1 != node:
690 hg.clean(repo, op1, show_stats=False)
690 hg.clean(repo, op1, show_stats=False)
691 ui.status(_('merging with changeset %s\n')
691 ui.status(_('merging with changeset %s\n')
692 % nice(repo.changelog.tip()))
692 % nice(repo.changelog.tip()))
693 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
693 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
694 with ui.configoverride(overrides, 'backout'):
694 with ui.configoverride(overrides, 'backout'):
695 return hg.merge(repo, hex(repo.changelog.tip()))
695 return hg.merge(repo, hex(repo.changelog.tip()))
696 return 0
696 return 0
697
697
698 @command('bisect',
698 @command('bisect',
699 [('r', 'reset', False, _('reset bisect state')),
699 [('r', 'reset', False, _('reset bisect state')),
700 ('g', 'good', False, _('mark changeset good')),
700 ('g', 'good', False, _('mark changeset good')),
701 ('b', 'bad', False, _('mark changeset bad')),
701 ('b', 'bad', False, _('mark changeset bad')),
702 ('s', 'skip', False, _('skip testing changeset')),
702 ('s', 'skip', False, _('skip testing changeset')),
703 ('e', 'extend', False, _('extend the bisect range')),
703 ('e', 'extend', False, _('extend the bisect range')),
704 ('c', 'command', '', _('use command to check changeset state'), _('CMD')),
704 ('c', 'command', '', _('use command to check changeset state'), _('CMD')),
705 ('U', 'noupdate', False, _('do not update to target'))],
705 ('U', 'noupdate', False, _('do not update to target'))],
706 _("[-gbsr] [-U] [-c CMD] [REV]"),
706 _("[-gbsr] [-U] [-c CMD] [REV]"),
707 helpcategory=command.CATEGORY_CHANGE_NAVIGATION)
707 helpcategory=command.CATEGORY_CHANGE_NAVIGATION)
708 def bisect(ui, repo, rev=None, extra=None, command=None,
708 def bisect(ui, repo, rev=None, extra=None, command=None,
709 reset=None, good=None, bad=None, skip=None, extend=None,
709 reset=None, good=None, bad=None, skip=None, extend=None,
710 noupdate=None):
710 noupdate=None):
711 """subdivision search of changesets
711 """subdivision search of changesets
712
712
713 This command helps to find changesets which introduce problems. To
713 This command helps to find changesets which introduce problems. To
714 use, mark the earliest changeset you know exhibits the problem as
714 use, mark the earliest changeset you know exhibits the problem as
715 bad, then mark the latest changeset which is free from the problem
715 bad, then mark the latest changeset which is free from the problem
716 as good. Bisect will update your working directory to a revision
716 as good. Bisect will update your working directory to a revision
717 for testing (unless the -U/--noupdate option is specified). Once
717 for testing (unless the -U/--noupdate option is specified). Once
718 you have performed tests, mark the working directory as good or
718 you have performed tests, mark the working directory as good or
719 bad, and bisect will either update to another candidate changeset
719 bad, and bisect will either update to another candidate changeset
720 or announce that it has found the bad revision.
720 or announce that it has found the bad revision.
721
721
722 As a shortcut, you can also use the revision argument to mark a
722 As a shortcut, you can also use the revision argument to mark a
723 revision as good or bad without checking it out first.
723 revision as good or bad without checking it out first.
724
724
725 If you supply a command, it will be used for automatic bisection.
725 If you supply a command, it will be used for automatic bisection.
726 The environment variable HG_NODE will contain the ID of the
726 The environment variable HG_NODE will contain the ID of the
727 changeset being tested. The exit status of the command will be
727 changeset being tested. The exit status of the command will be
728 used to mark revisions as good or bad: status 0 means good, 125
728 used to mark revisions as good or bad: status 0 means good, 125
729 means to skip the revision, 127 (command not found) will abort the
729 means to skip the revision, 127 (command not found) will abort the
730 bisection, and any other non-zero exit status means the revision
730 bisection, and any other non-zero exit status means the revision
731 is bad.
731 is bad.
732
732
733 .. container:: verbose
733 .. container:: verbose
734
734
735 Some examples:
735 Some examples:
736
736
737 - start a bisection with known bad revision 34, and good revision 12::
737 - start a bisection with known bad revision 34, and good revision 12::
738
738
739 hg bisect --bad 34
739 hg bisect --bad 34
740 hg bisect --good 12
740 hg bisect --good 12
741
741
742 - advance the current bisection by marking current revision as good or
742 - advance the current bisection by marking current revision as good or
743 bad::
743 bad::
744
744
745 hg bisect --good
745 hg bisect --good
746 hg bisect --bad
746 hg bisect --bad
747
747
748 - mark the current revision, or a known revision, to be skipped (e.g. if
748 - mark the current revision, or a known revision, to be skipped (e.g. if
749 that revision is not usable because of another issue)::
749 that revision is not usable because of another issue)::
750
750
751 hg bisect --skip
751 hg bisect --skip
752 hg bisect --skip 23
752 hg bisect --skip 23
753
753
754 - skip all revisions that do not touch directories ``foo`` or ``bar``::
754 - skip all revisions that do not touch directories ``foo`` or ``bar``::
755
755
756 hg bisect --skip "!( file('path:foo') & file('path:bar') )"
756 hg bisect --skip "!( file('path:foo') & file('path:bar') )"
757
757
758 - forget the current bisection::
758 - forget the current bisection::
759
759
760 hg bisect --reset
760 hg bisect --reset
761
761
762 - use 'make && make tests' to automatically find the first broken
762 - use 'make && make tests' to automatically find the first broken
763 revision::
763 revision::
764
764
765 hg bisect --reset
765 hg bisect --reset
766 hg bisect --bad 34
766 hg bisect --bad 34
767 hg bisect --good 12
767 hg bisect --good 12
768 hg bisect --command "make && make tests"
768 hg bisect --command "make && make tests"
769
769
770 - see all changesets whose states are already known in the current
770 - see all changesets whose states are already known in the current
771 bisection::
771 bisection::
772
772
773 hg log -r "bisect(pruned)"
773 hg log -r "bisect(pruned)"
774
774
775 - see the changeset currently being bisected (especially useful
775 - see the changeset currently being bisected (especially useful
776 if running with -U/--noupdate)::
776 if running with -U/--noupdate)::
777
777
778 hg log -r "bisect(current)"
778 hg log -r "bisect(current)"
779
779
780 - see all changesets that took part in the current bisection::
780 - see all changesets that took part in the current bisection::
781
781
782 hg log -r "bisect(range)"
782 hg log -r "bisect(range)"
783
783
784 - you can even get a nice graph::
784 - you can even get a nice graph::
785
785
786 hg log --graph -r "bisect(range)"
786 hg log --graph -r "bisect(range)"
787
787
788 See :hg:`help revisions.bisect` for more about the `bisect()` predicate.
788 See :hg:`help revisions.bisect` for more about the `bisect()` predicate.
789
789
790 Returns 0 on success.
790 Returns 0 on success.
791 """
791 """
792 # backward compatibility
792 # backward compatibility
793 if rev in "good bad reset init".split():
793 if rev in "good bad reset init".split():
794 ui.warn(_("(use of 'hg bisect <cmd>' is deprecated)\n"))
794 ui.warn(_("(use of 'hg bisect <cmd>' is deprecated)\n"))
795 cmd, rev, extra = rev, extra, None
795 cmd, rev, extra = rev, extra, None
796 if cmd == "good":
796 if cmd == "good":
797 good = True
797 good = True
798 elif cmd == "bad":
798 elif cmd == "bad":
799 bad = True
799 bad = True
800 else:
800 else:
801 reset = True
801 reset = True
802 elif extra:
802 elif extra:
803 raise error.Abort(_('incompatible arguments'))
803 raise error.Abort(_('incompatible arguments'))
804
804
805 incompatibles = {
805 incompatibles = {
806 '--bad': bad,
806 '--bad': bad,
807 '--command': bool(command),
807 '--command': bool(command),
808 '--extend': extend,
808 '--extend': extend,
809 '--good': good,
809 '--good': good,
810 '--reset': reset,
810 '--reset': reset,
811 '--skip': skip,
811 '--skip': skip,
812 }
812 }
813
813
814 enabled = [x for x in incompatibles if incompatibles[x]]
814 enabled = [x for x in incompatibles if incompatibles[x]]
815
815
816 if len(enabled) > 1:
816 if len(enabled) > 1:
817 raise error.Abort(_('%s and %s are incompatible') %
817 raise error.Abort(_('%s and %s are incompatible') %
818 tuple(sorted(enabled)[0:2]))
818 tuple(sorted(enabled)[0:2]))
819
819
820 if reset:
820 if reset:
821 hbisect.resetstate(repo)
821 hbisect.resetstate(repo)
822 return
822 return
823
823
824 state = hbisect.load_state(repo)
824 state = hbisect.load_state(repo)
825
825
826 # update state
826 # update state
827 if good or bad or skip:
827 if good or bad or skip:
828 if rev:
828 if rev:
829 nodes = [repo[i].node() for i in scmutil.revrange(repo, [rev])]
829 nodes = [repo[i].node() for i in scmutil.revrange(repo, [rev])]
830 else:
830 else:
831 nodes = [repo.lookup('.')]
831 nodes = [repo.lookup('.')]
832 if good:
832 if good:
833 state['good'] += nodes
833 state['good'] += nodes
834 elif bad:
834 elif bad:
835 state['bad'] += nodes
835 state['bad'] += nodes
836 elif skip:
836 elif skip:
837 state['skip'] += nodes
837 state['skip'] += nodes
838 hbisect.save_state(repo, state)
838 hbisect.save_state(repo, state)
839 if not (state['good'] and state['bad']):
839 if not (state['good'] and state['bad']):
840 return
840 return
841
841
842 def mayupdate(repo, node, show_stats=True):
842 def mayupdate(repo, node, show_stats=True):
843 """common used update sequence"""
843 """common used update sequence"""
844 if noupdate:
844 if noupdate:
845 return
845 return
846 cmdutil.checkunfinished(repo)
846 cmdutil.checkunfinished(repo)
847 cmdutil.bailifchanged(repo)
847 cmdutil.bailifchanged(repo)
848 return hg.clean(repo, node, show_stats=show_stats)
848 return hg.clean(repo, node, show_stats=show_stats)
849
849
850 displayer = logcmdutil.changesetdisplayer(ui, repo, {})
850 displayer = logcmdutil.changesetdisplayer(ui, repo, {})
851
851
852 if command:
852 if command:
853 changesets = 1
853 changesets = 1
854 if noupdate:
854 if noupdate:
855 try:
855 try:
856 node = state['current'][0]
856 node = state['current'][0]
857 except LookupError:
857 except LookupError:
858 raise error.Abort(_('current bisect revision is unknown - '
858 raise error.Abort(_('current bisect revision is unknown - '
859 'start a new bisect to fix'))
859 'start a new bisect to fix'))
860 else:
860 else:
861 node, p2 = repo.dirstate.parents()
861 node, p2 = repo.dirstate.parents()
862 if p2 != nullid:
862 if p2 != nullid:
863 raise error.Abort(_('current bisect revision is a merge'))
863 raise error.Abort(_('current bisect revision is a merge'))
864 if rev:
864 if rev:
865 node = repo[scmutil.revsingle(repo, rev, node)].node()
865 node = repo[scmutil.revsingle(repo, rev, node)].node()
866 try:
866 try:
867 while changesets:
867 while changesets:
868 # update state
868 # update state
869 state['current'] = [node]
869 state['current'] = [node]
870 hbisect.save_state(repo, state)
870 hbisect.save_state(repo, state)
871 status = ui.system(command, environ={'HG_NODE': hex(node)},
871 status = ui.system(command, environ={'HG_NODE': hex(node)},
872 blockedtag='bisect_check')
872 blockedtag='bisect_check')
873 if status == 125:
873 if status == 125:
874 transition = "skip"
874 transition = "skip"
875 elif status == 0:
875 elif status == 0:
876 transition = "good"
876 transition = "good"
877 # status < 0 means process was killed
877 # status < 0 means process was killed
878 elif status == 127:
878 elif status == 127:
879 raise error.Abort(_("failed to execute %s") % command)
879 raise error.Abort(_("failed to execute %s") % command)
880 elif status < 0:
880 elif status < 0:
881 raise error.Abort(_("%s killed") % command)
881 raise error.Abort(_("%s killed") % command)
882 else:
882 else:
883 transition = "bad"
883 transition = "bad"
884 state[transition].append(node)
884 state[transition].append(node)
885 ctx = repo[node]
885 ctx = repo[node]
886 ui.status(_('changeset %d:%s: %s\n') % (ctx.rev(), ctx,
886 ui.status(_('changeset %d:%s: %s\n') % (ctx.rev(), ctx,
887 transition))
887 transition))
888 hbisect.checkstate(state)
888 hbisect.checkstate(state)
889 # bisect
889 # bisect
890 nodes, changesets, bgood = hbisect.bisect(repo, state)
890 nodes, changesets, bgood = hbisect.bisect(repo, state)
891 # update to next check
891 # update to next check
892 node = nodes[0]
892 node = nodes[0]
893 mayupdate(repo, node, show_stats=False)
893 mayupdate(repo, node, show_stats=False)
894 finally:
894 finally:
895 state['current'] = [node]
895 state['current'] = [node]
896 hbisect.save_state(repo, state)
896 hbisect.save_state(repo, state)
897 hbisect.printresult(ui, repo, state, displayer, nodes, bgood)
897 hbisect.printresult(ui, repo, state, displayer, nodes, bgood)
898 return
898 return
899
899
900 hbisect.checkstate(state)
900 hbisect.checkstate(state)
901
901
902 # actually bisect
902 # actually bisect
903 nodes, changesets, good = hbisect.bisect(repo, state)
903 nodes, changesets, good = hbisect.bisect(repo, state)
904 if extend:
904 if extend:
905 if not changesets:
905 if not changesets:
906 extendnode = hbisect.extendrange(repo, state, nodes, good)
906 extendnode = hbisect.extendrange(repo, state, nodes, good)
907 if extendnode is not None:
907 if extendnode is not None:
908 ui.write(_("Extending search to changeset %d:%s\n")
908 ui.write(_("Extending search to changeset %d:%s\n")
909 % (extendnode.rev(), extendnode))
909 % (extendnode.rev(), extendnode))
910 state['current'] = [extendnode.node()]
910 state['current'] = [extendnode.node()]
911 hbisect.save_state(repo, state)
911 hbisect.save_state(repo, state)
912 return mayupdate(repo, extendnode.node())
912 return mayupdate(repo, extendnode.node())
913 raise error.Abort(_("nothing to extend"))
913 raise error.Abort(_("nothing to extend"))
914
914
915 if changesets == 0:
915 if changesets == 0:
916 hbisect.printresult(ui, repo, state, displayer, nodes, good)
916 hbisect.printresult(ui, repo, state, displayer, nodes, good)
917 else:
917 else:
918 assert len(nodes) == 1 # only a single node can be tested next
918 assert len(nodes) == 1 # only a single node can be tested next
919 node = nodes[0]
919 node = nodes[0]
920 # compute the approximate number of remaining tests
920 # compute the approximate number of remaining tests
921 tests, size = 0, 2
921 tests, size = 0, 2
922 while size <= changesets:
922 while size <= changesets:
923 tests, size = tests + 1, size * 2
923 tests, size = tests + 1, size * 2
924 rev = repo.changelog.rev(node)
924 rev = repo.changelog.rev(node)
925 ui.write(_("Testing changeset %d:%s "
925 ui.write(_("Testing changeset %d:%s "
926 "(%d changesets remaining, ~%d tests)\n")
926 "(%d changesets remaining, ~%d tests)\n")
927 % (rev, short(node), changesets, tests))
927 % (rev, short(node), changesets, tests))
928 state['current'] = [node]
928 state['current'] = [node]
929 hbisect.save_state(repo, state)
929 hbisect.save_state(repo, state)
930 return mayupdate(repo, node)
930 return mayupdate(repo, node)
931
931
932 @command('bookmarks|bookmark',
932 @command('bookmarks|bookmark',
933 [('f', 'force', False, _('force')),
933 [('f', 'force', False, _('force')),
934 ('r', 'rev', '', _('revision for bookmark action'), _('REV')),
934 ('r', 'rev', '', _('revision for bookmark action'), _('REV')),
935 ('d', 'delete', False, _('delete a given bookmark')),
935 ('d', 'delete', False, _('delete a given bookmark')),
936 ('m', 'rename', '', _('rename a given bookmark'), _('OLD')),
936 ('m', 'rename', '', _('rename a given bookmark'), _('OLD')),
937 ('i', 'inactive', False, _('mark a bookmark inactive')),
937 ('i', 'inactive', False, _('mark a bookmark inactive')),
938 ('l', 'list', False, _('list existing bookmarks')),
938 ('l', 'list', False, _('list existing bookmarks')),
939 ] + formatteropts,
939 ] + formatteropts,
940 _('hg bookmarks [OPTIONS]... [NAME]...'),
940 _('hg bookmarks [OPTIONS]... [NAME]...'),
941 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
941 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
942 def bookmark(ui, repo, *names, **opts):
942 def bookmark(ui, repo, *names, **opts):
943 '''create a new bookmark or list existing bookmarks
943 '''create a new bookmark or list existing bookmarks
944
944
945 Bookmarks are labels on changesets to help track lines of development.
945 Bookmarks are labels on changesets to help track lines of development.
946 Bookmarks are unversioned and can be moved, renamed and deleted.
946 Bookmarks are unversioned and can be moved, renamed and deleted.
947 Deleting or moving a bookmark has no effect on the associated changesets.
947 Deleting or moving a bookmark has no effect on the associated changesets.
948
948
949 Creating or updating to a bookmark causes it to be marked as 'active'.
949 Creating or updating to a bookmark causes it to be marked as 'active'.
950 The active bookmark is indicated with a '*'.
950 The active bookmark is indicated with a '*'.
951 When a commit is made, the active bookmark will advance to the new commit.
951 When a commit is made, the active bookmark will advance to the new commit.
952 A plain :hg:`update` will also advance an active bookmark, if possible.
952 A plain :hg:`update` will also advance an active bookmark, if possible.
953 Updating away from a bookmark will cause it to be deactivated.
953 Updating away from a bookmark will cause it to be deactivated.
954
954
955 Bookmarks can be pushed and pulled between repositories (see
955 Bookmarks can be pushed and pulled between repositories (see
956 :hg:`help push` and :hg:`help pull`). If a shared bookmark has
956 :hg:`help push` and :hg:`help pull`). If a shared bookmark has
957 diverged, a new 'divergent bookmark' of the form 'name@path' will
957 diverged, a new 'divergent bookmark' of the form 'name@path' will
958 be created. Using :hg:`merge` will resolve the divergence.
958 be created. Using :hg:`merge` will resolve the divergence.
959
959
960 Specifying bookmark as '.' to -m/-d/-l options is equivalent to specifying
960 Specifying bookmark as '.' to -m/-d/-l options is equivalent to specifying
961 the active bookmark's name.
961 the active bookmark's name.
962
962
963 A bookmark named '@' has the special property that :hg:`clone` will
963 A bookmark named '@' has the special property that :hg:`clone` will
964 check it out by default if it exists.
964 check it out by default if it exists.
965
965
966 .. container:: verbose
966 .. container:: verbose
967
967
968 Template:
968 Template:
969
969
970 The following keywords are supported in addition to the common template
970 The following keywords are supported in addition to the common template
971 keywords and functions such as ``{bookmark}``. See also
971 keywords and functions such as ``{bookmark}``. See also
972 :hg:`help templates`.
972 :hg:`help templates`.
973
973
974 :active: Boolean. True if the bookmark is active.
974 :active: Boolean. True if the bookmark is active.
975
975
976 Examples:
976 Examples:
977
977
978 - create an active bookmark for a new line of development::
978 - create an active bookmark for a new line of development::
979
979
980 hg book new-feature
980 hg book new-feature
981
981
982 - create an inactive bookmark as a place marker::
982 - create an inactive bookmark as a place marker::
983
983
984 hg book -i reviewed
984 hg book -i reviewed
985
985
986 - create an inactive bookmark on another changeset::
986 - create an inactive bookmark on another changeset::
987
987
988 hg book -r .^ tested
988 hg book -r .^ tested
989
989
990 - rename bookmark turkey to dinner::
990 - rename bookmark turkey to dinner::
991
991
992 hg book -m turkey dinner
992 hg book -m turkey dinner
993
993
994 - move the '@' bookmark from another branch::
994 - move the '@' bookmark from another branch::
995
995
996 hg book -f @
996 hg book -f @
997
997
998 - print only the active bookmark name::
998 - print only the active bookmark name::
999
999
1000 hg book -ql .
1000 hg book -ql .
1001 '''
1001 '''
1002 opts = pycompat.byteskwargs(opts)
1002 opts = pycompat.byteskwargs(opts)
1003 force = opts.get('force')
1003 force = opts.get('force')
1004 rev = opts.get('rev')
1004 rev = opts.get('rev')
1005 inactive = opts.get('inactive') # meaning add/rename to inactive bookmark
1005 inactive = opts.get('inactive') # meaning add/rename to inactive bookmark
1006
1006
1007 selactions = [k for k in ['delete', 'rename', 'list'] if opts.get(k)]
1007 selactions = [k for k in ['delete', 'rename', 'list'] if opts.get(k)]
1008 if len(selactions) > 1:
1008 if len(selactions) > 1:
1009 raise error.Abort(_('--%s and --%s are incompatible')
1009 raise error.Abort(_('--%s and --%s are incompatible')
1010 % tuple(selactions[:2]))
1010 % tuple(selactions[:2]))
1011 if selactions:
1011 if selactions:
1012 action = selactions[0]
1012 action = selactions[0]
1013 elif names or rev:
1013 elif names or rev:
1014 action = 'add'
1014 action = 'add'
1015 elif inactive:
1015 elif inactive:
1016 action = 'inactive' # meaning deactivate
1016 action = 'inactive' # meaning deactivate
1017 else:
1017 else:
1018 action = 'list'
1018 action = 'list'
1019
1019
1020 if rev and action in {'delete', 'rename', 'list'}:
1020 if rev and action in {'delete', 'rename', 'list'}:
1021 raise error.Abort(_("--rev is incompatible with --%s") % action)
1021 raise error.Abort(_("--rev is incompatible with --%s") % action)
1022 if inactive and action in {'delete', 'list'}:
1022 if inactive and action in {'delete', 'list'}:
1023 raise error.Abort(_("--inactive is incompatible with --%s") % action)
1023 raise error.Abort(_("--inactive is incompatible with --%s") % action)
1024 if not names and action in {'add', 'delete'}:
1024 if not names and action in {'add', 'delete'}:
1025 raise error.Abort(_("bookmark name required"))
1025 raise error.Abort(_("bookmark name required"))
1026
1026
1027 if action in {'add', 'delete', 'rename', 'inactive'}:
1027 if action in {'add', 'delete', 'rename', 'inactive'}:
1028 with repo.wlock(), repo.lock(), repo.transaction('bookmark') as tr:
1028 with repo.wlock(), repo.lock(), repo.transaction('bookmark') as tr:
1029 if action == 'delete':
1029 if action == 'delete':
1030 names = pycompat.maplist(repo._bookmarks.expandname, names)
1030 names = pycompat.maplist(repo._bookmarks.expandname, names)
1031 bookmarks.delete(repo, tr, names)
1031 bookmarks.delete(repo, tr, names)
1032 elif action == 'rename':
1032 elif action == 'rename':
1033 if not names:
1033 if not names:
1034 raise error.Abort(_("new bookmark name required"))
1034 raise error.Abort(_("new bookmark name required"))
1035 elif len(names) > 1:
1035 elif len(names) > 1:
1036 raise error.Abort(_("only one new bookmark name allowed"))
1036 raise error.Abort(_("only one new bookmark name allowed"))
1037 oldname = repo._bookmarks.expandname(opts['rename'])
1037 oldname = repo._bookmarks.expandname(opts['rename'])
1038 bookmarks.rename(repo, tr, oldname, names[0], force, inactive)
1038 bookmarks.rename(repo, tr, oldname, names[0], force, inactive)
1039 elif action == 'add':
1039 elif action == 'add':
1040 bookmarks.addbookmarks(repo, tr, names, rev, force, inactive)
1040 bookmarks.addbookmarks(repo, tr, names, rev, force, inactive)
1041 elif action == 'inactive':
1041 elif action == 'inactive':
1042 if len(repo._bookmarks) == 0:
1042 if len(repo._bookmarks) == 0:
1043 ui.status(_("no bookmarks set\n"))
1043 ui.status(_("no bookmarks set\n"))
1044 elif not repo._activebookmark:
1044 elif not repo._activebookmark:
1045 ui.status(_("no active bookmark\n"))
1045 ui.status(_("no active bookmark\n"))
1046 else:
1046 else:
1047 bookmarks.deactivate(repo)
1047 bookmarks.deactivate(repo)
1048 elif action == 'list':
1048 elif action == 'list':
1049 names = pycompat.maplist(repo._bookmarks.expandname, names)
1049 names = pycompat.maplist(repo._bookmarks.expandname, names)
1050 with ui.formatter('bookmarks', opts) as fm:
1050 with ui.formatter('bookmarks', opts) as fm:
1051 bookmarks.printbookmarks(ui, repo, fm, names)
1051 bookmarks.printbookmarks(ui, repo, fm, names)
1052 else:
1052 else:
1053 raise error.ProgrammingError('invalid action: %s' % action)
1053 raise error.ProgrammingError('invalid action: %s' % action)
1054
1054
1055 @command('branch',
1055 @command('branch',
1056 [('f', 'force', None,
1056 [('f', 'force', None,
1057 _('set branch name even if it shadows an existing branch')),
1057 _('set branch name even if it shadows an existing branch')),
1058 ('C', 'clean', None, _('reset branch name to parent branch name')),
1058 ('C', 'clean', None, _('reset branch name to parent branch name')),
1059 ('r', 'rev', [], _('change branches of the given revs (EXPERIMENTAL)')),
1059 ('r', 'rev', [], _('change branches of the given revs (EXPERIMENTAL)')),
1060 ],
1060 ],
1061 _('[-fC] [NAME]'),
1061 _('[-fC] [NAME]'),
1062 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
1062 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
1063 def branch(ui, repo, label=None, **opts):
1063 def branch(ui, repo, label=None, **opts):
1064 """set or show the current branch name
1064 """set or show the current branch name
1065
1065
1066 .. note::
1066 .. note::
1067
1067
1068 Branch names are permanent and global. Use :hg:`bookmark` to create a
1068 Branch names are permanent and global. Use :hg:`bookmark` to create a
1069 light-weight bookmark instead. See :hg:`help glossary` for more
1069 light-weight bookmark instead. See :hg:`help glossary` for more
1070 information about named branches and bookmarks.
1070 information about named branches and bookmarks.
1071
1071
1072 With no argument, show the current branch name. With one argument,
1072 With no argument, show the current branch name. With one argument,
1073 set the working directory branch name (the branch will not exist
1073 set the working directory branch name (the branch will not exist
1074 in the repository until the next commit). Standard practice
1074 in the repository until the next commit). Standard practice
1075 recommends that primary development take place on the 'default'
1075 recommends that primary development take place on the 'default'
1076 branch.
1076 branch.
1077
1077
1078 Unless -f/--force is specified, branch will not let you set a
1078 Unless -f/--force is specified, branch will not let you set a
1079 branch name that already exists.
1079 branch name that already exists.
1080
1080
1081 Use -C/--clean to reset the working directory branch to that of
1081 Use -C/--clean to reset the working directory branch to that of
1082 the parent of the working directory, negating a previous branch
1082 the parent of the working directory, negating a previous branch
1083 change.
1083 change.
1084
1084
1085 Use the command :hg:`update` to switch to an existing branch. Use
1085 Use the command :hg:`update` to switch to an existing branch. Use
1086 :hg:`commit --close-branch` to mark this branch head as closed.
1086 :hg:`commit --close-branch` to mark this branch head as closed.
1087 When all heads of a branch are closed, the branch will be
1087 When all heads of a branch are closed, the branch will be
1088 considered closed.
1088 considered closed.
1089
1089
1090 Returns 0 on success.
1090 Returns 0 on success.
1091 """
1091 """
1092 opts = pycompat.byteskwargs(opts)
1092 opts = pycompat.byteskwargs(opts)
1093 revs = opts.get('rev')
1093 revs = opts.get('rev')
1094 if label:
1094 if label:
1095 label = label.strip()
1095 label = label.strip()
1096
1096
1097 if not opts.get('clean') and not label:
1097 if not opts.get('clean') and not label:
1098 if revs:
1098 if revs:
1099 raise error.Abort(_("no branch name specified for the revisions"))
1099 raise error.Abort(_("no branch name specified for the revisions"))
1100 ui.write("%s\n" % repo.dirstate.branch())
1100 ui.write("%s\n" % repo.dirstate.branch())
1101 return
1101 return
1102
1102
1103 with repo.wlock():
1103 with repo.wlock():
1104 if opts.get('clean'):
1104 if opts.get('clean'):
1105 label = repo['.'].branch()
1105 label = repo['.'].branch()
1106 repo.dirstate.setbranch(label)
1106 repo.dirstate.setbranch(label)
1107 ui.status(_('reset working directory to branch %s\n') % label)
1107 ui.status(_('reset working directory to branch %s\n') % label)
1108 elif label:
1108 elif label:
1109
1109
1110 scmutil.checknewlabel(repo, label, 'branch')
1110 scmutil.checknewlabel(repo, label, 'branch')
1111 if revs:
1111 if revs:
1112 return cmdutil.changebranch(ui, repo, revs, label)
1112 return cmdutil.changebranch(ui, repo, revs, label)
1113
1113
1114 if not opts.get('force') and label in repo.branchmap():
1114 if not opts.get('force') and label in repo.branchmap():
1115 if label not in [p.branch() for p in repo[None].parents()]:
1115 if label not in [p.branch() for p in repo[None].parents()]:
1116 raise error.Abort(_('a branch of the same name already'
1116 raise error.Abort(_('a branch of the same name already'
1117 ' exists'),
1117 ' exists'),
1118 # i18n: "it" refers to an existing branch
1118 # i18n: "it" refers to an existing branch
1119 hint=_("use 'hg update' to switch to it"))
1119 hint=_("use 'hg update' to switch to it"))
1120
1120
1121 repo.dirstate.setbranch(label)
1121 repo.dirstate.setbranch(label)
1122 ui.status(_('marked working directory as branch %s\n') % label)
1122 ui.status(_('marked working directory as branch %s\n') % label)
1123
1123
1124 # find any open named branches aside from default
1124 # find any open named branches aside from default
1125 others = [n for n, h, t, c in repo.branchmap().iterbranches()
1125 others = [n for n, h, t, c in repo.branchmap().iterbranches()
1126 if n != "default" and not c]
1126 if n != "default" and not c]
1127 if not others:
1127 if not others:
1128 ui.status(_('(branches are permanent and global, '
1128 ui.status(_('(branches are permanent and global, '
1129 'did you want a bookmark?)\n'))
1129 'did you want a bookmark?)\n'))
1130
1130
1131 @command('branches',
1131 @command('branches',
1132 [('a', 'active', False,
1132 [('a', 'active', False,
1133 _('show only branches that have unmerged heads (DEPRECATED)')),
1133 _('show only branches that have unmerged heads (DEPRECATED)')),
1134 ('c', 'closed', False, _('show normal and closed branches')),
1134 ('c', 'closed', False, _('show normal and closed branches')),
1135 ('r', 'rev', [], _('show branch name(s) of the given rev'))
1135 ('r', 'rev', [], _('show branch name(s) of the given rev'))
1136 ] + formatteropts,
1136 ] + formatteropts,
1137 _('[-c]'),
1137 _('[-c]'),
1138 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
1138 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
1139 intents={INTENT_READONLY})
1139 intents={INTENT_READONLY})
1140 def branches(ui, repo, active=False, closed=False, **opts):
1140 def branches(ui, repo, active=False, closed=False, **opts):
1141 """list repository named branches
1141 """list repository named branches
1142
1142
1143 List the repository's named branches, indicating which ones are
1143 List the repository's named branches, indicating which ones are
1144 inactive. If -c/--closed is specified, also list branches which have
1144 inactive. If -c/--closed is specified, also list branches which have
1145 been marked closed (see :hg:`commit --close-branch`).
1145 been marked closed (see :hg:`commit --close-branch`).
1146
1146
1147 Use the command :hg:`update` to switch to an existing branch.
1147 Use the command :hg:`update` to switch to an existing branch.
1148
1148
1149 .. container:: verbose
1149 .. container:: verbose
1150
1150
1151 Template:
1151 Template:
1152
1152
1153 The following keywords are supported in addition to the common template
1153 The following keywords are supported in addition to the common template
1154 keywords and functions such as ``{branch}``. See also
1154 keywords and functions such as ``{branch}``. See also
1155 :hg:`help templates`.
1155 :hg:`help templates`.
1156
1156
1157 :active: Boolean. True if the branch is active.
1157 :active: Boolean. True if the branch is active.
1158 :closed: Boolean. True if the branch is closed.
1158 :closed: Boolean. True if the branch is closed.
1159 :current: Boolean. True if it is the current branch.
1159 :current: Boolean. True if it is the current branch.
1160
1160
1161 Returns 0.
1161 Returns 0.
1162 """
1162 """
1163
1163
1164 opts = pycompat.byteskwargs(opts)
1164 opts = pycompat.byteskwargs(opts)
1165 revs = opts.get('rev')
1165 revs = opts.get('rev')
1166 selectedbranches = None
1166 selectedbranches = None
1167 if revs:
1167 if revs:
1168 revs = scmutil.revrange(repo, revs)
1168 revs = scmutil.revrange(repo, revs)
1169 getbi = repo.revbranchcache().branchinfo
1169 getbi = repo.revbranchcache().branchinfo
1170 selectedbranches = {getbi(r)[0] for r in revs}
1170 selectedbranches = {getbi(r)[0] for r in revs}
1171
1171
1172 ui.pager('branches')
1172 ui.pager('branches')
1173 fm = ui.formatter('branches', opts)
1173 fm = ui.formatter('branches', opts)
1174 hexfunc = fm.hexfunc
1174 hexfunc = fm.hexfunc
1175
1175
1176 allheads = set(repo.heads())
1176 allheads = set(repo.heads())
1177 branches = []
1177 branches = []
1178 for tag, heads, tip, isclosed in repo.branchmap().iterbranches():
1178 for tag, heads, tip, isclosed in repo.branchmap().iterbranches():
1179 if selectedbranches is not None and tag not in selectedbranches:
1179 if selectedbranches is not None and tag not in selectedbranches:
1180 continue
1180 continue
1181 isactive = False
1181 isactive = False
1182 if not isclosed:
1182 if not isclosed:
1183 openheads = set(repo.branchmap().iteropen(heads))
1183 openheads = set(repo.branchmap().iteropen(heads))
1184 isactive = bool(openheads & allheads)
1184 isactive = bool(openheads & allheads)
1185 branches.append((tag, repo[tip], isactive, not isclosed))
1185 branches.append((tag, repo[tip], isactive, not isclosed))
1186 branches.sort(key=lambda i: (i[2], i[1].rev(), i[0], i[3]),
1186 branches.sort(key=lambda i: (i[2], i[1].rev(), i[0], i[3]),
1187 reverse=True)
1187 reverse=True)
1188
1188
1189 for tag, ctx, isactive, isopen in branches:
1189 for tag, ctx, isactive, isopen in branches:
1190 if active and not isactive:
1190 if active and not isactive:
1191 continue
1191 continue
1192 if isactive:
1192 if isactive:
1193 label = 'branches.active'
1193 label = 'branches.active'
1194 notice = ''
1194 notice = ''
1195 elif not isopen:
1195 elif not isopen:
1196 if not closed:
1196 if not closed:
1197 continue
1197 continue
1198 label = 'branches.closed'
1198 label = 'branches.closed'
1199 notice = _(' (closed)')
1199 notice = _(' (closed)')
1200 else:
1200 else:
1201 label = 'branches.inactive'
1201 label = 'branches.inactive'
1202 notice = _(' (inactive)')
1202 notice = _(' (inactive)')
1203 current = (tag == repo.dirstate.branch())
1203 current = (tag == repo.dirstate.branch())
1204 if current:
1204 if current:
1205 label = 'branches.current'
1205 label = 'branches.current'
1206
1206
1207 fm.startitem()
1207 fm.startitem()
1208 fm.write('branch', '%s', tag, label=label)
1208 fm.write('branch', '%s', tag, label=label)
1209 rev = ctx.rev()
1209 rev = ctx.rev()
1210 padsize = max(31 - len("%d" % rev) - encoding.colwidth(tag), 0)
1210 padsize = max(31 - len("%d" % rev) - encoding.colwidth(tag), 0)
1211 fmt = ' ' * padsize + ' %d:%s'
1211 fmt = ' ' * padsize + ' %d:%s'
1212 fm.condwrite(not ui.quiet, 'rev node', fmt, rev, hexfunc(ctx.node()),
1212 fm.condwrite(not ui.quiet, 'rev node', fmt, rev, hexfunc(ctx.node()),
1213 label='log.changeset changeset.%s' % ctx.phasestr())
1213 label='log.changeset changeset.%s' % ctx.phasestr())
1214 fm.context(ctx=ctx)
1214 fm.context(ctx=ctx)
1215 fm.data(active=isactive, closed=not isopen, current=current)
1215 fm.data(active=isactive, closed=not isopen, current=current)
1216 if not ui.quiet:
1216 if not ui.quiet:
1217 fm.plain(notice)
1217 fm.plain(notice)
1218 fm.plain('\n')
1218 fm.plain('\n')
1219 fm.end()
1219 fm.end()
1220
1220
1221 @command('bundle',
1221 @command('bundle',
1222 [('f', 'force', None, _('run even when the destination is unrelated')),
1222 [('f', 'force', None, _('run even when the destination is unrelated')),
1223 ('r', 'rev', [], _('a changeset intended to be added to the destination'),
1223 ('r', 'rev', [], _('a changeset intended to be added to the destination'),
1224 _('REV')),
1224 _('REV')),
1225 ('b', 'branch', [], _('a specific branch you would like to bundle'),
1225 ('b', 'branch', [], _('a specific branch you would like to bundle'),
1226 _('BRANCH')),
1226 _('BRANCH')),
1227 ('', 'base', [],
1227 ('', 'base', [],
1228 _('a base changeset assumed to be available at the destination'),
1228 _('a base changeset assumed to be available at the destination'),
1229 _('REV')),
1229 _('REV')),
1230 ('a', 'all', None, _('bundle all changesets in the repository')),
1230 ('a', 'all', None, _('bundle all changesets in the repository')),
1231 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE')),
1231 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE')),
1232 ] + remoteopts,
1232 ] + remoteopts,
1233 _('[-f] [-t BUNDLESPEC] [-a] [-r REV]... [--base REV]... FILE [DEST]'),
1233 _('[-f] [-t BUNDLESPEC] [-a] [-r REV]... [--base REV]... FILE [DEST]'),
1234 helpcategory=command.CATEGORY_IMPORT_EXPORT)
1234 helpcategory=command.CATEGORY_IMPORT_EXPORT)
1235 def bundle(ui, repo, fname, dest=None, **opts):
1235 def bundle(ui, repo, fname, dest=None, **opts):
1236 """create a bundle file
1236 """create a bundle file
1237
1237
1238 Generate a bundle file containing data to be transferred to another
1238 Generate a bundle file containing data to be transferred to another
1239 repository.
1239 repository.
1240
1240
1241 To create a bundle containing all changesets, use -a/--all
1241 To create a bundle containing all changesets, use -a/--all
1242 (or --base null). Otherwise, hg assumes the destination will have
1242 (or --base null). Otherwise, hg assumes the destination will have
1243 all the nodes you specify with --base parameters. Otherwise, hg
1243 all the nodes you specify with --base parameters. Otherwise, hg
1244 will assume the repository has all the nodes in destination, or
1244 will assume the repository has all the nodes in destination, or
1245 default-push/default if no destination is specified, where destination
1245 default-push/default if no destination is specified, where destination
1246 is the repository you provide through DEST option.
1246 is the repository you provide through DEST option.
1247
1247
1248 You can change bundle format with the -t/--type option. See
1248 You can change bundle format with the -t/--type option. See
1249 :hg:`help bundlespec` for documentation on this format. By default,
1249 :hg:`help bundlespec` for documentation on this format. By default,
1250 the most appropriate format is used and compression defaults to
1250 the most appropriate format is used and compression defaults to
1251 bzip2.
1251 bzip2.
1252
1252
1253 The bundle file can then be transferred using conventional means
1253 The bundle file can then be transferred using conventional means
1254 and applied to another repository with the unbundle or pull
1254 and applied to another repository with the unbundle or pull
1255 command. This is useful when direct push and pull are not
1255 command. This is useful when direct push and pull are not
1256 available or when exporting an entire repository is undesirable.
1256 available or when exporting an entire repository is undesirable.
1257
1257
1258 Applying bundles preserves all changeset contents including
1258 Applying bundles preserves all changeset contents including
1259 permissions, copy/rename information, and revision history.
1259 permissions, copy/rename information, and revision history.
1260
1260
1261 Returns 0 on success, 1 if no changes found.
1261 Returns 0 on success, 1 if no changes found.
1262 """
1262 """
1263 opts = pycompat.byteskwargs(opts)
1263 opts = pycompat.byteskwargs(opts)
1264 revs = None
1264 revs = None
1265 if 'rev' in opts:
1265 if 'rev' in opts:
1266 revstrings = opts['rev']
1266 revstrings = opts['rev']
1267 revs = scmutil.revrange(repo, revstrings)
1267 revs = scmutil.revrange(repo, revstrings)
1268 if revstrings and not revs:
1268 if revstrings and not revs:
1269 raise error.Abort(_('no commits to bundle'))
1269 raise error.Abort(_('no commits to bundle'))
1270
1270
1271 bundletype = opts.get('type', 'bzip2').lower()
1271 bundletype = opts.get('type', 'bzip2').lower()
1272 try:
1272 try:
1273 bundlespec = exchange.parsebundlespec(repo, bundletype, strict=False)
1273 bundlespec = exchange.parsebundlespec(repo, bundletype, strict=False)
1274 except error.UnsupportedBundleSpecification as e:
1274 except error.UnsupportedBundleSpecification as e:
1275 raise error.Abort(pycompat.bytestr(e),
1275 raise error.Abort(pycompat.bytestr(e),
1276 hint=_("see 'hg help bundlespec' for supported "
1276 hint=_("see 'hg help bundlespec' for supported "
1277 "values for --type"))
1277 "values for --type"))
1278 cgversion = bundlespec.contentopts["cg.version"]
1278 cgversion = bundlespec.contentopts["cg.version"]
1279
1279
1280 # Packed bundles are a pseudo bundle format for now.
1280 # Packed bundles are a pseudo bundle format for now.
1281 if cgversion == 's1':
1281 if cgversion == 's1':
1282 raise error.Abort(_('packed bundles cannot be produced by "hg bundle"'),
1282 raise error.Abort(_('packed bundles cannot be produced by "hg bundle"'),
1283 hint=_("use 'hg debugcreatestreamclonebundle'"))
1283 hint=_("use 'hg debugcreatestreamclonebundle'"))
1284
1284
1285 if opts.get('all'):
1285 if opts.get('all'):
1286 if dest:
1286 if dest:
1287 raise error.Abort(_("--all is incompatible with specifying "
1287 raise error.Abort(_("--all is incompatible with specifying "
1288 "a destination"))
1288 "a destination"))
1289 if opts.get('base'):
1289 if opts.get('base'):
1290 ui.warn(_("ignoring --base because --all was specified\n"))
1290 ui.warn(_("ignoring --base because --all was specified\n"))
1291 base = [nullrev]
1291 base = [nullrev]
1292 else:
1292 else:
1293 base = scmutil.revrange(repo, opts.get('base'))
1293 base = scmutil.revrange(repo, opts.get('base'))
1294 if cgversion not in changegroup.supportedoutgoingversions(repo):
1294 if cgversion not in changegroup.supportedoutgoingversions(repo):
1295 raise error.Abort(_("repository does not support bundle version %s") %
1295 raise error.Abort(_("repository does not support bundle version %s") %
1296 cgversion)
1296 cgversion)
1297
1297
1298 if base:
1298 if base:
1299 if dest:
1299 if dest:
1300 raise error.Abort(_("--base is incompatible with specifying "
1300 raise error.Abort(_("--base is incompatible with specifying "
1301 "a destination"))
1301 "a destination"))
1302 common = [repo[rev].node() for rev in base]
1302 common = [repo[rev].node() for rev in base]
1303 heads = [repo[r].node() for r in revs] if revs else None
1303 heads = [repo[r].node() for r in revs] if revs else None
1304 outgoing = discovery.outgoing(repo, common, heads)
1304 outgoing = discovery.outgoing(repo, common, heads)
1305 else:
1305 else:
1306 dest = ui.expandpath(dest or 'default-push', dest or 'default')
1306 dest = ui.expandpath(dest or 'default-push', dest or 'default')
1307 dest, branches = hg.parseurl(dest, opts.get('branch'))
1307 dest, branches = hg.parseurl(dest, opts.get('branch'))
1308 other = hg.peer(repo, opts, dest)
1308 other = hg.peer(repo, opts, dest)
1309 revs = [repo[r].hex() for r in revs]
1309 revs = [repo[r].hex() for r in revs]
1310 revs, checkout = hg.addbranchrevs(repo, repo, branches, revs)
1310 revs, checkout = hg.addbranchrevs(repo, repo, branches, revs)
1311 heads = revs and pycompat.maplist(repo.lookup, revs) or revs
1311 heads = revs and pycompat.maplist(repo.lookup, revs) or revs
1312 outgoing = discovery.findcommonoutgoing(repo, other,
1312 outgoing = discovery.findcommonoutgoing(repo, other,
1313 onlyheads=heads,
1313 onlyheads=heads,
1314 force=opts.get('force'),
1314 force=opts.get('force'),
1315 portable=True)
1315 portable=True)
1316
1316
1317 if not outgoing.missing:
1317 if not outgoing.missing:
1318 scmutil.nochangesfound(ui, repo, not base and outgoing.excluded)
1318 scmutil.nochangesfound(ui, repo, not base and outgoing.excluded)
1319 return 1
1319 return 1
1320
1320
1321 if cgversion == '01': #bundle1
1321 if cgversion == '01': #bundle1
1322 bversion = 'HG10' + bundlespec.wirecompression
1322 bversion = 'HG10' + bundlespec.wirecompression
1323 bcompression = None
1323 bcompression = None
1324 elif cgversion in ('02', '03'):
1324 elif cgversion in ('02', '03'):
1325 bversion = 'HG20'
1325 bversion = 'HG20'
1326 bcompression = bundlespec.wirecompression
1326 bcompression = bundlespec.wirecompression
1327 else:
1327 else:
1328 raise error.ProgrammingError(
1328 raise error.ProgrammingError(
1329 'bundle: unexpected changegroup version %s' % cgversion)
1329 'bundle: unexpected changegroup version %s' % cgversion)
1330
1330
1331 # TODO compression options should be derived from bundlespec parsing.
1331 # TODO compression options should be derived from bundlespec parsing.
1332 # This is a temporary hack to allow adjusting bundle compression
1332 # This is a temporary hack to allow adjusting bundle compression
1333 # level without a) formalizing the bundlespec changes to declare it
1333 # level without a) formalizing the bundlespec changes to declare it
1334 # b) introducing a command flag.
1334 # b) introducing a command flag.
1335 compopts = {}
1335 compopts = {}
1336 complevel = ui.configint('experimental',
1336 complevel = ui.configint('experimental',
1337 'bundlecomplevel.' + bundlespec.compression)
1337 'bundlecomplevel.' + bundlespec.compression)
1338 if complevel is None:
1338 if complevel is None:
1339 complevel = ui.configint('experimental', 'bundlecomplevel')
1339 complevel = ui.configint('experimental', 'bundlecomplevel')
1340 if complevel is not None:
1340 if complevel is not None:
1341 compopts['level'] = complevel
1341 compopts['level'] = complevel
1342
1342
1343 # Allow overriding the bundling of obsmarker in phases through
1343 # Allow overriding the bundling of obsmarker in phases through
1344 # configuration while we don't have a bundle version that include them
1344 # configuration while we don't have a bundle version that include them
1345 if repo.ui.configbool('experimental', 'evolution.bundle-obsmarker'):
1345 if repo.ui.configbool('experimental', 'evolution.bundle-obsmarker'):
1346 bundlespec.contentopts['obsolescence'] = True
1346 bundlespec.contentopts['obsolescence'] = True
1347 if repo.ui.configbool('experimental', 'bundle-phases'):
1347 if repo.ui.configbool('experimental', 'bundle-phases'):
1348 bundlespec.contentopts['phases'] = True
1348 bundlespec.contentopts['phases'] = True
1349
1349
1350 bundle2.writenewbundle(ui, repo, 'bundle', fname, bversion, outgoing,
1350 bundle2.writenewbundle(ui, repo, 'bundle', fname, bversion, outgoing,
1351 bundlespec.contentopts, compression=bcompression,
1351 bundlespec.contentopts, compression=bcompression,
1352 compopts=compopts)
1352 compopts=compopts)
1353
1353
1354 @command('cat',
1354 @command('cat',
1355 [('o', 'output', '',
1355 [('o', 'output', '',
1356 _('print output to file with formatted name'), _('FORMAT')),
1356 _('print output to file with formatted name'), _('FORMAT')),
1357 ('r', 'rev', '', _('print the given revision'), _('REV')),
1357 ('r', 'rev', '', _('print the given revision'), _('REV')),
1358 ('', 'decode', None, _('apply any matching decode filter')),
1358 ('', 'decode', None, _('apply any matching decode filter')),
1359 ] + walkopts + formatteropts,
1359 ] + walkopts + formatteropts,
1360 _('[OPTION]... FILE...'),
1360 _('[OPTION]... FILE...'),
1361 helpcategory=command.CATEGORY_FILE_CONTENTS,
1361 helpcategory=command.CATEGORY_FILE_CONTENTS,
1362 inferrepo=True,
1362 inferrepo=True,
1363 intents={INTENT_READONLY})
1363 intents={INTENT_READONLY})
1364 def cat(ui, repo, file1, *pats, **opts):
1364 def cat(ui, repo, file1, *pats, **opts):
1365 """output the current or given revision of files
1365 """output the current or given revision of files
1366
1366
1367 Print the specified files as they were at the given revision. If
1367 Print the specified files as they were at the given revision. If
1368 no revision is given, the parent of the working directory is used.
1368 no revision is given, the parent of the working directory is used.
1369
1369
1370 Output may be to a file, in which case the name of the file is
1370 Output may be to a file, in which case the name of the file is
1371 given using a template string. See :hg:`help templates`. In addition
1371 given using a template string. See :hg:`help templates`. In addition
1372 to the common template keywords, the following formatting rules are
1372 to the common template keywords, the following formatting rules are
1373 supported:
1373 supported:
1374
1374
1375 :``%%``: literal "%" character
1375 :``%%``: literal "%" character
1376 :``%s``: basename of file being printed
1376 :``%s``: basename of file being printed
1377 :``%d``: dirname of file being printed, or '.' if in repository root
1377 :``%d``: dirname of file being printed, or '.' if in repository root
1378 :``%p``: root-relative path name of file being printed
1378 :``%p``: root-relative path name of file being printed
1379 :``%H``: changeset hash (40 hexadecimal digits)
1379 :``%H``: changeset hash (40 hexadecimal digits)
1380 :``%R``: changeset revision number
1380 :``%R``: changeset revision number
1381 :``%h``: short-form changeset hash (12 hexadecimal digits)
1381 :``%h``: short-form changeset hash (12 hexadecimal digits)
1382 :``%r``: zero-padded changeset revision number
1382 :``%r``: zero-padded changeset revision number
1383 :``%b``: basename of the exporting repository
1383 :``%b``: basename of the exporting repository
1384 :``\\``: literal "\\" character
1384 :``\\``: literal "\\" character
1385
1385
1386 .. container:: verbose
1386 .. container:: verbose
1387
1387
1388 Template:
1388 Template:
1389
1389
1390 The following keywords are supported in addition to the common template
1390 The following keywords are supported in addition to the common template
1391 keywords and functions. See also :hg:`help templates`.
1391 keywords and functions. See also :hg:`help templates`.
1392
1392
1393 :data: String. File content.
1393 :data: String. File content.
1394 :path: String. Repository-absolute path of the file.
1394 :path: String. Repository-absolute path of the file.
1395
1395
1396 Returns 0 on success.
1396 Returns 0 on success.
1397 """
1397 """
1398 opts = pycompat.byteskwargs(opts)
1398 opts = pycompat.byteskwargs(opts)
1399 rev = opts.get('rev')
1399 rev = opts.get('rev')
1400 if rev:
1400 if rev:
1401 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
1401 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
1402 ctx = scmutil.revsingle(repo, rev)
1402 ctx = scmutil.revsingle(repo, rev)
1403 m = scmutil.match(ctx, (file1,) + pats, opts)
1403 m = scmutil.match(ctx, (file1,) + pats, opts)
1404 fntemplate = opts.pop('output', '')
1404 fntemplate = opts.pop('output', '')
1405 if cmdutil.isstdiofilename(fntemplate):
1405 if cmdutil.isstdiofilename(fntemplate):
1406 fntemplate = ''
1406 fntemplate = ''
1407
1407
1408 if fntemplate:
1408 if fntemplate:
1409 fm = formatter.nullformatter(ui, 'cat', opts)
1409 fm = formatter.nullformatter(ui, 'cat', opts)
1410 else:
1410 else:
1411 ui.pager('cat')
1411 ui.pager('cat')
1412 fm = ui.formatter('cat', opts)
1412 fm = ui.formatter('cat', opts)
1413 with fm:
1413 with fm:
1414 return cmdutil.cat(ui, repo, ctx, m, fm, fntemplate, '',
1414 return cmdutil.cat(ui, repo, ctx, m, fm, fntemplate, '',
1415 **pycompat.strkwargs(opts))
1415 **pycompat.strkwargs(opts))
1416
1416
1417 @command('clone',
1417 @command('clone',
1418 [('U', 'noupdate', None, _('the clone will include an empty working '
1418 [('U', 'noupdate', None, _('the clone will include an empty working '
1419 'directory (only a repository)')),
1419 'directory (only a repository)')),
1420 ('u', 'updaterev', '', _('revision, tag, or branch to check out'),
1420 ('u', 'updaterev', '', _('revision, tag, or branch to check out'),
1421 _('REV')),
1421 _('REV')),
1422 ('r', 'rev', [], _('do not clone everything, but include this changeset'
1422 ('r', 'rev', [], _('do not clone everything, but include this changeset'
1423 ' and its ancestors'), _('REV')),
1423 ' and its ancestors'), _('REV')),
1424 ('b', 'branch', [], _('do not clone everything, but include this branch\'s'
1424 ('b', 'branch', [], _('do not clone everything, but include this branch\'s'
1425 ' changesets and their ancestors'), _('BRANCH')),
1425 ' changesets and their ancestors'), _('BRANCH')),
1426 ('', 'pull', None, _('use pull protocol to copy metadata')),
1426 ('', 'pull', None, _('use pull protocol to copy metadata')),
1427 ('', 'uncompressed', None,
1427 ('', 'uncompressed', None,
1428 _('an alias to --stream (DEPRECATED)')),
1428 _('an alias to --stream (DEPRECATED)')),
1429 ('', 'stream', None,
1429 ('', 'stream', None,
1430 _('clone with minimal data processing')),
1430 _('clone with minimal data processing')),
1431 ] + remoteopts,
1431 ] + remoteopts,
1432 _('[OPTION]... SOURCE [DEST]'),
1432 _('[OPTION]... SOURCE [DEST]'),
1433 helpcategory=command.CATEGORY_REPO_CREATION,
1433 helpcategory=command.CATEGORY_REPO_CREATION,
1434 helpbasic=True, norepo=True)
1434 helpbasic=True, norepo=True)
1435 def clone(ui, source, dest=None, **opts):
1435 def clone(ui, source, dest=None, **opts):
1436 """make a copy of an existing repository
1436 """make a copy of an existing repository
1437
1437
1438 Create a copy of an existing repository in a new directory.
1438 Create a copy of an existing repository in a new directory.
1439
1439
1440 If no destination directory name is specified, it defaults to the
1440 If no destination directory name is specified, it defaults to the
1441 basename of the source.
1441 basename of the source.
1442
1442
1443 The location of the source is added to the new repository's
1443 The location of the source is added to the new repository's
1444 ``.hg/hgrc`` file, as the default to be used for future pulls.
1444 ``.hg/hgrc`` file, as the default to be used for future pulls.
1445
1445
1446 Only local paths and ``ssh://`` URLs are supported as
1446 Only local paths and ``ssh://`` URLs are supported as
1447 destinations. For ``ssh://`` destinations, no working directory or
1447 destinations. For ``ssh://`` destinations, no working directory or
1448 ``.hg/hgrc`` will be created on the remote side.
1448 ``.hg/hgrc`` will be created on the remote side.
1449
1449
1450 If the source repository has a bookmark called '@' set, that
1450 If the source repository has a bookmark called '@' set, that
1451 revision will be checked out in the new repository by default.
1451 revision will be checked out in the new repository by default.
1452
1452
1453 To check out a particular version, use -u/--update, or
1453 To check out a particular version, use -u/--update, or
1454 -U/--noupdate to create a clone with no working directory.
1454 -U/--noupdate to create a clone with no working directory.
1455
1455
1456 To pull only a subset of changesets, specify one or more revisions
1456 To pull only a subset of changesets, specify one or more revisions
1457 identifiers with -r/--rev or branches with -b/--branch. The
1457 identifiers with -r/--rev or branches with -b/--branch. The
1458 resulting clone will contain only the specified changesets and
1458 resulting clone will contain only the specified changesets and
1459 their ancestors. These options (or 'clone src#rev dest') imply
1459 their ancestors. These options (or 'clone src#rev dest') imply
1460 --pull, even for local source repositories.
1460 --pull, even for local source repositories.
1461
1461
1462 In normal clone mode, the remote normalizes repository data into a common
1462 In normal clone mode, the remote normalizes repository data into a common
1463 exchange format and the receiving end translates this data into its local
1463 exchange format and the receiving end translates this data into its local
1464 storage format. --stream activates a different clone mode that essentially
1464 storage format. --stream activates a different clone mode that essentially
1465 copies repository files from the remote with minimal data processing. This
1465 copies repository files from the remote with minimal data processing. This
1466 significantly reduces the CPU cost of a clone both remotely and locally.
1466 significantly reduces the CPU cost of a clone both remotely and locally.
1467 However, it often increases the transferred data size by 30-40%. This can
1467 However, it often increases the transferred data size by 30-40%. This can
1468 result in substantially faster clones where I/O throughput is plentiful,
1468 result in substantially faster clones where I/O throughput is plentiful,
1469 especially for larger repositories. A side-effect of --stream clones is
1469 especially for larger repositories. A side-effect of --stream clones is
1470 that storage settings and requirements on the remote are applied locally:
1470 that storage settings and requirements on the remote are applied locally:
1471 a modern client may inherit legacy or inefficient storage used by the
1471 a modern client may inherit legacy or inefficient storage used by the
1472 remote or a legacy Mercurial client may not be able to clone from a
1472 remote or a legacy Mercurial client may not be able to clone from a
1473 modern Mercurial remote.
1473 modern Mercurial remote.
1474
1474
1475 .. note::
1475 .. note::
1476
1476
1477 Specifying a tag will include the tagged changeset but not the
1477 Specifying a tag will include the tagged changeset but not the
1478 changeset containing the tag.
1478 changeset containing the tag.
1479
1479
1480 .. container:: verbose
1480 .. container:: verbose
1481
1481
1482 For efficiency, hardlinks are used for cloning whenever the
1482 For efficiency, hardlinks are used for cloning whenever the
1483 source and destination are on the same filesystem (note this
1483 source and destination are on the same filesystem (note this
1484 applies only to the repository data, not to the working
1484 applies only to the repository data, not to the working
1485 directory). Some filesystems, such as AFS, implement hardlinking
1485 directory). Some filesystems, such as AFS, implement hardlinking
1486 incorrectly, but do not report errors. In these cases, use the
1486 incorrectly, but do not report errors. In these cases, use the
1487 --pull option to avoid hardlinking.
1487 --pull option to avoid hardlinking.
1488
1488
1489 Mercurial will update the working directory to the first applicable
1489 Mercurial will update the working directory to the first applicable
1490 revision from this list:
1490 revision from this list:
1491
1491
1492 a) null if -U or the source repository has no changesets
1492 a) null if -U or the source repository has no changesets
1493 b) if -u . and the source repository is local, the first parent of
1493 b) if -u . and the source repository is local, the first parent of
1494 the source repository's working directory
1494 the source repository's working directory
1495 c) the changeset specified with -u (if a branch name, this means the
1495 c) the changeset specified with -u (if a branch name, this means the
1496 latest head of that branch)
1496 latest head of that branch)
1497 d) the changeset specified with -r
1497 d) the changeset specified with -r
1498 e) the tipmost head specified with -b
1498 e) the tipmost head specified with -b
1499 f) the tipmost head specified with the url#branch source syntax
1499 f) the tipmost head specified with the url#branch source syntax
1500 g) the revision marked with the '@' bookmark, if present
1500 g) the revision marked with the '@' bookmark, if present
1501 h) the tipmost head of the default branch
1501 h) the tipmost head of the default branch
1502 i) tip
1502 i) tip
1503
1503
1504 When cloning from servers that support it, Mercurial may fetch
1504 When cloning from servers that support it, Mercurial may fetch
1505 pre-generated data from a server-advertised URL or inline from the
1505 pre-generated data from a server-advertised URL or inline from the
1506 same stream. When this is done, hooks operating on incoming changesets
1506 same stream. When this is done, hooks operating on incoming changesets
1507 and changegroups may fire more than once, once for each pre-generated
1507 and changegroups may fire more than once, once for each pre-generated
1508 bundle and as well as for any additional remaining data. In addition,
1508 bundle and as well as for any additional remaining data. In addition,
1509 if an error occurs, the repository may be rolled back to a partial
1509 if an error occurs, the repository may be rolled back to a partial
1510 clone. This behavior may change in future releases.
1510 clone. This behavior may change in future releases.
1511 See :hg:`help -e clonebundles` for more.
1511 See :hg:`help -e clonebundles` for more.
1512
1512
1513 Examples:
1513 Examples:
1514
1514
1515 - clone a remote repository to a new directory named hg/::
1515 - clone a remote repository to a new directory named hg/::
1516
1516
1517 hg clone https://www.mercurial-scm.org/repo/hg/
1517 hg clone https://www.mercurial-scm.org/repo/hg/
1518
1518
1519 - create a lightweight local clone::
1519 - create a lightweight local clone::
1520
1520
1521 hg clone project/ project-feature/
1521 hg clone project/ project-feature/
1522
1522
1523 - clone from an absolute path on an ssh server (note double-slash)::
1523 - clone from an absolute path on an ssh server (note double-slash)::
1524
1524
1525 hg clone ssh://user@server//home/projects/alpha/
1525 hg clone ssh://user@server//home/projects/alpha/
1526
1526
1527 - do a streaming clone while checking out a specified version::
1527 - do a streaming clone while checking out a specified version::
1528
1528
1529 hg clone --stream http://server/repo -u 1.5
1529 hg clone --stream http://server/repo -u 1.5
1530
1530
1531 - create a repository without changesets after a particular revision::
1531 - create a repository without changesets after a particular revision::
1532
1532
1533 hg clone -r 04e544 experimental/ good/
1533 hg clone -r 04e544 experimental/ good/
1534
1534
1535 - clone (and track) a particular named branch::
1535 - clone (and track) a particular named branch::
1536
1536
1537 hg clone https://www.mercurial-scm.org/repo/hg/#stable
1537 hg clone https://www.mercurial-scm.org/repo/hg/#stable
1538
1538
1539 See :hg:`help urls` for details on specifying URLs.
1539 See :hg:`help urls` for details on specifying URLs.
1540
1540
1541 Returns 0 on success.
1541 Returns 0 on success.
1542 """
1542 """
1543 opts = pycompat.byteskwargs(opts)
1543 opts = pycompat.byteskwargs(opts)
1544 if opts.get('noupdate') and opts.get('updaterev'):
1544 if opts.get('noupdate') and opts.get('updaterev'):
1545 raise error.Abort(_("cannot specify both --noupdate and --updaterev"))
1545 raise error.Abort(_("cannot specify both --noupdate and --updaterev"))
1546
1546
1547 # --include/--exclude can come from narrow or sparse.
1547 # --include/--exclude can come from narrow or sparse.
1548 includepats, excludepats = None, None
1548 includepats, excludepats = None, None
1549
1549
1550 # hg.clone() differentiates between None and an empty set. So make sure
1550 # hg.clone() differentiates between None and an empty set. So make sure
1551 # patterns are sets if narrow is requested without patterns.
1551 # patterns are sets if narrow is requested without patterns.
1552 if opts.get('narrow'):
1552 if opts.get('narrow'):
1553 includepats = set()
1553 includepats = set()
1554 excludepats = set()
1554 excludepats = set()
1555
1555
1556 if opts.get('include'):
1556 if opts.get('include'):
1557 includepats = narrowspec.parsepatterns(opts.get('include'))
1557 includepats = narrowspec.parsepatterns(opts.get('include'))
1558 if opts.get('exclude'):
1558 if opts.get('exclude'):
1559 excludepats = narrowspec.parsepatterns(opts.get('exclude'))
1559 excludepats = narrowspec.parsepatterns(opts.get('exclude'))
1560
1560
1561 r = hg.clone(ui, opts, source, dest,
1561 r = hg.clone(ui, opts, source, dest,
1562 pull=opts.get('pull'),
1562 pull=opts.get('pull'),
1563 stream=opts.get('stream') or opts.get('uncompressed'),
1563 stream=opts.get('stream') or opts.get('uncompressed'),
1564 revs=opts.get('rev'),
1564 revs=opts.get('rev'),
1565 update=opts.get('updaterev') or not opts.get('noupdate'),
1565 update=opts.get('updaterev') or not opts.get('noupdate'),
1566 branch=opts.get('branch'),
1566 branch=opts.get('branch'),
1567 shareopts=opts.get('shareopts'),
1567 shareopts=opts.get('shareopts'),
1568 storeincludepats=includepats,
1568 storeincludepats=includepats,
1569 storeexcludepats=excludepats,
1569 storeexcludepats=excludepats,
1570 depth=opts.get('depth') or None)
1570 depth=opts.get('depth') or None)
1571
1571
1572 return r is None
1572 return r is None
1573
1573
1574 @command('commit|ci',
1574 @command('commit|ci',
1575 [('A', 'addremove', None,
1575 [('A', 'addremove', None,
1576 _('mark new/missing files as added/removed before committing')),
1576 _('mark new/missing files as added/removed before committing')),
1577 ('', 'close-branch', None,
1577 ('', 'close-branch', None,
1578 _('mark a branch head as closed')),
1578 _('mark a branch head as closed')),
1579 ('', 'amend', None, _('amend the parent of the working directory')),
1579 ('', 'amend', None, _('amend the parent of the working directory')),
1580 ('s', 'secret', None, _('use the secret phase for committing')),
1580 ('s', 'secret', None, _('use the secret phase for committing')),
1581 ('e', 'edit', None, _('invoke editor on commit messages')),
1581 ('e', 'edit', None, _('invoke editor on commit messages')),
1582 ('i', 'interactive', None, _('use interactive mode')),
1582 ('i', 'interactive', None, _('use interactive mode')),
1583 ] + walkopts + commitopts + commitopts2 + subrepoopts,
1583 ] + walkopts + commitopts + commitopts2 + subrepoopts,
1584 _('[OPTION]... [FILE]...'),
1584 _('[OPTION]... [FILE]...'),
1585 helpcategory=command.CATEGORY_COMMITTING, helpbasic=True,
1585 helpcategory=command.CATEGORY_COMMITTING, helpbasic=True,
1586 inferrepo=True)
1586 inferrepo=True)
1587 def commit(ui, repo, *pats, **opts):
1587 def commit(ui, repo, *pats, **opts):
1588 """commit the specified files or all outstanding changes
1588 """commit the specified files or all outstanding changes
1589
1589
1590 Commit changes to the given files into the repository. Unlike a
1590 Commit changes to the given files into the repository. Unlike a
1591 centralized SCM, this operation is a local operation. See
1591 centralized SCM, this operation is a local operation. See
1592 :hg:`push` for a way to actively distribute your changes.
1592 :hg:`push` for a way to actively distribute your changes.
1593
1593
1594 If a list of files is omitted, all changes reported by :hg:`status`
1594 If a list of files is omitted, all changes reported by :hg:`status`
1595 will be committed.
1595 will be committed.
1596
1596
1597 If you are committing the result of a merge, do not provide any
1597 If you are committing the result of a merge, do not provide any
1598 filenames or -I/-X filters.
1598 filenames or -I/-X filters.
1599
1599
1600 If no commit message is specified, Mercurial starts your
1600 If no commit message is specified, Mercurial starts your
1601 configured editor where you can enter a message. In case your
1601 configured editor where you can enter a message. In case your
1602 commit fails, you will find a backup of your message in
1602 commit fails, you will find a backup of your message in
1603 ``.hg/last-message.txt``.
1603 ``.hg/last-message.txt``.
1604
1604
1605 The --close-branch flag can be used to mark the current branch
1605 The --close-branch flag can be used to mark the current branch
1606 head closed. When all heads of a branch are closed, the branch
1606 head closed. When all heads of a branch are closed, the branch
1607 will be considered closed and no longer listed.
1607 will be considered closed and no longer listed.
1608
1608
1609 The --amend flag can be used to amend the parent of the
1609 The --amend flag can be used to amend the parent of the
1610 working directory with a new commit that contains the changes
1610 working directory with a new commit that contains the changes
1611 in the parent in addition to those currently reported by :hg:`status`,
1611 in the parent in addition to those currently reported by :hg:`status`,
1612 if there are any. The old commit is stored in a backup bundle in
1612 if there are any. The old commit is stored in a backup bundle in
1613 ``.hg/strip-backup`` (see :hg:`help bundle` and :hg:`help unbundle`
1613 ``.hg/strip-backup`` (see :hg:`help bundle` and :hg:`help unbundle`
1614 on how to restore it).
1614 on how to restore it).
1615
1615
1616 Message, user and date are taken from the amended commit unless
1616 Message, user and date are taken from the amended commit unless
1617 specified. When a message isn't specified on the command line,
1617 specified. When a message isn't specified on the command line,
1618 the editor will open with the message of the amended commit.
1618 the editor will open with the message of the amended commit.
1619
1619
1620 It is not possible to amend public changesets (see :hg:`help phases`)
1620 It is not possible to amend public changesets (see :hg:`help phases`)
1621 or changesets that have children.
1621 or changesets that have children.
1622
1622
1623 See :hg:`help dates` for a list of formats valid for -d/--date.
1623 See :hg:`help dates` for a list of formats valid for -d/--date.
1624
1624
1625 Returns 0 on success, 1 if nothing changed.
1625 Returns 0 on success, 1 if nothing changed.
1626
1626
1627 .. container:: verbose
1627 .. container:: verbose
1628
1628
1629 Examples:
1629 Examples:
1630
1630
1631 - commit all files ending in .py::
1631 - commit all files ending in .py::
1632
1632
1633 hg commit --include "set:**.py"
1633 hg commit --include "set:**.py"
1634
1634
1635 - commit all non-binary files::
1635 - commit all non-binary files::
1636
1636
1637 hg commit --exclude "set:binary()"
1637 hg commit --exclude "set:binary()"
1638
1638
1639 - amend the current commit and set the date to now::
1639 - amend the current commit and set the date to now::
1640
1640
1641 hg commit --amend --date now
1641 hg commit --amend --date now
1642 """
1642 """
1643 with repo.wlock(), repo.lock():
1643 with repo.wlock(), repo.lock():
1644 return _docommit(ui, repo, *pats, **opts)
1644 return _docommit(ui, repo, *pats, **opts)
1645
1645
1646 def _docommit(ui, repo, *pats, **opts):
1646 def _docommit(ui, repo, *pats, **opts):
1647 if opts.get(r'interactive'):
1647 if opts.get(r'interactive'):
1648 opts.pop(r'interactive')
1648 opts.pop(r'interactive')
1649 ret = cmdutil.dorecord(ui, repo, commit, None, False,
1649 ret = cmdutil.dorecord(ui, repo, commit, None, False,
1650 cmdutil.recordfilter, *pats,
1650 cmdutil.recordfilter, *pats,
1651 **opts)
1651 **opts)
1652 # ret can be 0 (no changes to record) or the value returned by
1652 # ret can be 0 (no changes to record) or the value returned by
1653 # commit(), 1 if nothing changed or None on success.
1653 # commit(), 1 if nothing changed or None on success.
1654 return 1 if ret == 0 else ret
1654 return 1 if ret == 0 else ret
1655
1655
1656 opts = pycompat.byteskwargs(opts)
1656 opts = pycompat.byteskwargs(opts)
1657 if opts.get('subrepos'):
1657 if opts.get('subrepos'):
1658 if opts.get('amend'):
1658 if opts.get('amend'):
1659 raise error.Abort(_('cannot amend with --subrepos'))
1659 raise error.Abort(_('cannot amend with --subrepos'))
1660 # Let --subrepos on the command line override config setting.
1660 # Let --subrepos on the command line override config setting.
1661 ui.setconfig('ui', 'commitsubrepos', True, 'commit')
1661 ui.setconfig('ui', 'commitsubrepos', True, 'commit')
1662
1662
1663 cmdutil.checkunfinished(repo, commit=True)
1663 cmdutil.checkunfinished(repo, commit=True)
1664
1664
1665 branch = repo[None].branch()
1665 branch = repo[None].branch()
1666 bheads = repo.branchheads(branch)
1666 bheads = repo.branchheads(branch)
1667
1667
1668 extra = {}
1668 extra = {}
1669 if opts.get('close_branch'):
1669 if opts.get('close_branch'):
1670 extra['close'] = '1'
1670 extra['close'] = '1'
1671
1671
1672 if not bheads:
1672 if not bheads:
1673 raise error.Abort(_('can only close branch heads'))
1673 raise error.Abort(_('can only close branch heads'))
1674 elif opts.get('amend'):
1674 elif opts.get('amend'):
1675 if repo['.'].p1().branch() != branch and \
1675 if repo['.'].p1().branch() != branch and \
1676 repo['.'].p2().branch() != branch:
1676 repo['.'].p2().branch() != branch:
1677 raise error.Abort(_('can only close branch heads'))
1677 raise error.Abort(_('can only close branch heads'))
1678
1678
1679 if opts.get('amend'):
1679 if opts.get('amend'):
1680 if ui.configbool('ui', 'commitsubrepos'):
1680 if ui.configbool('ui', 'commitsubrepos'):
1681 raise error.Abort(_('cannot amend with ui.commitsubrepos enabled'))
1681 raise error.Abort(_('cannot amend with ui.commitsubrepos enabled'))
1682
1682
1683 old = repo['.']
1683 old = repo['.']
1684 rewriteutil.precheck(repo, [old.rev()], 'amend')
1684 rewriteutil.precheck(repo, [old.rev()], 'amend')
1685
1685
1686 # Currently histedit gets confused if an amend happens while histedit
1686 # Currently histedit gets confused if an amend happens while histedit
1687 # is in progress. Since we have a checkunfinished command, we are
1687 # is in progress. Since we have a checkunfinished command, we are
1688 # temporarily honoring it.
1688 # temporarily honoring it.
1689 #
1689 #
1690 # Note: eventually this guard will be removed. Please do not expect
1690 # Note: eventually this guard will be removed. Please do not expect
1691 # this behavior to remain.
1691 # this behavior to remain.
1692 if not obsolete.isenabled(repo, obsolete.createmarkersopt):
1692 if not obsolete.isenabled(repo, obsolete.createmarkersopt):
1693 cmdutil.checkunfinished(repo)
1693 cmdutil.checkunfinished(repo)
1694
1694
1695 node = cmdutil.amend(ui, repo, old, extra, pats, opts)
1695 node = cmdutil.amend(ui, repo, old, extra, pats, opts)
1696 if node == old.node():
1696 if node == old.node():
1697 ui.status(_("nothing changed\n"))
1697 ui.status(_("nothing changed\n"))
1698 return 1
1698 return 1
1699 else:
1699 else:
1700 def commitfunc(ui, repo, message, match, opts):
1700 def commitfunc(ui, repo, message, match, opts):
1701 overrides = {}
1701 overrides = {}
1702 if opts.get('secret'):
1702 if opts.get('secret'):
1703 overrides[('phases', 'new-commit')] = 'secret'
1703 overrides[('phases', 'new-commit')] = 'secret'
1704
1704
1705 baseui = repo.baseui
1705 baseui = repo.baseui
1706 with baseui.configoverride(overrides, 'commit'):
1706 with baseui.configoverride(overrides, 'commit'):
1707 with ui.configoverride(overrides, 'commit'):
1707 with ui.configoverride(overrides, 'commit'):
1708 editform = cmdutil.mergeeditform(repo[None],
1708 editform = cmdutil.mergeeditform(repo[None],
1709 'commit.normal')
1709 'commit.normal')
1710 editor = cmdutil.getcommiteditor(
1710 editor = cmdutil.getcommiteditor(
1711 editform=editform, **pycompat.strkwargs(opts))
1711 editform=editform, **pycompat.strkwargs(opts))
1712 return repo.commit(message,
1712 return repo.commit(message,
1713 opts.get('user'),
1713 opts.get('user'),
1714 opts.get('date'),
1714 opts.get('date'),
1715 match,
1715 match,
1716 editor=editor,
1716 editor=editor,
1717 extra=extra)
1717 extra=extra)
1718
1718
1719 node = cmdutil.commit(ui, repo, commitfunc, pats, opts)
1719 node = cmdutil.commit(ui, repo, commitfunc, pats, opts)
1720
1720
1721 if not node:
1721 if not node:
1722 stat = cmdutil.postcommitstatus(repo, pats, opts)
1722 stat = cmdutil.postcommitstatus(repo, pats, opts)
1723 if stat[3]:
1723 if stat[3]:
1724 ui.status(_("nothing changed (%d missing files, see "
1724 ui.status(_("nothing changed (%d missing files, see "
1725 "'hg status')\n") % len(stat[3]))
1725 "'hg status')\n") % len(stat[3]))
1726 else:
1726 else:
1727 ui.status(_("nothing changed\n"))
1727 ui.status(_("nothing changed\n"))
1728 return 1
1728 return 1
1729
1729
1730 cmdutil.commitstatus(repo, node, branch, bheads, opts)
1730 cmdutil.commitstatus(repo, node, branch, bheads, opts)
1731
1731
1732 @command('config|showconfig|debugconfig',
1732 @command('config|showconfig|debugconfig',
1733 [('u', 'untrusted', None, _('show untrusted configuration options')),
1733 [('u', 'untrusted', None, _('show untrusted configuration options')),
1734 ('e', 'edit', None, _('edit user config')),
1734 ('e', 'edit', None, _('edit user config')),
1735 ('l', 'local', None, _('edit repository config')),
1735 ('l', 'local', None, _('edit repository config')),
1736 ('g', 'global', None, _('edit global config'))] + formatteropts,
1736 ('g', 'global', None, _('edit global config'))] + formatteropts,
1737 _('[-u] [NAME]...'),
1737 _('[-u] [NAME]...'),
1738 helpcategory=command.CATEGORY_HELP,
1738 helpcategory=command.CATEGORY_HELP,
1739 optionalrepo=True,
1739 optionalrepo=True,
1740 intents={INTENT_READONLY})
1740 intents={INTENT_READONLY})
1741 def config(ui, repo, *values, **opts):
1741 def config(ui, repo, *values, **opts):
1742 """show combined config settings from all hgrc files
1742 """show combined config settings from all hgrc files
1743
1743
1744 With no arguments, print names and values of all config items.
1744 With no arguments, print names and values of all config items.
1745
1745
1746 With one argument of the form section.name, print just the value
1746 With one argument of the form section.name, print just the value
1747 of that config item.
1747 of that config item.
1748
1748
1749 With multiple arguments, print names and values of all config
1749 With multiple arguments, print names and values of all config
1750 items with matching section names or section.names.
1750 items with matching section names or section.names.
1751
1751
1752 With --edit, start an editor on the user-level config file. With
1752 With --edit, start an editor on the user-level config file. With
1753 --global, edit the system-wide config file. With --local, edit the
1753 --global, edit the system-wide config file. With --local, edit the
1754 repository-level config file.
1754 repository-level config file.
1755
1755
1756 With --debug, the source (filename and line number) is printed
1756 With --debug, the source (filename and line number) is printed
1757 for each config item.
1757 for each config item.
1758
1758
1759 See :hg:`help config` for more information about config files.
1759 See :hg:`help config` for more information about config files.
1760
1760
1761 .. container:: verbose
1761 .. container:: verbose
1762
1762
1763 Template:
1763 Template:
1764
1764
1765 The following keywords are supported. See also :hg:`help templates`.
1765 The following keywords are supported. See also :hg:`help templates`.
1766
1766
1767 :name: String. Config name.
1767 :name: String. Config name.
1768 :source: String. Filename and line number where the item is defined.
1768 :source: String. Filename and line number where the item is defined.
1769 :value: String. Config value.
1769 :value: String. Config value.
1770
1770
1771 Returns 0 on success, 1 if NAME does not exist.
1771 Returns 0 on success, 1 if NAME does not exist.
1772
1772
1773 """
1773 """
1774
1774
1775 opts = pycompat.byteskwargs(opts)
1775 opts = pycompat.byteskwargs(opts)
1776 if opts.get('edit') or opts.get('local') or opts.get('global'):
1776 if opts.get('edit') or opts.get('local') or opts.get('global'):
1777 if opts.get('local') and opts.get('global'):
1777 if opts.get('local') and opts.get('global'):
1778 raise error.Abort(_("can't use --local and --global together"))
1778 raise error.Abort(_("can't use --local and --global together"))
1779
1779
1780 if opts.get('local'):
1780 if opts.get('local'):
1781 if not repo:
1781 if not repo:
1782 raise error.Abort(_("can't use --local outside a repository"))
1782 raise error.Abort(_("can't use --local outside a repository"))
1783 paths = [repo.vfs.join('hgrc')]
1783 paths = [repo.vfs.join('hgrc')]
1784 elif opts.get('global'):
1784 elif opts.get('global'):
1785 paths = rcutil.systemrcpath()
1785 paths = rcutil.systemrcpath()
1786 else:
1786 else:
1787 paths = rcutil.userrcpath()
1787 paths = rcutil.userrcpath()
1788
1788
1789 for f in paths:
1789 for f in paths:
1790 if os.path.exists(f):
1790 if os.path.exists(f):
1791 break
1791 break
1792 else:
1792 else:
1793 if opts.get('global'):
1793 if opts.get('global'):
1794 samplehgrc = uimod.samplehgrcs['global']
1794 samplehgrc = uimod.samplehgrcs['global']
1795 elif opts.get('local'):
1795 elif opts.get('local'):
1796 samplehgrc = uimod.samplehgrcs['local']
1796 samplehgrc = uimod.samplehgrcs['local']
1797 else:
1797 else:
1798 samplehgrc = uimod.samplehgrcs['user']
1798 samplehgrc = uimod.samplehgrcs['user']
1799
1799
1800 f = paths[0]
1800 f = paths[0]
1801 fp = open(f, "wb")
1801 fp = open(f, "wb")
1802 fp.write(util.tonativeeol(samplehgrc))
1802 fp.write(util.tonativeeol(samplehgrc))
1803 fp.close()
1803 fp.close()
1804
1804
1805 editor = ui.geteditor()
1805 editor = ui.geteditor()
1806 ui.system("%s \"%s\"" % (editor, f),
1806 ui.system("%s \"%s\"" % (editor, f),
1807 onerr=error.Abort, errprefix=_("edit failed"),
1807 onerr=error.Abort, errprefix=_("edit failed"),
1808 blockedtag='config_edit')
1808 blockedtag='config_edit')
1809 return
1809 return
1810 ui.pager('config')
1810 ui.pager('config')
1811 fm = ui.formatter('config', opts)
1811 fm = ui.formatter('config', opts)
1812 for t, f in rcutil.rccomponents():
1812 for t, f in rcutil.rccomponents():
1813 if t == 'path':
1813 if t == 'path':
1814 ui.debug('read config from: %s\n' % f)
1814 ui.debug('read config from: %s\n' % f)
1815 elif t == 'items':
1815 elif t == 'items':
1816 for section, name, value, source in f:
1816 for section, name, value, source in f:
1817 ui.debug('set config by: %s\n' % source)
1817 ui.debug('set config by: %s\n' % source)
1818 else:
1818 else:
1819 raise error.ProgrammingError('unknown rctype: %s' % t)
1819 raise error.ProgrammingError('unknown rctype: %s' % t)
1820 untrusted = bool(opts.get('untrusted'))
1820 untrusted = bool(opts.get('untrusted'))
1821
1821
1822 selsections = selentries = []
1822 selsections = selentries = []
1823 if values:
1823 if values:
1824 selsections = [v for v in values if '.' not in v]
1824 selsections = [v for v in values if '.' not in v]
1825 selentries = [v for v in values if '.' in v]
1825 selentries = [v for v in values if '.' in v]
1826 uniquesel = (len(selentries) == 1 and not selsections)
1826 uniquesel = (len(selentries) == 1 and not selsections)
1827 selsections = set(selsections)
1827 selsections = set(selsections)
1828 selentries = set(selentries)
1828 selentries = set(selentries)
1829
1829
1830 matched = False
1830 matched = False
1831 for section, name, value in ui.walkconfig(untrusted=untrusted):
1831 for section, name, value in ui.walkconfig(untrusted=untrusted):
1832 source = ui.configsource(section, name, untrusted)
1832 source = ui.configsource(section, name, untrusted)
1833 value = pycompat.bytestr(value)
1833 value = pycompat.bytestr(value)
1834 if fm.isplain():
1834 if fm.isplain():
1835 source = source or 'none'
1835 source = source or 'none'
1836 value = value.replace('\n', '\\n')
1836 value = value.replace('\n', '\\n')
1837 entryname = section + '.' + name
1837 entryname = section + '.' + name
1838 if values and not (section in selsections or entryname in selentries):
1838 if values and not (section in selsections or entryname in selentries):
1839 continue
1839 continue
1840 fm.startitem()
1840 fm.startitem()
1841 fm.condwrite(ui.debugflag, 'source', '%s: ', source)
1841 fm.condwrite(ui.debugflag, 'source', '%s: ', source)
1842 if uniquesel:
1842 if uniquesel:
1843 fm.data(name=entryname)
1843 fm.data(name=entryname)
1844 fm.write('value', '%s\n', value)
1844 fm.write('value', '%s\n', value)
1845 else:
1845 else:
1846 fm.write('name value', '%s=%s\n', entryname, value)
1846 fm.write('name value', '%s=%s\n', entryname, value)
1847 matched = True
1847 matched = True
1848 fm.end()
1848 fm.end()
1849 if matched:
1849 if matched:
1850 return 0
1850 return 0
1851 return 1
1851 return 1
1852
1852
1853 @command('copy|cp',
1853 @command('copy|cp',
1854 [('A', 'after', None, _('record a copy that has already occurred')),
1854 [('A', 'after', None, _('record a copy that has already occurred')),
1855 ('f', 'force', None, _('forcibly copy over an existing managed file')),
1855 ('f', 'force', None, _('forcibly copy over an existing managed file')),
1856 ] + walkopts + dryrunopts,
1856 ] + walkopts + dryrunopts,
1857 _('[OPTION]... [SOURCE]... DEST'),
1857 _('[OPTION]... [SOURCE]... DEST'),
1858 helpcategory=command.CATEGORY_FILE_CONTENTS)
1858 helpcategory=command.CATEGORY_FILE_CONTENTS)
1859 def copy(ui, repo, *pats, **opts):
1859 def copy(ui, repo, *pats, **opts):
1860 """mark files as copied for the next commit
1860 """mark files as copied for the next commit
1861
1861
1862 Mark dest as having copies of source files. If dest is a
1862 Mark dest as having copies of source files. If dest is a
1863 directory, copies are put in that directory. If dest is a file,
1863 directory, copies are put in that directory. If dest is a file,
1864 the source must be a single file.
1864 the source must be a single file.
1865
1865
1866 By default, this command copies the contents of files as they
1866 By default, this command copies the contents of files as they
1867 exist in the working directory. If invoked with -A/--after, the
1867 exist in the working directory. If invoked with -A/--after, the
1868 operation is recorded, but no copying is performed.
1868 operation is recorded, but no copying is performed.
1869
1869
1870 This command takes effect with the next commit. To undo a copy
1870 This command takes effect with the next commit. To undo a copy
1871 before that, see :hg:`revert`.
1871 before that, see :hg:`revert`.
1872
1872
1873 Returns 0 on success, 1 if errors are encountered.
1873 Returns 0 on success, 1 if errors are encountered.
1874 """
1874 """
1875 opts = pycompat.byteskwargs(opts)
1875 opts = pycompat.byteskwargs(opts)
1876 with repo.wlock(False):
1876 with repo.wlock(False):
1877 return cmdutil.copy(ui, repo, pats, opts)
1877 return cmdutil.copy(ui, repo, pats, opts)
1878
1878
1879 @command(
1879 @command(
1880 'debugcommands', [], _('[COMMAND]'),
1880 'debugcommands', [], _('[COMMAND]'),
1881 helpcategory=command.CATEGORY_HELP,
1881 helpcategory=command.CATEGORY_HELP,
1882 norepo=True)
1882 norepo=True)
1883 def debugcommands(ui, cmd='', *args):
1883 def debugcommands(ui, cmd='', *args):
1884 """list all available commands and options"""
1884 """list all available commands and options"""
1885 for cmd, vals in sorted(table.iteritems()):
1885 for cmd, vals in sorted(table.iteritems()):
1886 cmd = cmd.split('|')[0]
1886 cmd = cmd.split('|')[0]
1887 opts = ', '.join([i[1] for i in vals[1]])
1887 opts = ', '.join([i[1] for i in vals[1]])
1888 ui.write('%s: %s\n' % (cmd, opts))
1888 ui.write('%s: %s\n' % (cmd, opts))
1889
1889
1890 @command('debugcomplete',
1890 @command('debugcomplete',
1891 [('o', 'options', None, _('show the command options'))],
1891 [('o', 'options', None, _('show the command options'))],
1892 _('[-o] CMD'),
1892 _('[-o] CMD'),
1893 helpcategory=command.CATEGORY_HELP,
1893 helpcategory=command.CATEGORY_HELP,
1894 norepo=True)
1894 norepo=True)
1895 def debugcomplete(ui, cmd='', **opts):
1895 def debugcomplete(ui, cmd='', **opts):
1896 """returns the completion list associated with the given command"""
1896 """returns the completion list associated with the given command"""
1897
1897
1898 if opts.get(r'options'):
1898 if opts.get(r'options'):
1899 options = []
1899 options = []
1900 otables = [globalopts]
1900 otables = [globalopts]
1901 if cmd:
1901 if cmd:
1902 aliases, entry = cmdutil.findcmd(cmd, table, False)
1902 aliases, entry = cmdutil.findcmd(cmd, table, False)
1903 otables.append(entry[1])
1903 otables.append(entry[1])
1904 for t in otables:
1904 for t in otables:
1905 for o in t:
1905 for o in t:
1906 if "(DEPRECATED)" in o[3]:
1906 if "(DEPRECATED)" in o[3]:
1907 continue
1907 continue
1908 if o[0]:
1908 if o[0]:
1909 options.append('-%s' % o[0])
1909 options.append('-%s' % o[0])
1910 options.append('--%s' % o[1])
1910 options.append('--%s' % o[1])
1911 ui.write("%s\n" % "\n".join(options))
1911 ui.write("%s\n" % "\n".join(options))
1912 return
1912 return
1913
1913
1914 cmdlist, unused_allcmds = cmdutil.findpossible(cmd, table)
1914 cmdlist, unused_allcmds = cmdutil.findpossible(cmd, table)
1915 if ui.verbose:
1915 if ui.verbose:
1916 cmdlist = [' '.join(c[0]) for c in cmdlist.values()]
1916 cmdlist = [' '.join(c[0]) for c in cmdlist.values()]
1917 ui.write("%s\n" % "\n".join(sorted(cmdlist)))
1917 ui.write("%s\n" % "\n".join(sorted(cmdlist)))
1918
1918
1919 @command('diff',
1919 @command('diff',
1920 [('r', 'rev', [], _('revision'), _('REV')),
1920 [('r', 'rev', [], _('revision'), _('REV')),
1921 ('c', 'change', '', _('change made by revision'), _('REV'))
1921 ('c', 'change', '', _('change made by revision'), _('REV'))
1922 ] + diffopts + diffopts2 + walkopts + subrepoopts,
1922 ] + diffopts + diffopts2 + walkopts + subrepoopts,
1923 _('[OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...'),
1923 _('[OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...'),
1924 helpcategory=command.CATEGORY_FILE_CONTENTS,
1924 helpcategory=command.CATEGORY_FILE_CONTENTS,
1925 helpbasic=True, inferrepo=True, intents={INTENT_READONLY})
1925 helpbasic=True, inferrepo=True, intents={INTENT_READONLY})
1926 def diff(ui, repo, *pats, **opts):
1926 def diff(ui, repo, *pats, **opts):
1927 """diff repository (or selected files)
1927 """diff repository (or selected files)
1928
1928
1929 Show differences between revisions for the specified files.
1929 Show differences between revisions for the specified files.
1930
1930
1931 Differences between files are shown using the unified diff format.
1931 Differences between files are shown using the unified diff format.
1932
1932
1933 .. note::
1933 .. note::
1934
1934
1935 :hg:`diff` may generate unexpected results for merges, as it will
1935 :hg:`diff` may generate unexpected results for merges, as it will
1936 default to comparing against the working directory's first
1936 default to comparing against the working directory's first
1937 parent changeset if no revisions are specified.
1937 parent changeset if no revisions are specified.
1938
1938
1939 When two revision arguments are given, then changes are shown
1939 When two revision arguments are given, then changes are shown
1940 between those revisions. If only one revision is specified then
1940 between those revisions. If only one revision is specified then
1941 that revision is compared to the working directory, and, when no
1941 that revision is compared to the working directory, and, when no
1942 revisions are specified, the working directory files are compared
1942 revisions are specified, the working directory files are compared
1943 to its first parent.
1943 to its first parent.
1944
1944
1945 Alternatively you can specify -c/--change with a revision to see
1945 Alternatively you can specify -c/--change with a revision to see
1946 the changes in that changeset relative to its first parent.
1946 the changes in that changeset relative to its first parent.
1947
1947
1948 Without the -a/--text option, diff will avoid generating diffs of
1948 Without the -a/--text option, diff will avoid generating diffs of
1949 files it detects as binary. With -a, diff will generate a diff
1949 files it detects as binary. With -a, diff will generate a diff
1950 anyway, probably with undesirable results.
1950 anyway, probably with undesirable results.
1951
1951
1952 Use the -g/--git option to generate diffs in the git extended diff
1952 Use the -g/--git option to generate diffs in the git extended diff
1953 format. For more information, read :hg:`help diffs`.
1953 format. For more information, read :hg:`help diffs`.
1954
1954
1955 .. container:: verbose
1955 .. container:: verbose
1956
1956
1957 Examples:
1957 Examples:
1958
1958
1959 - compare a file in the current working directory to its parent::
1959 - compare a file in the current working directory to its parent::
1960
1960
1961 hg diff foo.c
1961 hg diff foo.c
1962
1962
1963 - compare two historical versions of a directory, with rename info::
1963 - compare two historical versions of a directory, with rename info::
1964
1964
1965 hg diff --git -r 1.0:1.2 lib/
1965 hg diff --git -r 1.0:1.2 lib/
1966
1966
1967 - get change stats relative to the last change on some date::
1967 - get change stats relative to the last change on some date::
1968
1968
1969 hg diff --stat -r "date('may 2')"
1969 hg diff --stat -r "date('may 2')"
1970
1970
1971 - diff all newly-added files that contain a keyword::
1971 - diff all newly-added files that contain a keyword::
1972
1972
1973 hg diff "set:added() and grep(GNU)"
1973 hg diff "set:added() and grep(GNU)"
1974
1974
1975 - compare a revision and its parents::
1975 - compare a revision and its parents::
1976
1976
1977 hg diff -c 9353 # compare against first parent
1977 hg diff -c 9353 # compare against first parent
1978 hg diff -r 9353^:9353 # same using revset syntax
1978 hg diff -r 9353^:9353 # same using revset syntax
1979 hg diff -r 9353^2:9353 # compare against the second parent
1979 hg diff -r 9353^2:9353 # compare against the second parent
1980
1980
1981 Returns 0 on success.
1981 Returns 0 on success.
1982 """
1982 """
1983
1983
1984 opts = pycompat.byteskwargs(opts)
1984 opts = pycompat.byteskwargs(opts)
1985 revs = opts.get('rev')
1985 revs = opts.get('rev')
1986 change = opts.get('change')
1986 change = opts.get('change')
1987 stat = opts.get('stat')
1987 stat = opts.get('stat')
1988 reverse = opts.get('reverse')
1988 reverse = opts.get('reverse')
1989
1989
1990 if revs and change:
1990 if revs and change:
1991 msg = _('cannot specify --rev and --change at the same time')
1991 msg = _('cannot specify --rev and --change at the same time')
1992 raise error.Abort(msg)
1992 raise error.Abort(msg)
1993 elif change:
1993 elif change:
1994 repo = scmutil.unhidehashlikerevs(repo, [change], 'nowarn')
1994 repo = scmutil.unhidehashlikerevs(repo, [change], 'nowarn')
1995 ctx2 = scmutil.revsingle(repo, change, None)
1995 ctx2 = scmutil.revsingle(repo, change, None)
1996 ctx1 = ctx2.p1()
1996 ctx1 = ctx2.p1()
1997 else:
1997 else:
1998 repo = scmutil.unhidehashlikerevs(repo, revs, 'nowarn')
1998 repo = scmutil.unhidehashlikerevs(repo, revs, 'nowarn')
1999 ctx1, ctx2 = scmutil.revpair(repo, revs)
1999 ctx1, ctx2 = scmutil.revpair(repo, revs)
2000 node1, node2 = ctx1.node(), ctx2.node()
2000 node1, node2 = ctx1.node(), ctx2.node()
2001
2001
2002 if reverse:
2002 if reverse:
2003 node1, node2 = node2, node1
2003 node1, node2 = node2, node1
2004
2004
2005 diffopts = patch.diffallopts(ui, opts)
2005 diffopts = patch.diffallopts(ui, opts)
2006 m = scmutil.match(ctx2, pats, opts)
2006 m = scmutil.match(ctx2, pats, opts)
2007 m = repo.narrowmatch(m)
2007 m = repo.narrowmatch(m)
2008 ui.pager('diff')
2008 ui.pager('diff')
2009 logcmdutil.diffordiffstat(ui, repo, diffopts, node1, node2, m, stat=stat,
2009 logcmdutil.diffordiffstat(ui, repo, diffopts, node1, node2, m, stat=stat,
2010 listsubrepos=opts.get('subrepos'),
2010 listsubrepos=opts.get('subrepos'),
2011 root=opts.get('root'))
2011 root=opts.get('root'))
2012
2012
2013 @command('export',
2013 @command('export',
2014 [('B', 'bookmark', '',
2014 [('B', 'bookmark', '',
2015 _('export changes only reachable by given bookmark'), _('BOOKMARK')),
2015 _('export changes only reachable by given bookmark'), _('BOOKMARK')),
2016 ('o', 'output', '',
2016 ('o', 'output', '',
2017 _('print output to file with formatted name'), _('FORMAT')),
2017 _('print output to file with formatted name'), _('FORMAT')),
2018 ('', 'switch-parent', None, _('diff against the second parent')),
2018 ('', 'switch-parent', None, _('diff against the second parent')),
2019 ('r', 'rev', [], _('revisions to export'), _('REV')),
2019 ('r', 'rev', [], _('revisions to export'), _('REV')),
2020 ] + diffopts + formatteropts,
2020 ] + diffopts + formatteropts,
2021 _('[OPTION]... [-o OUTFILESPEC] [-r] [REV]...'),
2021 _('[OPTION]... [-o OUTFILESPEC] [-r] [REV]...'),
2022 helpcategory=command.CATEGORY_IMPORT_EXPORT,
2022 helpcategory=command.CATEGORY_IMPORT_EXPORT,
2023 helpbasic=True, intents={INTENT_READONLY})
2023 helpbasic=True, intents={INTENT_READONLY})
2024 def export(ui, repo, *changesets, **opts):
2024 def export(ui, repo, *changesets, **opts):
2025 """dump the header and diffs for one or more changesets
2025 """dump the header and diffs for one or more changesets
2026
2026
2027 Print the changeset header and diffs for one or more revisions.
2027 Print the changeset header and diffs for one or more revisions.
2028 If no revision is given, the parent of the working directory is used.
2028 If no revision is given, the parent of the working directory is used.
2029
2029
2030 The information shown in the changeset header is: author, date,
2030 The information shown in the changeset header is: author, date,
2031 branch name (if non-default), changeset hash, parent(s) and commit
2031 branch name (if non-default), changeset hash, parent(s) and commit
2032 comment.
2032 comment.
2033
2033
2034 .. note::
2034 .. note::
2035
2035
2036 :hg:`export` may generate unexpected diff output for merge
2036 :hg:`export` may generate unexpected diff output for merge
2037 changesets, as it will compare the merge changeset against its
2037 changesets, as it will compare the merge changeset against its
2038 first parent only.
2038 first parent only.
2039
2039
2040 Output may be to a file, in which case the name of the file is
2040 Output may be to a file, in which case the name of the file is
2041 given using a template string. See :hg:`help templates`. In addition
2041 given using a template string. See :hg:`help templates`. In addition
2042 to the common template keywords, the following formatting rules are
2042 to the common template keywords, the following formatting rules are
2043 supported:
2043 supported:
2044
2044
2045 :``%%``: literal "%" character
2045 :``%%``: literal "%" character
2046 :``%H``: changeset hash (40 hexadecimal digits)
2046 :``%H``: changeset hash (40 hexadecimal digits)
2047 :``%N``: number of patches being generated
2047 :``%N``: number of patches being generated
2048 :``%R``: changeset revision number
2048 :``%R``: changeset revision number
2049 :``%b``: basename of the exporting repository
2049 :``%b``: basename of the exporting repository
2050 :``%h``: short-form changeset hash (12 hexadecimal digits)
2050 :``%h``: short-form changeset hash (12 hexadecimal digits)
2051 :``%m``: first line of the commit message (only alphanumeric characters)
2051 :``%m``: first line of the commit message (only alphanumeric characters)
2052 :``%n``: zero-padded sequence number, starting at 1
2052 :``%n``: zero-padded sequence number, starting at 1
2053 :``%r``: zero-padded changeset revision number
2053 :``%r``: zero-padded changeset revision number
2054 :``\\``: literal "\\" character
2054 :``\\``: literal "\\" character
2055
2055
2056 Without the -a/--text option, export will avoid generating diffs
2056 Without the -a/--text option, export will avoid generating diffs
2057 of files it detects as binary. With -a, export will generate a
2057 of files it detects as binary. With -a, export will generate a
2058 diff anyway, probably with undesirable results.
2058 diff anyway, probably with undesirable results.
2059
2059
2060 With -B/--bookmark changesets reachable by the given bookmark are
2060 With -B/--bookmark changesets reachable by the given bookmark are
2061 selected.
2061 selected.
2062
2062
2063 Use the -g/--git option to generate diffs in the git extended diff
2063 Use the -g/--git option to generate diffs in the git extended diff
2064 format. See :hg:`help diffs` for more information.
2064 format. See :hg:`help diffs` for more information.
2065
2065
2066 With the --switch-parent option, the diff will be against the
2066 With the --switch-parent option, the diff will be against the
2067 second parent. It can be useful to review a merge.
2067 second parent. It can be useful to review a merge.
2068
2068
2069 .. container:: verbose
2069 .. container:: verbose
2070
2070
2071 Template:
2071 Template:
2072
2072
2073 The following keywords are supported in addition to the common template
2073 The following keywords are supported in addition to the common template
2074 keywords and functions. See also :hg:`help templates`.
2074 keywords and functions. See also :hg:`help templates`.
2075
2075
2076 :diff: String. Diff content.
2076 :diff: String. Diff content.
2077 :parents: List of strings. Parent nodes of the changeset.
2077 :parents: List of strings. Parent nodes of the changeset.
2078
2078
2079 Examples:
2079 Examples:
2080
2080
2081 - use export and import to transplant a bugfix to the current
2081 - use export and import to transplant a bugfix to the current
2082 branch::
2082 branch::
2083
2083
2084 hg export -r 9353 | hg import -
2084 hg export -r 9353 | hg import -
2085
2085
2086 - export all the changesets between two revisions to a file with
2086 - export all the changesets between two revisions to a file with
2087 rename information::
2087 rename information::
2088
2088
2089 hg export --git -r 123:150 > changes.txt
2089 hg export --git -r 123:150 > changes.txt
2090
2090
2091 - split outgoing changes into a series of patches with
2091 - split outgoing changes into a series of patches with
2092 descriptive names::
2092 descriptive names::
2093
2093
2094 hg export -r "outgoing()" -o "%n-%m.patch"
2094 hg export -r "outgoing()" -o "%n-%m.patch"
2095
2095
2096 Returns 0 on success.
2096 Returns 0 on success.
2097 """
2097 """
2098 opts = pycompat.byteskwargs(opts)
2098 opts = pycompat.byteskwargs(opts)
2099 bookmark = opts.get('bookmark')
2099 bookmark = opts.get('bookmark')
2100 changesets += tuple(opts.get('rev', []))
2100 changesets += tuple(opts.get('rev', []))
2101
2101
2102 if bookmark and changesets:
2102 if bookmark and changesets:
2103 raise error.Abort(_("-r and -B are mutually exclusive"))
2103 raise error.Abort(_("-r and -B are mutually exclusive"))
2104
2104
2105 if bookmark:
2105 if bookmark:
2106 if bookmark not in repo._bookmarks:
2106 if bookmark not in repo._bookmarks:
2107 raise error.Abort(_("bookmark '%s' not found") % bookmark)
2107 raise error.Abort(_("bookmark '%s' not found") % bookmark)
2108
2108
2109 revs = scmutil.bookmarkrevs(repo, bookmark)
2109 revs = scmutil.bookmarkrevs(repo, bookmark)
2110 else:
2110 else:
2111 if not changesets:
2111 if not changesets:
2112 changesets = ['.']
2112 changesets = ['.']
2113
2113
2114 repo = scmutil.unhidehashlikerevs(repo, changesets, 'nowarn')
2114 repo = scmutil.unhidehashlikerevs(repo, changesets, 'nowarn')
2115 revs = scmutil.revrange(repo, changesets)
2115 revs = scmutil.revrange(repo, changesets)
2116
2116
2117 if not revs:
2117 if not revs:
2118 raise error.Abort(_("export requires at least one changeset"))
2118 raise error.Abort(_("export requires at least one changeset"))
2119 if len(revs) > 1:
2119 if len(revs) > 1:
2120 ui.note(_('exporting patches:\n'))
2120 ui.note(_('exporting patches:\n'))
2121 else:
2121 else:
2122 ui.note(_('exporting patch:\n'))
2122 ui.note(_('exporting patch:\n'))
2123
2123
2124 fntemplate = opts.get('output')
2124 fntemplate = opts.get('output')
2125 if cmdutil.isstdiofilename(fntemplate):
2125 if cmdutil.isstdiofilename(fntemplate):
2126 fntemplate = ''
2126 fntemplate = ''
2127
2127
2128 if fntemplate:
2128 if fntemplate:
2129 fm = formatter.nullformatter(ui, 'export', opts)
2129 fm = formatter.nullformatter(ui, 'export', opts)
2130 else:
2130 else:
2131 ui.pager('export')
2131 ui.pager('export')
2132 fm = ui.formatter('export', opts)
2132 fm = ui.formatter('export', opts)
2133 with fm:
2133 with fm:
2134 cmdutil.export(repo, revs, fm, fntemplate=fntemplate,
2134 cmdutil.export(repo, revs, fm, fntemplate=fntemplate,
2135 switch_parent=opts.get('switch_parent'),
2135 switch_parent=opts.get('switch_parent'),
2136 opts=patch.diffallopts(ui, opts))
2136 opts=patch.diffallopts(ui, opts))
2137
2137
2138 @command('files',
2138 @command('files',
2139 [('r', 'rev', '', _('search the repository as it is in REV'), _('REV')),
2139 [('r', 'rev', '', _('search the repository as it is in REV'), _('REV')),
2140 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
2140 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
2141 ] + walkopts + formatteropts + subrepoopts,
2141 ] + walkopts + formatteropts + subrepoopts,
2142 _('[OPTION]... [FILE]...'),
2142 _('[OPTION]... [FILE]...'),
2143 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
2143 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
2144 intents={INTENT_READONLY})
2144 intents={INTENT_READONLY})
2145 def files(ui, repo, *pats, **opts):
2145 def files(ui, repo, *pats, **opts):
2146 """list tracked files
2146 """list tracked files
2147
2147
2148 Print files under Mercurial control in the working directory or
2148 Print files under Mercurial control in the working directory or
2149 specified revision for given files (excluding removed files).
2149 specified revision for given files (excluding removed files).
2150 Files can be specified as filenames or filesets.
2150 Files can be specified as filenames or filesets.
2151
2151
2152 If no files are given to match, this command prints the names
2152 If no files are given to match, this command prints the names
2153 of all files under Mercurial control.
2153 of all files under Mercurial control.
2154
2154
2155 .. container:: verbose
2155 .. container:: verbose
2156
2156
2157 Template:
2157 Template:
2158
2158
2159 The following keywords are supported in addition to the common template
2159 The following keywords are supported in addition to the common template
2160 keywords and functions. See also :hg:`help templates`.
2160 keywords and functions. See also :hg:`help templates`.
2161
2161
2162 :flags: String. Character denoting file's symlink and executable bits.
2162 :flags: String. Character denoting file's symlink and executable bits.
2163 :path: String. Repository-absolute path of the file.
2163 :path: String. Repository-absolute path of the file.
2164 :size: Integer. Size of the file in bytes.
2164 :size: Integer. Size of the file in bytes.
2165
2165
2166 Examples:
2166 Examples:
2167
2167
2168 - list all files under the current directory::
2168 - list all files under the current directory::
2169
2169
2170 hg files .
2170 hg files .
2171
2171
2172 - shows sizes and flags for current revision::
2172 - shows sizes and flags for current revision::
2173
2173
2174 hg files -vr .
2174 hg files -vr .
2175
2175
2176 - list all files named README::
2176 - list all files named README::
2177
2177
2178 hg files -I "**/README"
2178 hg files -I "**/README"
2179
2179
2180 - list all binary files::
2180 - list all binary files::
2181
2181
2182 hg files "set:binary()"
2182 hg files "set:binary()"
2183
2183
2184 - find files containing a regular expression::
2184 - find files containing a regular expression::
2185
2185
2186 hg files "set:grep('bob')"
2186 hg files "set:grep('bob')"
2187
2187
2188 - search tracked file contents with xargs and grep::
2188 - search tracked file contents with xargs and grep::
2189
2189
2190 hg files -0 | xargs -0 grep foo
2190 hg files -0 | xargs -0 grep foo
2191
2191
2192 See :hg:`help patterns` and :hg:`help filesets` for more information
2192 See :hg:`help patterns` and :hg:`help filesets` for more information
2193 on specifying file patterns.
2193 on specifying file patterns.
2194
2194
2195 Returns 0 if a match is found, 1 otherwise.
2195 Returns 0 if a match is found, 1 otherwise.
2196
2196
2197 """
2197 """
2198
2198
2199 opts = pycompat.byteskwargs(opts)
2199 opts = pycompat.byteskwargs(opts)
2200 rev = opts.get('rev')
2200 rev = opts.get('rev')
2201 if rev:
2201 if rev:
2202 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
2202 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
2203 ctx = scmutil.revsingle(repo, rev, None)
2203 ctx = scmutil.revsingle(repo, rev, None)
2204
2204
2205 end = '\n'
2205 end = '\n'
2206 if opts.get('print0'):
2206 if opts.get('print0'):
2207 end = '\0'
2207 end = '\0'
2208 fmt = '%s' + end
2208 fmt = '%s' + end
2209
2209
2210 m = scmutil.match(ctx, pats, opts)
2210 m = scmutil.match(ctx, pats, opts)
2211 ui.pager('files')
2211 ui.pager('files')
2212 with ui.formatter('files', opts) as fm:
2212 with ui.formatter('files', opts) as fm:
2213 return cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
2213 return cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
2214
2214
2215 @command(
2215 @command(
2216 'forget',
2216 'forget',
2217 [('i', 'interactive', None, _('use interactive mode')),
2217 [('i', 'interactive', None, _('use interactive mode')),
2218 ] + walkopts + dryrunopts,
2218 ] + walkopts + dryrunopts,
2219 _('[OPTION]... FILE...'),
2219 _('[OPTION]... FILE...'),
2220 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
2220 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
2221 helpbasic=True, inferrepo=True)
2221 helpbasic=True, inferrepo=True)
2222 def forget(ui, repo, *pats, **opts):
2222 def forget(ui, repo, *pats, **opts):
2223 """forget the specified files on the next commit
2223 """forget the specified files on the next commit
2224
2224
2225 Mark the specified files so they will no longer be tracked
2225 Mark the specified files so they will no longer be tracked
2226 after the next commit.
2226 after the next commit.
2227
2227
2228 This only removes files from the current branch, not from the
2228 This only removes files from the current branch, not from the
2229 entire project history, and it does not delete them from the
2229 entire project history, and it does not delete them from the
2230 working directory.
2230 working directory.
2231
2231
2232 To delete the file from the working directory, see :hg:`remove`.
2232 To delete the file from the working directory, see :hg:`remove`.
2233
2233
2234 To undo a forget before the next commit, see :hg:`add`.
2234 To undo a forget before the next commit, see :hg:`add`.
2235
2235
2236 .. container:: verbose
2236 .. container:: verbose
2237
2237
2238 Examples:
2238 Examples:
2239
2239
2240 - forget newly-added binary files::
2240 - forget newly-added binary files::
2241
2241
2242 hg forget "set:added() and binary()"
2242 hg forget "set:added() and binary()"
2243
2243
2244 - forget files that would be excluded by .hgignore::
2244 - forget files that would be excluded by .hgignore::
2245
2245
2246 hg forget "set:hgignore()"
2246 hg forget "set:hgignore()"
2247
2247
2248 Returns 0 on success.
2248 Returns 0 on success.
2249 """
2249 """
2250
2250
2251 opts = pycompat.byteskwargs(opts)
2251 opts = pycompat.byteskwargs(opts)
2252 if not pats:
2252 if not pats:
2253 raise error.Abort(_('no files specified'))
2253 raise error.Abort(_('no files specified'))
2254
2254
2255 m = scmutil.match(repo[None], pats, opts)
2255 m = scmutil.match(repo[None], pats, opts)
2256 dryrun, interactive = opts.get('dry_run'), opts.get('interactive')
2256 dryrun, interactive = opts.get('dry_run'), opts.get('interactive')
2257 rejected = cmdutil.forget(ui, repo, m, prefix="",
2257 rejected = cmdutil.forget(ui, repo, m, prefix="",
2258 explicitonly=False, dryrun=dryrun,
2258 explicitonly=False, dryrun=dryrun,
2259 interactive=interactive)[0]
2259 interactive=interactive)[0]
2260 return rejected and 1 or 0
2260 return rejected and 1 or 0
2261
2261
2262 @command(
2262 @command(
2263 'graft',
2263 'graft',
2264 [('r', 'rev', [], _('revisions to graft'), _('REV')),
2264 [('r', 'rev', [], _('revisions to graft'), _('REV')),
2265 ('', 'base', '',
2265 ('', 'base', '',
2266 _('base revision when doing the graft merge (ADVANCED)'), _('REV')),
2266 _('base revision when doing the graft merge (ADVANCED)'), _('REV')),
2267 ('c', 'continue', False, _('resume interrupted graft')),
2267 ('c', 'continue', False, _('resume interrupted graft')),
2268 ('', 'stop', False, _('stop interrupted graft')),
2268 ('', 'stop', False, _('stop interrupted graft')),
2269 ('', 'abort', False, _('abort interrupted graft')),
2269 ('', 'abort', False, _('abort interrupted graft')),
2270 ('e', 'edit', False, _('invoke editor on commit messages')),
2270 ('e', 'edit', False, _('invoke editor on commit messages')),
2271 ('', 'log', None, _('append graft info to log message')),
2271 ('', 'log', None, _('append graft info to log message')),
2272 ('', 'no-commit', None,
2272 ('', 'no-commit', None,
2273 _("don't commit, just apply the changes in working directory")),
2273 _("don't commit, just apply the changes in working directory")),
2274 ('f', 'force', False, _('force graft')),
2274 ('f', 'force', False, _('force graft')),
2275 ('D', 'currentdate', False,
2275 ('D', 'currentdate', False,
2276 _('record the current date as commit date')),
2276 _('record the current date as commit date')),
2277 ('U', 'currentuser', False,
2277 ('U', 'currentuser', False,
2278 _('record the current user as committer'))]
2278 _('record the current user as committer'))]
2279 + commitopts2 + mergetoolopts + dryrunopts,
2279 + commitopts2 + mergetoolopts + dryrunopts,
2280 _('[OPTION]... [-r REV]... REV...'),
2280 _('[OPTION]... [-r REV]... REV...'),
2281 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT)
2281 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT)
2282 def graft(ui, repo, *revs, **opts):
2282 def graft(ui, repo, *revs, **opts):
2283 '''copy changes from other branches onto the current branch
2283 '''copy changes from other branches onto the current branch
2284
2284
2285 This command uses Mercurial's merge logic to copy individual
2285 This command uses Mercurial's merge logic to copy individual
2286 changes from other branches without merging branches in the
2286 changes from other branches without merging branches in the
2287 history graph. This is sometimes known as 'backporting' or
2287 history graph. This is sometimes known as 'backporting' or
2288 'cherry-picking'. By default, graft will copy user, date, and
2288 'cherry-picking'. By default, graft will copy user, date, and
2289 description from the source changesets.
2289 description from the source changesets.
2290
2290
2291 Changesets that are ancestors of the current revision, that have
2291 Changesets that are ancestors of the current revision, that have
2292 already been grafted, or that are merges will be skipped.
2292 already been grafted, or that are merges will be skipped.
2293
2293
2294 If --log is specified, log messages will have a comment appended
2294 If --log is specified, log messages will have a comment appended
2295 of the form::
2295 of the form::
2296
2296
2297 (grafted from CHANGESETHASH)
2297 (grafted from CHANGESETHASH)
2298
2298
2299 If --force is specified, revisions will be grafted even if they
2299 If --force is specified, revisions will be grafted even if they
2300 are already ancestors of, or have been grafted to, the destination.
2300 are already ancestors of, or have been grafted to, the destination.
2301 This is useful when the revisions have since been backed out.
2301 This is useful when the revisions have since been backed out.
2302
2302
2303 If a graft merge results in conflicts, the graft process is
2303 If a graft merge results in conflicts, the graft process is
2304 interrupted so that the current merge can be manually resolved.
2304 interrupted so that the current merge can be manually resolved.
2305 Once all conflicts are addressed, the graft process can be
2305 Once all conflicts are addressed, the graft process can be
2306 continued with the -c/--continue option.
2306 continued with the -c/--continue option.
2307
2307
2308 The -c/--continue option reapplies all the earlier options.
2308 The -c/--continue option reapplies all the earlier options.
2309
2309
2310 .. container:: verbose
2310 .. container:: verbose
2311
2311
2312 The --base option exposes more of how graft internally uses merge with a
2312 The --base option exposes more of how graft internally uses merge with a
2313 custom base revision. --base can be used to specify another ancestor than
2313 custom base revision. --base can be used to specify another ancestor than
2314 the first and only parent.
2314 the first and only parent.
2315
2315
2316 The command::
2316 The command::
2317
2317
2318 hg graft -r 345 --base 234
2318 hg graft -r 345 --base 234
2319
2319
2320 is thus pretty much the same as::
2320 is thus pretty much the same as::
2321
2321
2322 hg diff -r 234 -r 345 | hg import
2322 hg diff -r 234 -r 345 | hg import
2323
2323
2324 but using merge to resolve conflicts and track moved files.
2324 but using merge to resolve conflicts and track moved files.
2325
2325
2326 The result of a merge can thus be backported as a single commit by
2326 The result of a merge can thus be backported as a single commit by
2327 specifying one of the merge parents as base, and thus effectively
2327 specifying one of the merge parents as base, and thus effectively
2328 grafting the changes from the other side.
2328 grafting the changes from the other side.
2329
2329
2330 It is also possible to collapse multiple changesets and clean up history
2330 It is also possible to collapse multiple changesets and clean up history
2331 by specifying another ancestor as base, much like rebase --collapse
2331 by specifying another ancestor as base, much like rebase --collapse
2332 --keep.
2332 --keep.
2333
2333
2334 The commit message can be tweaked after the fact using commit --amend .
2334 The commit message can be tweaked after the fact using commit --amend .
2335
2335
2336 For using non-ancestors as the base to backout changes, see the backout
2336 For using non-ancestors as the base to backout changes, see the backout
2337 command and the hidden --parent option.
2337 command and the hidden --parent option.
2338
2338
2339 .. container:: verbose
2339 .. container:: verbose
2340
2340
2341 Examples:
2341 Examples:
2342
2342
2343 - copy a single change to the stable branch and edit its description::
2343 - copy a single change to the stable branch and edit its description::
2344
2344
2345 hg update stable
2345 hg update stable
2346 hg graft --edit 9393
2346 hg graft --edit 9393
2347
2347
2348 - graft a range of changesets with one exception, updating dates::
2348 - graft a range of changesets with one exception, updating dates::
2349
2349
2350 hg graft -D "2085::2093 and not 2091"
2350 hg graft -D "2085::2093 and not 2091"
2351
2351
2352 - continue a graft after resolving conflicts::
2352 - continue a graft after resolving conflicts::
2353
2353
2354 hg graft -c
2354 hg graft -c
2355
2355
2356 - show the source of a grafted changeset::
2356 - show the source of a grafted changeset::
2357
2357
2358 hg log --debug -r .
2358 hg log --debug -r .
2359
2359
2360 - show revisions sorted by date::
2360 - show revisions sorted by date::
2361
2361
2362 hg log -r "sort(all(), date)"
2362 hg log -r "sort(all(), date)"
2363
2363
2364 - backport the result of a merge as a single commit::
2364 - backport the result of a merge as a single commit::
2365
2365
2366 hg graft -r 123 --base 123^
2366 hg graft -r 123 --base 123^
2367
2367
2368 - land a feature branch as one changeset::
2368 - land a feature branch as one changeset::
2369
2369
2370 hg up -cr default
2370 hg up -cr default
2371 hg graft -r featureX --base "ancestor('featureX', 'default')"
2371 hg graft -r featureX --base "ancestor('featureX', 'default')"
2372
2372
2373 See :hg:`help revisions` for more about specifying revisions.
2373 See :hg:`help revisions` for more about specifying revisions.
2374
2374
2375 Returns 0 on successful completion.
2375 Returns 0 on successful completion.
2376 '''
2376 '''
2377 with repo.wlock():
2377 with repo.wlock():
2378 return _dograft(ui, repo, *revs, **opts)
2378 return _dograft(ui, repo, *revs, **opts)
2379
2379
2380 def _dograft(ui, repo, *revs, **opts):
2380 def _dograft(ui, repo, *revs, **opts):
2381 opts = pycompat.byteskwargs(opts)
2381 opts = pycompat.byteskwargs(opts)
2382 if revs and opts.get('rev'):
2382 if revs and opts.get('rev'):
2383 ui.warn(_('warning: inconsistent use of --rev might give unexpected '
2383 ui.warn(_('warning: inconsistent use of --rev might give unexpected '
2384 'revision ordering!\n'))
2384 'revision ordering!\n'))
2385
2385
2386 revs = list(revs)
2386 revs = list(revs)
2387 revs.extend(opts.get('rev'))
2387 revs.extend(opts.get('rev'))
2388 basectx = None
2388 basectx = None
2389 if opts.get('base'):
2389 if opts.get('base'):
2390 basectx = scmutil.revsingle(repo, opts['base'], None)
2390 basectx = scmutil.revsingle(repo, opts['base'], None)
2391 # a dict of data to be stored in state file
2391 # a dict of data to be stored in state file
2392 statedata = {}
2392 statedata = {}
2393 # list of new nodes created by ongoing graft
2393 # list of new nodes created by ongoing graft
2394 statedata['newnodes'] = []
2394 statedata['newnodes'] = []
2395
2395
2396 if opts.get('user') and opts.get('currentuser'):
2396 if opts.get('user') and opts.get('currentuser'):
2397 raise error.Abort(_('--user and --currentuser are mutually exclusive'))
2397 raise error.Abort(_('--user and --currentuser are mutually exclusive'))
2398 if opts.get('date') and opts.get('currentdate'):
2398 if opts.get('date') and opts.get('currentdate'):
2399 raise error.Abort(_('--date and --currentdate are mutually exclusive'))
2399 raise error.Abort(_('--date and --currentdate are mutually exclusive'))
2400 if not opts.get('user') and opts.get('currentuser'):
2400 if not opts.get('user') and opts.get('currentuser'):
2401 opts['user'] = ui.username()
2401 opts['user'] = ui.username()
2402 if not opts.get('date') and opts.get('currentdate'):
2402 if not opts.get('date') and opts.get('currentdate'):
2403 opts['date'] = "%d %d" % dateutil.makedate()
2403 opts['date'] = "%d %d" % dateutil.makedate()
2404
2404
2405 editor = cmdutil.getcommiteditor(editform='graft',
2405 editor = cmdutil.getcommiteditor(editform='graft',
2406 **pycompat.strkwargs(opts))
2406 **pycompat.strkwargs(opts))
2407
2407
2408 cont = False
2408 cont = False
2409 if opts.get('no_commit'):
2409 if opts.get('no_commit'):
2410 if opts.get('edit'):
2410 if opts.get('edit'):
2411 raise error.Abort(_("cannot specify --no-commit and "
2411 raise error.Abort(_("cannot specify --no-commit and "
2412 "--edit together"))
2412 "--edit together"))
2413 if opts.get('currentuser'):
2413 if opts.get('currentuser'):
2414 raise error.Abort(_("cannot specify --no-commit and "
2414 raise error.Abort(_("cannot specify --no-commit and "
2415 "--currentuser together"))
2415 "--currentuser together"))
2416 if opts.get('currentdate'):
2416 if opts.get('currentdate'):
2417 raise error.Abort(_("cannot specify --no-commit and "
2417 raise error.Abort(_("cannot specify --no-commit and "
2418 "--currentdate together"))
2418 "--currentdate together"))
2419 if opts.get('log'):
2419 if opts.get('log'):
2420 raise error.Abort(_("cannot specify --no-commit and "
2420 raise error.Abort(_("cannot specify --no-commit and "
2421 "--log together"))
2421 "--log together"))
2422
2422
2423 graftstate = statemod.cmdstate(repo, 'graftstate')
2423 graftstate = statemod.cmdstate(repo, 'graftstate')
2424
2424
2425 if opts.get('stop'):
2425 if opts.get('stop'):
2426 if opts.get('continue'):
2426 if opts.get('continue'):
2427 raise error.Abort(_("cannot use '--continue' and "
2427 raise error.Abort(_("cannot use '--continue' and "
2428 "'--stop' together"))
2428 "'--stop' together"))
2429 if opts.get('abort'):
2429 if opts.get('abort'):
2430 raise error.Abort(_("cannot use '--abort' and '--stop' together"))
2430 raise error.Abort(_("cannot use '--abort' and '--stop' together"))
2431
2431
2432 if any((opts.get('edit'), opts.get('log'), opts.get('user'),
2432 if any((opts.get('edit'), opts.get('log'), opts.get('user'),
2433 opts.get('date'), opts.get('currentdate'),
2433 opts.get('date'), opts.get('currentdate'),
2434 opts.get('currentuser'), opts.get('rev'))):
2434 opts.get('currentuser'), opts.get('rev'))):
2435 raise error.Abort(_("cannot specify any other flag with '--stop'"))
2435 raise error.Abort(_("cannot specify any other flag with '--stop'"))
2436 return _stopgraft(ui, repo, graftstate)
2436 return _stopgraft(ui, repo, graftstate)
2437 elif opts.get('abort'):
2437 elif opts.get('abort'):
2438 if opts.get('continue'):
2438 if opts.get('continue'):
2439 raise error.Abort(_("cannot use '--continue' and "
2439 raise error.Abort(_("cannot use '--continue' and "
2440 "'--abort' together"))
2440 "'--abort' together"))
2441 if any((opts.get('edit'), opts.get('log'), opts.get('user'),
2441 if any((opts.get('edit'), opts.get('log'), opts.get('user'),
2442 opts.get('date'), opts.get('currentdate'),
2442 opts.get('date'), opts.get('currentdate'),
2443 opts.get('currentuser'), opts.get('rev'))):
2443 opts.get('currentuser'), opts.get('rev'))):
2444 raise error.Abort(_("cannot specify any other flag with '--abort'"))
2444 raise error.Abort(_("cannot specify any other flag with '--abort'"))
2445
2445
2446 return _abortgraft(ui, repo, graftstate)
2446 return _abortgraft(ui, repo, graftstate)
2447 elif opts.get('continue'):
2447 elif opts.get('continue'):
2448 cont = True
2448 cont = True
2449 if revs:
2449 if revs:
2450 raise error.Abort(_("can't specify --continue and revisions"))
2450 raise error.Abort(_("can't specify --continue and revisions"))
2451 # read in unfinished revisions
2451 # read in unfinished revisions
2452 if graftstate.exists():
2452 if graftstate.exists():
2453 statedata = _readgraftstate(repo, graftstate)
2453 statedata = _readgraftstate(repo, graftstate)
2454 if statedata.get('date'):
2454 if statedata.get('date'):
2455 opts['date'] = statedata['date']
2455 opts['date'] = statedata['date']
2456 if statedata.get('user'):
2456 if statedata.get('user'):
2457 opts['user'] = statedata['user']
2457 opts['user'] = statedata['user']
2458 if statedata.get('log'):
2458 if statedata.get('log'):
2459 opts['log'] = True
2459 opts['log'] = True
2460 if statedata.get('no_commit'):
2460 if statedata.get('no_commit'):
2461 opts['no_commit'] = statedata.get('no_commit')
2461 opts['no_commit'] = statedata.get('no_commit')
2462 nodes = statedata['nodes']
2462 nodes = statedata['nodes']
2463 revs = [repo[node].rev() for node in nodes]
2463 revs = [repo[node].rev() for node in nodes]
2464 else:
2464 else:
2465 cmdutil.wrongtooltocontinue(repo, _('graft'))
2465 cmdutil.wrongtooltocontinue(repo, _('graft'))
2466 else:
2466 else:
2467 if not revs:
2467 if not revs:
2468 raise error.Abort(_('no revisions specified'))
2468 raise error.Abort(_('no revisions specified'))
2469 cmdutil.checkunfinished(repo)
2469 cmdutil.checkunfinished(repo)
2470 cmdutil.bailifchanged(repo)
2470 cmdutil.bailifchanged(repo)
2471 revs = scmutil.revrange(repo, revs)
2471 revs = scmutil.revrange(repo, revs)
2472
2472
2473 skipped = set()
2473 skipped = set()
2474 if basectx is None:
2474 if basectx is None:
2475 # check for merges
2475 # check for merges
2476 for rev in repo.revs('%ld and merge()', revs):
2476 for rev in repo.revs('%ld and merge()', revs):
2477 ui.warn(_('skipping ungraftable merge revision %d\n') % rev)
2477 ui.warn(_('skipping ungraftable merge revision %d\n') % rev)
2478 skipped.add(rev)
2478 skipped.add(rev)
2479 revs = [r for r in revs if r not in skipped]
2479 revs = [r for r in revs if r not in skipped]
2480 if not revs:
2480 if not revs:
2481 return -1
2481 return -1
2482 if basectx is not None and len(revs) != 1:
2482 if basectx is not None and len(revs) != 1:
2483 raise error.Abort(_('only one revision allowed with --base '))
2483 raise error.Abort(_('only one revision allowed with --base '))
2484
2484
2485 # Don't check in the --continue case, in effect retaining --force across
2485 # Don't check in the --continue case, in effect retaining --force across
2486 # --continues. That's because without --force, any revisions we decided to
2486 # --continues. That's because without --force, any revisions we decided to
2487 # skip would have been filtered out here, so they wouldn't have made their
2487 # skip would have been filtered out here, so they wouldn't have made their
2488 # way to the graftstate. With --force, any revisions we would have otherwise
2488 # way to the graftstate. With --force, any revisions we would have otherwise
2489 # skipped would not have been filtered out, and if they hadn't been applied
2489 # skipped would not have been filtered out, and if they hadn't been applied
2490 # already, they'd have been in the graftstate.
2490 # already, they'd have been in the graftstate.
2491 if not (cont or opts.get('force')) and basectx is None:
2491 if not (cont or opts.get('force')) and basectx is None:
2492 # check for ancestors of dest branch
2492 # check for ancestors of dest branch
2493 crev = repo['.'].rev()
2493 crev = repo['.'].rev()
2494 ancestors = repo.changelog.ancestors([crev], inclusive=True)
2494 ancestors = repo.changelog.ancestors([crev], inclusive=True)
2495 # XXX make this lazy in the future
2495 # XXX make this lazy in the future
2496 # don't mutate while iterating, create a copy
2496 # don't mutate while iterating, create a copy
2497 for rev in list(revs):
2497 for rev in list(revs):
2498 if rev in ancestors:
2498 if rev in ancestors:
2499 ui.warn(_('skipping ancestor revision %d:%s\n') %
2499 ui.warn(_('skipping ancestor revision %d:%s\n') %
2500 (rev, repo[rev]))
2500 (rev, repo[rev]))
2501 # XXX remove on list is slow
2501 # XXX remove on list is slow
2502 revs.remove(rev)
2502 revs.remove(rev)
2503 if not revs:
2503 if not revs:
2504 return -1
2504 return -1
2505
2505
2506 # analyze revs for earlier grafts
2506 # analyze revs for earlier grafts
2507 ids = {}
2507 ids = {}
2508 for ctx in repo.set("%ld", revs):
2508 for ctx in repo.set("%ld", revs):
2509 ids[ctx.hex()] = ctx.rev()
2509 ids[ctx.hex()] = ctx.rev()
2510 n = ctx.extra().get('source')
2510 n = ctx.extra().get('source')
2511 if n:
2511 if n:
2512 ids[n] = ctx.rev()
2512 ids[n] = ctx.rev()
2513
2513
2514 # check ancestors for earlier grafts
2514 # check ancestors for earlier grafts
2515 ui.debug('scanning for duplicate grafts\n')
2515 ui.debug('scanning for duplicate grafts\n')
2516
2516
2517 # The only changesets we can be sure doesn't contain grafts of any
2517 # The only changesets we can be sure doesn't contain grafts of any
2518 # revs, are the ones that are common ancestors of *all* revs:
2518 # revs, are the ones that are common ancestors of *all* revs:
2519 for rev in repo.revs('only(%d,ancestor(%ld))', crev, revs):
2519 for rev in repo.revs('only(%d,ancestor(%ld))', crev, revs):
2520 ctx = repo[rev]
2520 ctx = repo[rev]
2521 n = ctx.extra().get('source')
2521 n = ctx.extra().get('source')
2522 if n in ids:
2522 if n in ids:
2523 try:
2523 try:
2524 r = repo[n].rev()
2524 r = repo[n].rev()
2525 except error.RepoLookupError:
2525 except error.RepoLookupError:
2526 r = None
2526 r = None
2527 if r in revs:
2527 if r in revs:
2528 ui.warn(_('skipping revision %d:%s '
2528 ui.warn(_('skipping revision %d:%s '
2529 '(already grafted to %d:%s)\n')
2529 '(already grafted to %d:%s)\n')
2530 % (r, repo[r], rev, ctx))
2530 % (r, repo[r], rev, ctx))
2531 revs.remove(r)
2531 revs.remove(r)
2532 elif ids[n] in revs:
2532 elif ids[n] in revs:
2533 if r is None:
2533 if r is None:
2534 ui.warn(_('skipping already grafted revision %d:%s '
2534 ui.warn(_('skipping already grafted revision %d:%s '
2535 '(%d:%s also has unknown origin %s)\n')
2535 '(%d:%s also has unknown origin %s)\n')
2536 % (ids[n], repo[ids[n]], rev, ctx, n[:12]))
2536 % (ids[n], repo[ids[n]], rev, ctx, n[:12]))
2537 else:
2537 else:
2538 ui.warn(_('skipping already grafted revision %d:%s '
2538 ui.warn(_('skipping already grafted revision %d:%s '
2539 '(%d:%s also has origin %d:%s)\n')
2539 '(%d:%s also has origin %d:%s)\n')
2540 % (ids[n], repo[ids[n]], rev, ctx, r, n[:12]))
2540 % (ids[n], repo[ids[n]], rev, ctx, r, n[:12]))
2541 revs.remove(ids[n])
2541 revs.remove(ids[n])
2542 elif ctx.hex() in ids:
2542 elif ctx.hex() in ids:
2543 r = ids[ctx.hex()]
2543 r = ids[ctx.hex()]
2544 if r in revs:
2544 if r in revs:
2545 ui.warn(_('skipping already grafted revision %d:%s '
2545 ui.warn(_('skipping already grafted revision %d:%s '
2546 '(was grafted from %d:%s)\n') %
2546 '(was grafted from %d:%s)\n') %
2547 (r, repo[r], rev, ctx))
2547 (r, repo[r], rev, ctx))
2548 revs.remove(r)
2548 revs.remove(r)
2549 if not revs:
2549 if not revs:
2550 return -1
2550 return -1
2551
2551
2552 if opts.get('no_commit'):
2552 if opts.get('no_commit'):
2553 statedata['no_commit'] = True
2553 statedata['no_commit'] = True
2554 for pos, ctx in enumerate(repo.set("%ld", revs)):
2554 for pos, ctx in enumerate(repo.set("%ld", revs)):
2555 desc = '%d:%s "%s"' % (ctx.rev(), ctx,
2555 desc = '%d:%s "%s"' % (ctx.rev(), ctx,
2556 ctx.description().split('\n', 1)[0])
2556 ctx.description().split('\n', 1)[0])
2557 names = repo.nodetags(ctx.node()) + repo.nodebookmarks(ctx.node())
2557 names = repo.nodetags(ctx.node()) + repo.nodebookmarks(ctx.node())
2558 if names:
2558 if names:
2559 desc += ' (%s)' % ' '.join(names)
2559 desc += ' (%s)' % ' '.join(names)
2560 ui.status(_('grafting %s\n') % desc)
2560 ui.status(_('grafting %s\n') % desc)
2561 if opts.get('dry_run'):
2561 if opts.get('dry_run'):
2562 continue
2562 continue
2563
2563
2564 source = ctx.extra().get('source')
2564 source = ctx.extra().get('source')
2565 extra = {}
2565 extra = {}
2566 if source:
2566 if source:
2567 extra['source'] = source
2567 extra['source'] = source
2568 extra['intermediate-source'] = ctx.hex()
2568 extra['intermediate-source'] = ctx.hex()
2569 else:
2569 else:
2570 extra['source'] = ctx.hex()
2570 extra['source'] = ctx.hex()
2571 user = ctx.user()
2571 user = ctx.user()
2572 if opts.get('user'):
2572 if opts.get('user'):
2573 user = opts['user']
2573 user = opts['user']
2574 statedata['user'] = user
2574 statedata['user'] = user
2575 date = ctx.date()
2575 date = ctx.date()
2576 if opts.get('date'):
2576 if opts.get('date'):
2577 date = opts['date']
2577 date = opts['date']
2578 statedata['date'] = date
2578 statedata['date'] = date
2579 message = ctx.description()
2579 message = ctx.description()
2580 if opts.get('log'):
2580 if opts.get('log'):
2581 message += '\n(grafted from %s)' % ctx.hex()
2581 message += '\n(grafted from %s)' % ctx.hex()
2582 statedata['log'] = True
2582 statedata['log'] = True
2583
2583
2584 # we don't merge the first commit when continuing
2584 # we don't merge the first commit when continuing
2585 if not cont:
2585 if not cont:
2586 # perform the graft merge with p1(rev) as 'ancestor'
2586 # perform the graft merge with p1(rev) as 'ancestor'
2587 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
2587 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
2588 base = ctx.p1() if basectx is None else basectx
2588 base = ctx.p1() if basectx is None else basectx
2589 with ui.configoverride(overrides, 'graft'):
2589 with ui.configoverride(overrides, 'graft'):
2590 stats = mergemod.graft(repo, ctx, base, ['local', 'graft'])
2590 stats = mergemod.graft(repo, ctx, base, ['local', 'graft'])
2591 # report any conflicts
2591 # report any conflicts
2592 if stats.unresolvedcount > 0:
2592 if stats.unresolvedcount > 0:
2593 # write out state for --continue
2593 # write out state for --continue
2594 nodes = [repo[rev].hex() for rev in revs[pos:]]
2594 nodes = [repo[rev].hex() for rev in revs[pos:]]
2595 statedata['nodes'] = nodes
2595 statedata['nodes'] = nodes
2596 stateversion = 1
2596 stateversion = 1
2597 graftstate.save(stateversion, statedata)
2597 graftstate.save(stateversion, statedata)
2598 hint = _("use 'hg resolve' and 'hg graft --continue'")
2598 hint = _("use 'hg resolve' and 'hg graft --continue'")
2599 raise error.Abort(
2599 raise error.Abort(
2600 _("unresolved conflicts, can't continue"),
2600 _("unresolved conflicts, can't continue"),
2601 hint=hint)
2601 hint=hint)
2602 else:
2602 else:
2603 cont = False
2603 cont = False
2604
2604
2605 # commit if --no-commit is false
2605 # commit if --no-commit is false
2606 if not opts.get('no_commit'):
2606 if not opts.get('no_commit'):
2607 node = repo.commit(text=message, user=user, date=date, extra=extra,
2607 node = repo.commit(text=message, user=user, date=date, extra=extra,
2608 editor=editor)
2608 editor=editor)
2609 if node is None:
2609 if node is None:
2610 ui.warn(
2610 ui.warn(
2611 _('note: graft of %d:%s created no changes to commit\n') %
2611 _('note: graft of %d:%s created no changes to commit\n') %
2612 (ctx.rev(), ctx))
2612 (ctx.rev(), ctx))
2613 # checking that newnodes exist because old state files won't have it
2613 # checking that newnodes exist because old state files won't have it
2614 elif statedata.get('newnodes') is not None:
2614 elif statedata.get('newnodes') is not None:
2615 statedata['newnodes'].append(node)
2615 statedata['newnodes'].append(node)
2616
2616
2617 # remove state when we complete successfully
2617 # remove state when we complete successfully
2618 if not opts.get('dry_run'):
2618 if not opts.get('dry_run'):
2619 graftstate.delete()
2619 graftstate.delete()
2620
2620
2621 return 0
2621 return 0
2622
2622
2623 def _abortgraft(ui, repo, graftstate):
2623 def _abortgraft(ui, repo, graftstate):
2624 """abort the interrupted graft and rollbacks to the state before interrupted
2624 """abort the interrupted graft and rollbacks to the state before interrupted
2625 graft"""
2625 graft"""
2626 if not graftstate.exists():
2626 if not graftstate.exists():
2627 raise error.Abort(_("no interrupted graft to abort"))
2627 raise error.Abort(_("no interrupted graft to abort"))
2628 statedata = _readgraftstate(repo, graftstate)
2628 statedata = _readgraftstate(repo, graftstate)
2629 newnodes = statedata.get('newnodes')
2629 newnodes = statedata.get('newnodes')
2630 if newnodes is None:
2630 if newnodes is None:
2631 # and old graft state which does not have all the data required to abort
2631 # and old graft state which does not have all the data required to abort
2632 # the graft
2632 # the graft
2633 raise error.Abort(_("cannot abort using an old graftstate"))
2633 raise error.Abort(_("cannot abort using an old graftstate"))
2634
2634
2635 # changeset from which graft operation was started
2635 # changeset from which graft operation was started
2636 if len(newnodes) > 0:
2636 if len(newnodes) > 0:
2637 startctx = repo[newnodes[0]].p1()
2637 startctx = repo[newnodes[0]].p1()
2638 else:
2638 else:
2639 startctx = repo['.']
2639 startctx = repo['.']
2640 # whether to strip or not
2640 # whether to strip or not
2641 cleanup = False
2641 cleanup = False
2642 if newnodes:
2642 if newnodes:
2643 newnodes = [repo[r].rev() for r in newnodes]
2643 newnodes = [repo[r].rev() for r in newnodes]
2644 cleanup = True
2644 cleanup = True
2645 # checking that none of the newnodes turned public or is public
2645 # checking that none of the newnodes turned public or is public
2646 immutable = [c for c in newnodes if not repo[c].mutable()]
2646 immutable = [c for c in newnodes if not repo[c].mutable()]
2647 if immutable:
2647 if immutable:
2648 repo.ui.warn(_("cannot clean up public changesets %s\n")
2648 repo.ui.warn(_("cannot clean up public changesets %s\n")
2649 % ', '.join(bytes(repo[r]) for r in immutable),
2649 % ', '.join(bytes(repo[r]) for r in immutable),
2650 hint=_("see 'hg help phases' for details"))
2650 hint=_("see 'hg help phases' for details"))
2651 cleanup = False
2651 cleanup = False
2652
2652
2653 # checking that no new nodes are created on top of grafted revs
2653 # checking that no new nodes are created on top of grafted revs
2654 desc = set(repo.changelog.descendants(newnodes))
2654 desc = set(repo.changelog.descendants(newnodes))
2655 if desc - set(newnodes):
2655 if desc - set(newnodes):
2656 repo.ui.warn(_("new changesets detected on destination "
2656 repo.ui.warn(_("new changesets detected on destination "
2657 "branch, can't strip\n"))
2657 "branch, can't strip\n"))
2658 cleanup = False
2658 cleanup = False
2659
2659
2660 if cleanup:
2660 if cleanup:
2661 with repo.wlock(), repo.lock():
2661 with repo.wlock(), repo.lock():
2662 hg.updaterepo(repo, startctx.node(), overwrite=True)
2662 hg.updaterepo(repo, startctx.node(), overwrite=True)
2663 # stripping the new nodes created
2663 # stripping the new nodes created
2664 strippoints = [c.node() for c in repo.set("roots(%ld)",
2664 strippoints = [c.node() for c in repo.set("roots(%ld)",
2665 newnodes)]
2665 newnodes)]
2666 repair.strip(repo.ui, repo, strippoints, backup=False)
2666 repair.strip(repo.ui, repo, strippoints, backup=False)
2667
2667
2668 if not cleanup:
2668 if not cleanup:
2669 # we don't update to the startnode if we can't strip
2669 # we don't update to the startnode if we can't strip
2670 startctx = repo['.']
2670 startctx = repo['.']
2671 hg.updaterepo(repo, startctx.node(), overwrite=True)
2671 hg.updaterepo(repo, startctx.node(), overwrite=True)
2672
2672
2673 ui.status(_("graft aborted\n"))
2673 ui.status(_("graft aborted\n"))
2674 ui.status(_("working directory is now at %s\n") % startctx.hex()[:12])
2674 ui.status(_("working directory is now at %s\n") % startctx.hex()[:12])
2675 graftstate.delete()
2675 graftstate.delete()
2676 return 0
2676 return 0
2677
2677
2678 def _readgraftstate(repo, graftstate):
2678 def _readgraftstate(repo, graftstate):
2679 """read the graft state file and return a dict of the data stored in it"""
2679 """read the graft state file and return a dict of the data stored in it"""
2680 try:
2680 try:
2681 return graftstate.read()
2681 return graftstate.read()
2682 except error.CorruptedState:
2682 except error.CorruptedState:
2683 nodes = repo.vfs.read('graftstate').splitlines()
2683 nodes = repo.vfs.read('graftstate').splitlines()
2684 return {'nodes': nodes}
2684 return {'nodes': nodes}
2685
2685
2686 def _stopgraft(ui, repo, graftstate):
2686 def _stopgraft(ui, repo, graftstate):
2687 """stop the interrupted graft"""
2687 """stop the interrupted graft"""
2688 if not graftstate.exists():
2688 if not graftstate.exists():
2689 raise error.Abort(_("no interrupted graft found"))
2689 raise error.Abort(_("no interrupted graft found"))
2690 pctx = repo['.']
2690 pctx = repo['.']
2691 hg.updaterepo(repo, pctx.node(), overwrite=True)
2691 hg.updaterepo(repo, pctx.node(), overwrite=True)
2692 graftstate.delete()
2692 graftstate.delete()
2693 ui.status(_("stopped the interrupted graft\n"))
2693 ui.status(_("stopped the interrupted graft\n"))
2694 ui.status(_("working directory is now at %s\n") % pctx.hex()[:12])
2694 ui.status(_("working directory is now at %s\n") % pctx.hex()[:12])
2695 return 0
2695 return 0
2696
2696
2697 @command('grep',
2697 @command('grep',
2698 [('0', 'print0', None, _('end fields with NUL')),
2698 [('0', 'print0', None, _('end fields with NUL')),
2699 ('', 'all', None, _('print all revisions that match (DEPRECATED) ')),
2699 ('', 'all', None, _('print all revisions that match (DEPRECATED) ')),
2700 ('', 'diff', None, _('print all revisions when the term was introduced '
2700 ('', 'diff', None, _('print all revisions when the term was introduced '
2701 'or removed')),
2701 'or removed')),
2702 ('a', 'text', None, _('treat all files as text')),
2702 ('a', 'text', None, _('treat all files as text')),
2703 ('f', 'follow', None,
2703 ('f', 'follow', None,
2704 _('follow changeset history,'
2704 _('follow changeset history,'
2705 ' or file history across copies and renames')),
2705 ' or file history across copies and renames')),
2706 ('i', 'ignore-case', None, _('ignore case when matching')),
2706 ('i', 'ignore-case', None, _('ignore case when matching')),
2707 ('l', 'files-with-matches', None,
2707 ('l', 'files-with-matches', None,
2708 _('print only filenames and revisions that match')),
2708 _('print only filenames and revisions that match')),
2709 ('n', 'line-number', None, _('print matching line numbers')),
2709 ('n', 'line-number', None, _('print matching line numbers')),
2710 ('r', 'rev', [],
2710 ('r', 'rev', [],
2711 _('only search files changed within revision range'), _('REV')),
2711 _('only search files changed within revision range'), _('REV')),
2712 ('', 'all-files', None,
2712 ('', 'all-files', None,
2713 _('include all files in the changeset while grepping (EXPERIMENTAL)')),
2713 _('include all files in the changeset while grepping (EXPERIMENTAL)')),
2714 ('u', 'user', None, _('list the author (long with -v)')),
2714 ('u', 'user', None, _('list the author (long with -v)')),
2715 ('d', 'date', None, _('list the date (short with -q)')),
2715 ('d', 'date', None, _('list the date (short with -q)')),
2716 ] + formatteropts + walkopts,
2716 ] + formatteropts + walkopts,
2717 _('[OPTION]... PATTERN [FILE]...'),
2717 _('[OPTION]... PATTERN [FILE]...'),
2718 helpcategory=command.CATEGORY_FILE_CONTENTS,
2718 helpcategory=command.CATEGORY_FILE_CONTENTS,
2719 inferrepo=True,
2719 inferrepo=True,
2720 intents={INTENT_READONLY})
2720 intents={INTENT_READONLY})
2721 def grep(ui, repo, pattern, *pats, **opts):
2721 def grep(ui, repo, pattern, *pats, **opts):
2722 """search revision history for a pattern in specified files
2722 """search revision history for a pattern in specified files
2723
2723
2724 Search revision history for a regular expression in the specified
2724 Search revision history for a regular expression in the specified
2725 files or the entire project.
2725 files or the entire project.
2726
2726
2727 By default, grep prints the most recent revision number for each
2727 By default, grep prints the most recent revision number for each
2728 file in which it finds a match. To get it to print every revision
2728 file in which it finds a match. To get it to print every revision
2729 that contains a change in match status ("-" for a match that becomes
2729 that contains a change in match status ("-" for a match that becomes
2730 a non-match, or "+" for a non-match that becomes a match), use the
2730 a non-match, or "+" for a non-match that becomes a match), use the
2731 --diff flag.
2731 --diff flag.
2732
2732
2733 PATTERN can be any Python (roughly Perl-compatible) regular
2733 PATTERN can be any Python (roughly Perl-compatible) regular
2734 expression.
2734 expression.
2735
2735
2736 If no FILEs are specified (and -f/--follow isn't set), all files in
2736 If no FILEs are specified (and -f/--follow isn't set), all files in
2737 the repository are searched, including those that don't exist in the
2737 the repository are searched, including those that don't exist in the
2738 current branch or have been deleted in a prior changeset.
2738 current branch or have been deleted in a prior changeset.
2739
2739
2740 .. container:: verbose
2740 .. container:: verbose
2741
2741
2742 Template:
2742 Template:
2743
2743
2744 The following keywords are supported in addition to the common template
2744 The following keywords are supported in addition to the common template
2745 keywords and functions. See also :hg:`help templates`.
2745 keywords and functions. See also :hg:`help templates`.
2746
2746
2747 :change: String. Character denoting insertion ``+`` or removal ``-``.
2747 :change: String. Character denoting insertion ``+`` or removal ``-``.
2748 Available if ``--diff`` is specified.
2748 Available if ``--diff`` is specified.
2749 :lineno: Integer. Line number of the match.
2749 :lineno: Integer. Line number of the match.
2750 :path: String. Repository-absolute path of the file.
2750 :path: String. Repository-absolute path of the file.
2751 :texts: List of text chunks.
2751 :texts: List of text chunks.
2752
2752
2753 And each entry of ``{texts}`` provides the following sub-keywords.
2753 And each entry of ``{texts}`` provides the following sub-keywords.
2754
2754
2755 :matched: Boolean. True if the chunk matches the specified pattern.
2755 :matched: Boolean. True if the chunk matches the specified pattern.
2756 :text: String. Chunk content.
2756 :text: String. Chunk content.
2757
2757
2758 See :hg:`help templates.operators` for the list expansion syntax.
2758 See :hg:`help templates.operators` for the list expansion syntax.
2759
2759
2760 Returns 0 if a match is found, 1 otherwise.
2760 Returns 0 if a match is found, 1 otherwise.
2761 """
2761 """
2762 opts = pycompat.byteskwargs(opts)
2762 opts = pycompat.byteskwargs(opts)
2763 diff = opts.get('all') or opts.get('diff')
2763 diff = opts.get('all') or opts.get('diff')
2764 all_files = opts.get('all_files')
2764 all_files = opts.get('all_files')
2765 if diff and opts.get('all_files'):
2765 if diff and opts.get('all_files'):
2766 raise error.Abort(_('--diff and --all-files are mutually exclusive'))
2766 raise error.Abort(_('--diff and --all-files are mutually exclusive'))
2767 # TODO: remove "not opts.get('rev')" if --all-files -rMULTIREV gets working
2767 # TODO: remove "not opts.get('rev')" if --all-files -rMULTIREV gets working
2768 if opts.get('all_files') is None and not opts.get('rev') and not diff:
2768 if opts.get('all_files') is None and not opts.get('rev') and not diff:
2769 # experimental config: commands.grep.all-files
2769 # experimental config: commands.grep.all-files
2770 opts['all_files'] = ui.configbool('commands', 'grep.all-files')
2770 opts['all_files'] = ui.configbool('commands', 'grep.all-files')
2771 plaingrep = opts.get('all_files') and not opts.get('rev')
2771 plaingrep = opts.get('all_files') and not opts.get('rev')
2772 if plaingrep:
2772 if plaingrep:
2773 opts['rev'] = ['wdir()']
2773 opts['rev'] = ['wdir()']
2774
2774
2775 reflags = re.M
2775 reflags = re.M
2776 if opts.get('ignore_case'):
2776 if opts.get('ignore_case'):
2777 reflags |= re.I
2777 reflags |= re.I
2778 try:
2778 try:
2779 regexp = util.re.compile(pattern, reflags)
2779 regexp = util.re.compile(pattern, reflags)
2780 except re.error as inst:
2780 except re.error as inst:
2781 ui.warn(_("grep: invalid match pattern: %s\n") % pycompat.bytestr(inst))
2781 ui.warn(_("grep: invalid match pattern: %s\n") % pycompat.bytestr(inst))
2782 return 1
2782 return 1
2783 sep, eol = ':', '\n'
2783 sep, eol = ':', '\n'
2784 if opts.get('print0'):
2784 if opts.get('print0'):
2785 sep = eol = '\0'
2785 sep = eol = '\0'
2786
2786
2787 getfile = util.lrucachefunc(repo.file)
2787 getfile = util.lrucachefunc(repo.file)
2788
2788
2789 def matchlines(body):
2789 def matchlines(body):
2790 begin = 0
2790 begin = 0
2791 linenum = 0
2791 linenum = 0
2792 while begin < len(body):
2792 while begin < len(body):
2793 match = regexp.search(body, begin)
2793 match = regexp.search(body, begin)
2794 if not match:
2794 if not match:
2795 break
2795 break
2796 mstart, mend = match.span()
2796 mstart, mend = match.span()
2797 linenum += body.count('\n', begin, mstart) + 1
2797 linenum += body.count('\n', begin, mstart) + 1
2798 lstart = body.rfind('\n', begin, mstart) + 1 or begin
2798 lstart = body.rfind('\n', begin, mstart) + 1 or begin
2799 begin = body.find('\n', mend) + 1 or len(body) + 1
2799 begin = body.find('\n', mend) + 1 or len(body) + 1
2800 lend = begin - 1
2800 lend = begin - 1
2801 yield linenum, mstart - lstart, mend - lstart, body[lstart:lend]
2801 yield linenum, mstart - lstart, mend - lstart, body[lstart:lend]
2802
2802
2803 class linestate(object):
2803 class linestate(object):
2804 def __init__(self, line, linenum, colstart, colend):
2804 def __init__(self, line, linenum, colstart, colend):
2805 self.line = line
2805 self.line = line
2806 self.linenum = linenum
2806 self.linenum = linenum
2807 self.colstart = colstart
2807 self.colstart = colstart
2808 self.colend = colend
2808 self.colend = colend
2809
2809
2810 def __hash__(self):
2810 def __hash__(self):
2811 return hash((self.linenum, self.line))
2811 return hash((self.linenum, self.line))
2812
2812
2813 def __eq__(self, other):
2813 def __eq__(self, other):
2814 return self.line == other.line
2814 return self.line == other.line
2815
2815
2816 def findpos(self):
2816 def findpos(self):
2817 """Iterate all (start, end) indices of matches"""
2817 """Iterate all (start, end) indices of matches"""
2818 yield self.colstart, self.colend
2818 yield self.colstart, self.colend
2819 p = self.colend
2819 p = self.colend
2820 while p < len(self.line):
2820 while p < len(self.line):
2821 m = regexp.search(self.line, p)
2821 m = regexp.search(self.line, p)
2822 if not m:
2822 if not m:
2823 break
2823 break
2824 yield m.span()
2824 yield m.span()
2825 p = m.end()
2825 p = m.end()
2826
2826
2827 matches = {}
2827 matches = {}
2828 copies = {}
2828 copies = {}
2829 def grepbody(fn, rev, body):
2829 def grepbody(fn, rev, body):
2830 matches[rev].setdefault(fn, [])
2830 matches[rev].setdefault(fn, [])
2831 m = matches[rev][fn]
2831 m = matches[rev][fn]
2832 for lnum, cstart, cend, line in matchlines(body):
2832 for lnum, cstart, cend, line in matchlines(body):
2833 s = linestate(line, lnum, cstart, cend)
2833 s = linestate(line, lnum, cstart, cend)
2834 m.append(s)
2834 m.append(s)
2835
2835
2836 def difflinestates(a, b):
2836 def difflinestates(a, b):
2837 sm = difflib.SequenceMatcher(None, a, b)
2837 sm = difflib.SequenceMatcher(None, a, b)
2838 for tag, alo, ahi, blo, bhi in sm.get_opcodes():
2838 for tag, alo, ahi, blo, bhi in sm.get_opcodes():
2839 if tag == r'insert':
2839 if tag == r'insert':
2840 for i in pycompat.xrange(blo, bhi):
2840 for i in pycompat.xrange(blo, bhi):
2841 yield ('+', b[i])
2841 yield ('+', b[i])
2842 elif tag == r'delete':
2842 elif tag == r'delete':
2843 for i in pycompat.xrange(alo, ahi):
2843 for i in pycompat.xrange(alo, ahi):
2844 yield ('-', a[i])
2844 yield ('-', a[i])
2845 elif tag == r'replace':
2845 elif tag == r'replace':
2846 for i in pycompat.xrange(alo, ahi):
2846 for i in pycompat.xrange(alo, ahi):
2847 yield ('-', a[i])
2847 yield ('-', a[i])
2848 for i in pycompat.xrange(blo, bhi):
2848 for i in pycompat.xrange(blo, bhi):
2849 yield ('+', b[i])
2849 yield ('+', b[i])
2850
2850
2851 uipathfn = scmutil.getuipathfn(repo)
2851 uipathfn = scmutil.getuipathfn(repo)
2852 def display(fm, fn, ctx, pstates, states):
2852 def display(fm, fn, ctx, pstates, states):
2853 rev = scmutil.intrev(ctx)
2853 rev = scmutil.intrev(ctx)
2854 if fm.isplain():
2854 if fm.isplain():
2855 formatuser = ui.shortuser
2855 formatuser = ui.shortuser
2856 else:
2856 else:
2857 formatuser = pycompat.bytestr
2857 formatuser = pycompat.bytestr
2858 if ui.quiet:
2858 if ui.quiet:
2859 datefmt = '%Y-%m-%d'
2859 datefmt = '%Y-%m-%d'
2860 else:
2860 else:
2861 datefmt = '%a %b %d %H:%M:%S %Y %1%2'
2861 datefmt = '%a %b %d %H:%M:%S %Y %1%2'
2862 found = False
2862 found = False
2863 @util.cachefunc
2863 @util.cachefunc
2864 def binary():
2864 def binary():
2865 flog = getfile(fn)
2865 flog = getfile(fn)
2866 try:
2866 try:
2867 return stringutil.binary(flog.read(ctx.filenode(fn)))
2867 return stringutil.binary(flog.read(ctx.filenode(fn)))
2868 except error.WdirUnsupported:
2868 except error.WdirUnsupported:
2869 return ctx[fn].isbinary()
2869 return ctx[fn].isbinary()
2870
2870
2871 fieldnamemap = {'linenumber': 'lineno'}
2871 fieldnamemap = {'linenumber': 'lineno'}
2872 if diff:
2872 if diff:
2873 iter = difflinestates(pstates, states)
2873 iter = difflinestates(pstates, states)
2874 else:
2874 else:
2875 iter = [('', l) for l in states]
2875 iter = [('', l) for l in states]
2876 for change, l in iter:
2876 for change, l in iter:
2877 fm.startitem()
2877 fm.startitem()
2878 fm.context(ctx=ctx)
2878 fm.context(ctx=ctx)
2879 fm.data(node=fm.hexfunc(scmutil.binnode(ctx)), path=fn)
2879 fm.data(node=fm.hexfunc(scmutil.binnode(ctx)), path=fn)
2880 fm.plain(uipathfn(fn), label='grep.filename')
2880 fm.plain(uipathfn(fn), label='grep.filename')
2881
2881
2882 cols = [
2882 cols = [
2883 ('rev', '%d', rev, not plaingrep),
2883 ('rev', '%d', rev, not plaingrep),
2884 ('linenumber', '%d', l.linenum, opts.get('line_number')),
2884 ('linenumber', '%d', l.linenum, opts.get('line_number')),
2885 ]
2885 ]
2886 if diff:
2886 if diff:
2887 cols.append(('change', '%s', change, True))
2887 cols.append(('change', '%s', change, True))
2888 cols.extend([
2888 cols.extend([
2889 ('user', '%s', formatuser(ctx.user()), opts.get('user')),
2889 ('user', '%s', formatuser(ctx.user()), opts.get('user')),
2890 ('date', '%s', fm.formatdate(ctx.date(), datefmt),
2890 ('date', '%s', fm.formatdate(ctx.date(), datefmt),
2891 opts.get('date')),
2891 opts.get('date')),
2892 ])
2892 ])
2893 for name, fmt, data, cond in cols:
2893 for name, fmt, data, cond in cols:
2894 if cond:
2894 if cond:
2895 fm.plain(sep, label='grep.sep')
2895 fm.plain(sep, label='grep.sep')
2896 field = fieldnamemap.get(name, name)
2896 field = fieldnamemap.get(name, name)
2897 fm.condwrite(cond, field, fmt, data, label='grep.%s' % name)
2897 fm.condwrite(cond, field, fmt, data, label='grep.%s' % name)
2898 if not opts.get('files_with_matches'):
2898 if not opts.get('files_with_matches'):
2899 fm.plain(sep, label='grep.sep')
2899 fm.plain(sep, label='grep.sep')
2900 if not opts.get('text') and binary():
2900 if not opts.get('text') and binary():
2901 fm.plain(_(" Binary file matches"))
2901 fm.plain(_(" Binary file matches"))
2902 else:
2902 else:
2903 displaymatches(fm.nested('texts', tmpl='{text}'), l)
2903 displaymatches(fm.nested('texts', tmpl='{text}'), l)
2904 fm.plain(eol)
2904 fm.plain(eol)
2905 found = True
2905 found = True
2906 if opts.get('files_with_matches'):
2906 if opts.get('files_with_matches'):
2907 break
2907 break
2908 return found
2908 return found
2909
2909
2910 def displaymatches(fm, l):
2910 def displaymatches(fm, l):
2911 p = 0
2911 p = 0
2912 for s, e in l.findpos():
2912 for s, e in l.findpos():
2913 if p < s:
2913 if p < s:
2914 fm.startitem()
2914 fm.startitem()
2915 fm.write('text', '%s', l.line[p:s])
2915 fm.write('text', '%s', l.line[p:s])
2916 fm.data(matched=False)
2916 fm.data(matched=False)
2917 fm.startitem()
2917 fm.startitem()
2918 fm.write('text', '%s', l.line[s:e], label='grep.match')
2918 fm.write('text', '%s', l.line[s:e], label='grep.match')
2919 fm.data(matched=True)
2919 fm.data(matched=True)
2920 p = e
2920 p = e
2921 if p < len(l.line):
2921 if p < len(l.line):
2922 fm.startitem()
2922 fm.startitem()
2923 fm.write('text', '%s', l.line[p:])
2923 fm.write('text', '%s', l.line[p:])
2924 fm.data(matched=False)
2924 fm.data(matched=False)
2925 fm.end()
2925 fm.end()
2926
2926
2927 skip = set()
2927 skip = set()
2928 revfiles = {}
2928 revfiles = {}
2929 match = scmutil.match(repo[None], pats, opts)
2929 match = scmutil.match(repo[None], pats, opts)
2930 found = False
2930 found = False
2931 follow = opts.get('follow')
2931 follow = opts.get('follow')
2932
2932
2933 def prep(ctx, fns):
2933 def prep(ctx, fns):
2934 rev = ctx.rev()
2934 rev = ctx.rev()
2935 pctx = ctx.p1()
2935 pctx = ctx.p1()
2936 parent = pctx.rev()
2936 parent = pctx.rev()
2937 matches.setdefault(rev, {})
2937 matches.setdefault(rev, {})
2938 matches.setdefault(parent, {})
2938 matches.setdefault(parent, {})
2939 files = revfiles.setdefault(rev, [])
2939 files = revfiles.setdefault(rev, [])
2940 for fn in fns:
2940 for fn in fns:
2941 flog = getfile(fn)
2941 flog = getfile(fn)
2942 try:
2942 try:
2943 fnode = ctx.filenode(fn)
2943 fnode = ctx.filenode(fn)
2944 except error.LookupError:
2944 except error.LookupError:
2945 continue
2945 continue
2946 copy = None
2946 copy = None
2947 if follow:
2947 if follow:
2948 try:
2948 try:
2949 copied = flog.renamed(fnode)
2949 copied = flog.renamed(fnode)
2950 except error.WdirUnsupported:
2950 except error.WdirUnsupported:
2951 copied = ctx[fn].renamed()
2951 copied = ctx[fn].renamed()
2952 copy = copied and copied[0]
2952 copy = copied and copied[0]
2953 if copy:
2953 if copy:
2954 copies.setdefault(rev, {})[fn] = copy
2954 copies.setdefault(rev, {})[fn] = copy
2955 if fn in skip:
2955 if fn in skip:
2956 skip.add(copy)
2956 skip.add(copy)
2957 if fn in skip:
2957 if fn in skip:
2958 continue
2958 continue
2959 files.append(fn)
2959 files.append(fn)
2960
2960
2961 if fn not in matches[rev]:
2961 if fn not in matches[rev]:
2962 try:
2962 try:
2963 content = flog.read(fnode)
2963 content = flog.read(fnode)
2964 except error.WdirUnsupported:
2964 except error.WdirUnsupported:
2965 content = ctx[fn].data()
2965 content = ctx[fn].data()
2966 grepbody(fn, rev, content)
2966 grepbody(fn, rev, content)
2967
2967
2968 pfn = copy or fn
2968 pfn = copy or fn
2969 if pfn not in matches[parent]:
2969 if pfn not in matches[parent]:
2970 try:
2970 try:
2971 fnode = pctx.filenode(pfn)
2971 fnode = pctx.filenode(pfn)
2972 grepbody(pfn, parent, flog.read(fnode))
2972 grepbody(pfn, parent, flog.read(fnode))
2973 except error.LookupError:
2973 except error.LookupError:
2974 pass
2974 pass
2975
2975
2976 ui.pager('grep')
2976 ui.pager('grep')
2977 fm = ui.formatter('grep', opts)
2977 fm = ui.formatter('grep', opts)
2978 for ctx in cmdutil.walkchangerevs(repo, match, opts, prep):
2978 for ctx in cmdutil.walkchangerevs(repo, match, opts, prep):
2979 rev = ctx.rev()
2979 rev = ctx.rev()
2980 parent = ctx.p1().rev()
2980 parent = ctx.p1().rev()
2981 for fn in sorted(revfiles.get(rev, [])):
2981 for fn in sorted(revfiles.get(rev, [])):
2982 states = matches[rev][fn]
2982 states = matches[rev][fn]
2983 copy = copies.get(rev, {}).get(fn)
2983 copy = copies.get(rev, {}).get(fn)
2984 if fn in skip:
2984 if fn in skip:
2985 if copy:
2985 if copy:
2986 skip.add(copy)
2986 skip.add(copy)
2987 continue
2987 continue
2988 pstates = matches.get(parent, {}).get(copy or fn, [])
2988 pstates = matches.get(parent, {}).get(copy or fn, [])
2989 if pstates or states:
2989 if pstates or states:
2990 r = display(fm, fn, ctx, pstates, states)
2990 r = display(fm, fn, ctx, pstates, states)
2991 found = found or r
2991 found = found or r
2992 if r and not diff and not all_files:
2992 if r and not diff and not all_files:
2993 skip.add(fn)
2993 skip.add(fn)
2994 if copy:
2994 if copy:
2995 skip.add(copy)
2995 skip.add(copy)
2996 del revfiles[rev]
2996 del revfiles[rev]
2997 # We will keep the matches dict for the duration of the window
2997 # We will keep the matches dict for the duration of the window
2998 # clear the matches dict once the window is over
2998 # clear the matches dict once the window is over
2999 if not revfiles:
2999 if not revfiles:
3000 matches.clear()
3000 matches.clear()
3001 fm.end()
3001 fm.end()
3002
3002
3003 return not found
3003 return not found
3004
3004
3005 @command('heads',
3005 @command('heads',
3006 [('r', 'rev', '',
3006 [('r', 'rev', '',
3007 _('show only heads which are descendants of STARTREV'), _('STARTREV')),
3007 _('show only heads which are descendants of STARTREV'), _('STARTREV')),
3008 ('t', 'topo', False, _('show topological heads only')),
3008 ('t', 'topo', False, _('show topological heads only')),
3009 ('a', 'active', False, _('show active branchheads only (DEPRECATED)')),
3009 ('a', 'active', False, _('show active branchheads only (DEPRECATED)')),
3010 ('c', 'closed', False, _('show normal and closed branch heads')),
3010 ('c', 'closed', False, _('show normal and closed branch heads')),
3011 ] + templateopts,
3011 ] + templateopts,
3012 _('[-ct] [-r STARTREV] [REV]...'),
3012 _('[-ct] [-r STARTREV] [REV]...'),
3013 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
3013 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
3014 intents={INTENT_READONLY})
3014 intents={INTENT_READONLY})
3015 def heads(ui, repo, *branchrevs, **opts):
3015 def heads(ui, repo, *branchrevs, **opts):
3016 """show branch heads
3016 """show branch heads
3017
3017
3018 With no arguments, show all open branch heads in the repository.
3018 With no arguments, show all open branch heads in the repository.
3019 Branch heads are changesets that have no descendants on the
3019 Branch heads are changesets that have no descendants on the
3020 same branch. They are where development generally takes place and
3020 same branch. They are where development generally takes place and
3021 are the usual targets for update and merge operations.
3021 are the usual targets for update and merge operations.
3022
3022
3023 If one or more REVs are given, only open branch heads on the
3023 If one or more REVs are given, only open branch heads on the
3024 branches associated with the specified changesets are shown. This
3024 branches associated with the specified changesets are shown. This
3025 means that you can use :hg:`heads .` to see the heads on the
3025 means that you can use :hg:`heads .` to see the heads on the
3026 currently checked-out branch.
3026 currently checked-out branch.
3027
3027
3028 If -c/--closed is specified, also show branch heads marked closed
3028 If -c/--closed is specified, also show branch heads marked closed
3029 (see :hg:`commit --close-branch`).
3029 (see :hg:`commit --close-branch`).
3030
3030
3031 If STARTREV is specified, only those heads that are descendants of
3031 If STARTREV is specified, only those heads that are descendants of
3032 STARTREV will be displayed.
3032 STARTREV will be displayed.
3033
3033
3034 If -t/--topo is specified, named branch mechanics will be ignored and only
3034 If -t/--topo is specified, named branch mechanics will be ignored and only
3035 topological heads (changesets with no children) will be shown.
3035 topological heads (changesets with no children) will be shown.
3036
3036
3037 Returns 0 if matching heads are found, 1 if not.
3037 Returns 0 if matching heads are found, 1 if not.
3038 """
3038 """
3039
3039
3040 opts = pycompat.byteskwargs(opts)
3040 opts = pycompat.byteskwargs(opts)
3041 start = None
3041 start = None
3042 rev = opts.get('rev')
3042 rev = opts.get('rev')
3043 if rev:
3043 if rev:
3044 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
3044 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
3045 start = scmutil.revsingle(repo, rev, None).node()
3045 start = scmutil.revsingle(repo, rev, None).node()
3046
3046
3047 if opts.get('topo'):
3047 if opts.get('topo'):
3048 heads = [repo[h] for h in repo.heads(start)]
3048 heads = [repo[h] for h in repo.heads(start)]
3049 else:
3049 else:
3050 heads = []
3050 heads = []
3051 for branch in repo.branchmap():
3051 for branch in repo.branchmap():
3052 heads += repo.branchheads(branch, start, opts.get('closed'))
3052 heads += repo.branchheads(branch, start, opts.get('closed'))
3053 heads = [repo[h] for h in heads]
3053 heads = [repo[h] for h in heads]
3054
3054
3055 if branchrevs:
3055 if branchrevs:
3056 branches = set(repo[r].branch()
3056 branches = set(repo[r].branch()
3057 for r in scmutil.revrange(repo, branchrevs))
3057 for r in scmutil.revrange(repo, branchrevs))
3058 heads = [h for h in heads if h.branch() in branches]
3058 heads = [h for h in heads if h.branch() in branches]
3059
3059
3060 if opts.get('active') and branchrevs:
3060 if opts.get('active') and branchrevs:
3061 dagheads = repo.heads(start)
3061 dagheads = repo.heads(start)
3062 heads = [h for h in heads if h.node() in dagheads]
3062 heads = [h for h in heads if h.node() in dagheads]
3063
3063
3064 if branchrevs:
3064 if branchrevs:
3065 haveheads = set(h.branch() for h in heads)
3065 haveheads = set(h.branch() for h in heads)
3066 if branches - haveheads:
3066 if branches - haveheads:
3067 headless = ', '.join(b for b in branches - haveheads)
3067 headless = ', '.join(b for b in branches - haveheads)
3068 msg = _('no open branch heads found on branches %s')
3068 msg = _('no open branch heads found on branches %s')
3069 if opts.get('rev'):
3069 if opts.get('rev'):
3070 msg += _(' (started at %s)') % opts['rev']
3070 msg += _(' (started at %s)') % opts['rev']
3071 ui.warn((msg + '\n') % headless)
3071 ui.warn((msg + '\n') % headless)
3072
3072
3073 if not heads:
3073 if not heads:
3074 return 1
3074 return 1
3075
3075
3076 ui.pager('heads')
3076 ui.pager('heads')
3077 heads = sorted(heads, key=lambda x: -x.rev())
3077 heads = sorted(heads, key=lambda x: -x.rev())
3078 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
3078 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
3079 for ctx in heads:
3079 for ctx in heads:
3080 displayer.show(ctx)
3080 displayer.show(ctx)
3081 displayer.close()
3081 displayer.close()
3082
3082
3083 @command('help',
3083 @command('help',
3084 [('e', 'extension', None, _('show only help for extensions')),
3084 [('e', 'extension', None, _('show only help for extensions')),
3085 ('c', 'command', None, _('show only help for commands')),
3085 ('c', 'command', None, _('show only help for commands')),
3086 ('k', 'keyword', None, _('show topics matching keyword')),
3086 ('k', 'keyword', None, _('show topics matching keyword')),
3087 ('s', 'system', [],
3087 ('s', 'system', [],
3088 _('show help for specific platform(s)'), _('PLATFORM')),
3088 _('show help for specific platform(s)'), _('PLATFORM')),
3089 ],
3089 ],
3090 _('[-eck] [-s PLATFORM] [TOPIC]'),
3090 _('[-eck] [-s PLATFORM] [TOPIC]'),
3091 helpcategory=command.CATEGORY_HELP,
3091 helpcategory=command.CATEGORY_HELP,
3092 norepo=True,
3092 norepo=True,
3093 intents={INTENT_READONLY})
3093 intents={INTENT_READONLY})
3094 def help_(ui, name=None, **opts):
3094 def help_(ui, name=None, **opts):
3095 """show help for a given topic or a help overview
3095 """show help for a given topic or a help overview
3096
3096
3097 With no arguments, print a list of commands with short help messages.
3097 With no arguments, print a list of commands with short help messages.
3098
3098
3099 Given a topic, extension, or command name, print help for that
3099 Given a topic, extension, or command name, print help for that
3100 topic.
3100 topic.
3101
3101
3102 Returns 0 if successful.
3102 Returns 0 if successful.
3103 """
3103 """
3104
3104
3105 keep = opts.get(r'system') or []
3105 keep = opts.get(r'system') or []
3106 if len(keep) == 0:
3106 if len(keep) == 0:
3107 if pycompat.sysplatform.startswith('win'):
3107 if pycompat.sysplatform.startswith('win'):
3108 keep.append('windows')
3108 keep.append('windows')
3109 elif pycompat.sysplatform == 'OpenVMS':
3109 elif pycompat.sysplatform == 'OpenVMS':
3110 keep.append('vms')
3110 keep.append('vms')
3111 elif pycompat.sysplatform == 'plan9':
3111 elif pycompat.sysplatform == 'plan9':
3112 keep.append('plan9')
3112 keep.append('plan9')
3113 else:
3113 else:
3114 keep.append('unix')
3114 keep.append('unix')
3115 keep.append(pycompat.sysplatform.lower())
3115 keep.append(pycompat.sysplatform.lower())
3116 if ui.verbose:
3116 if ui.verbose:
3117 keep.append('verbose')
3117 keep.append('verbose')
3118
3118
3119 commands = sys.modules[__name__]
3119 commands = sys.modules[__name__]
3120 formatted = help.formattedhelp(ui, commands, name, keep=keep, **opts)
3120 formatted = help.formattedhelp(ui, commands, name, keep=keep, **opts)
3121 ui.pager('help')
3121 ui.pager('help')
3122 ui.write(formatted)
3122 ui.write(formatted)
3123
3123
3124
3124
3125 @command('identify|id',
3125 @command('identify|id',
3126 [('r', 'rev', '',
3126 [('r', 'rev', '',
3127 _('identify the specified revision'), _('REV')),
3127 _('identify the specified revision'), _('REV')),
3128 ('n', 'num', None, _('show local revision number')),
3128 ('n', 'num', None, _('show local revision number')),
3129 ('i', 'id', None, _('show global revision id')),
3129 ('i', 'id', None, _('show global revision id')),
3130 ('b', 'branch', None, _('show branch')),
3130 ('b', 'branch', None, _('show branch')),
3131 ('t', 'tags', None, _('show tags')),
3131 ('t', 'tags', None, _('show tags')),
3132 ('B', 'bookmarks', None, _('show bookmarks')),
3132 ('B', 'bookmarks', None, _('show bookmarks')),
3133 ] + remoteopts + formatteropts,
3133 ] + remoteopts + formatteropts,
3134 _('[-nibtB] [-r REV] [SOURCE]'),
3134 _('[-nibtB] [-r REV] [SOURCE]'),
3135 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
3135 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
3136 optionalrepo=True,
3136 optionalrepo=True,
3137 intents={INTENT_READONLY})
3137 intents={INTENT_READONLY})
3138 def identify(ui, repo, source=None, rev=None,
3138 def identify(ui, repo, source=None, rev=None,
3139 num=None, id=None, branch=None, tags=None, bookmarks=None, **opts):
3139 num=None, id=None, branch=None, tags=None, bookmarks=None, **opts):
3140 """identify the working directory or specified revision
3140 """identify the working directory or specified revision
3141
3141
3142 Print a summary identifying the repository state at REV using one or
3142 Print a summary identifying the repository state at REV using one or
3143 two parent hash identifiers, followed by a "+" if the working
3143 two parent hash identifiers, followed by a "+" if the working
3144 directory has uncommitted changes, the branch name (if not default),
3144 directory has uncommitted changes, the branch name (if not default),
3145 a list of tags, and a list of bookmarks.
3145 a list of tags, and a list of bookmarks.
3146
3146
3147 When REV is not given, print a summary of the current state of the
3147 When REV is not given, print a summary of the current state of the
3148 repository including the working directory. Specify -r. to get information
3148 repository including the working directory. Specify -r. to get information
3149 of the working directory parent without scanning uncommitted changes.
3149 of the working directory parent without scanning uncommitted changes.
3150
3150
3151 Specifying a path to a repository root or Mercurial bundle will
3151 Specifying a path to a repository root or Mercurial bundle will
3152 cause lookup to operate on that repository/bundle.
3152 cause lookup to operate on that repository/bundle.
3153
3153
3154 .. container:: verbose
3154 .. container:: verbose
3155
3155
3156 Template:
3156 Template:
3157
3157
3158 The following keywords are supported in addition to the common template
3158 The following keywords are supported in addition to the common template
3159 keywords and functions. See also :hg:`help templates`.
3159 keywords and functions. See also :hg:`help templates`.
3160
3160
3161 :dirty: String. Character ``+`` denoting if the working directory has
3161 :dirty: String. Character ``+`` denoting if the working directory has
3162 uncommitted changes.
3162 uncommitted changes.
3163 :id: String. One or two nodes, optionally followed by ``+``.
3163 :id: String. One or two nodes, optionally followed by ``+``.
3164 :parents: List of strings. Parent nodes of the changeset.
3164 :parents: List of strings. Parent nodes of the changeset.
3165
3165
3166 Examples:
3166 Examples:
3167
3167
3168 - generate a build identifier for the working directory::
3168 - generate a build identifier for the working directory::
3169
3169
3170 hg id --id > build-id.dat
3170 hg id --id > build-id.dat
3171
3171
3172 - find the revision corresponding to a tag::
3172 - find the revision corresponding to a tag::
3173
3173
3174 hg id -n -r 1.3
3174 hg id -n -r 1.3
3175
3175
3176 - check the most recent revision of a remote repository::
3176 - check the most recent revision of a remote repository::
3177
3177
3178 hg id -r tip https://www.mercurial-scm.org/repo/hg/
3178 hg id -r tip https://www.mercurial-scm.org/repo/hg/
3179
3179
3180 See :hg:`log` for generating more information about specific revisions,
3180 See :hg:`log` for generating more information about specific revisions,
3181 including full hash identifiers.
3181 including full hash identifiers.
3182
3182
3183 Returns 0 if successful.
3183 Returns 0 if successful.
3184 """
3184 """
3185
3185
3186 opts = pycompat.byteskwargs(opts)
3186 opts = pycompat.byteskwargs(opts)
3187 if not repo and not source:
3187 if not repo and not source:
3188 raise error.Abort(_("there is no Mercurial repository here "
3188 raise error.Abort(_("there is no Mercurial repository here "
3189 "(.hg not found)"))
3189 "(.hg not found)"))
3190
3190
3191 default = not (num or id or branch or tags or bookmarks)
3191 default = not (num or id or branch or tags or bookmarks)
3192 output = []
3192 output = []
3193 revs = []
3193 revs = []
3194
3194
3195 if source:
3195 if source:
3196 source, branches = hg.parseurl(ui.expandpath(source))
3196 source, branches = hg.parseurl(ui.expandpath(source))
3197 peer = hg.peer(repo or ui, opts, source) # only pass ui when no repo
3197 peer = hg.peer(repo or ui, opts, source) # only pass ui when no repo
3198 repo = peer.local()
3198 repo = peer.local()
3199 revs, checkout = hg.addbranchrevs(repo, peer, branches, None)
3199 revs, checkout = hg.addbranchrevs(repo, peer, branches, None)
3200
3200
3201 fm = ui.formatter('identify', opts)
3201 fm = ui.formatter('identify', opts)
3202 fm.startitem()
3202 fm.startitem()
3203
3203
3204 if not repo:
3204 if not repo:
3205 if num or branch or tags:
3205 if num or branch or tags:
3206 raise error.Abort(
3206 raise error.Abort(
3207 _("can't query remote revision number, branch, or tags"))
3207 _("can't query remote revision number, branch, or tags"))
3208 if not rev and revs:
3208 if not rev and revs:
3209 rev = revs[0]
3209 rev = revs[0]
3210 if not rev:
3210 if not rev:
3211 rev = "tip"
3211 rev = "tip"
3212
3212
3213 remoterev = peer.lookup(rev)
3213 remoterev = peer.lookup(rev)
3214 hexrev = fm.hexfunc(remoterev)
3214 hexrev = fm.hexfunc(remoterev)
3215 if default or id:
3215 if default or id:
3216 output = [hexrev]
3216 output = [hexrev]
3217 fm.data(id=hexrev)
3217 fm.data(id=hexrev)
3218
3218
3219 @util.cachefunc
3219 @util.cachefunc
3220 def getbms():
3220 def getbms():
3221 bms = []
3221 bms = []
3222
3222
3223 if 'bookmarks' in peer.listkeys('namespaces'):
3223 if 'bookmarks' in peer.listkeys('namespaces'):
3224 hexremoterev = hex(remoterev)
3224 hexremoterev = hex(remoterev)
3225 bms = [bm for bm, bmr in peer.listkeys('bookmarks').iteritems()
3225 bms = [bm for bm, bmr in peer.listkeys('bookmarks').iteritems()
3226 if bmr == hexremoterev]
3226 if bmr == hexremoterev]
3227
3227
3228 return sorted(bms)
3228 return sorted(bms)
3229
3229
3230 if fm.isplain():
3230 if fm.isplain():
3231 if bookmarks:
3231 if bookmarks:
3232 output.extend(getbms())
3232 output.extend(getbms())
3233 elif default and not ui.quiet:
3233 elif default and not ui.quiet:
3234 # multiple bookmarks for a single parent separated by '/'
3234 # multiple bookmarks for a single parent separated by '/'
3235 bm = '/'.join(getbms())
3235 bm = '/'.join(getbms())
3236 if bm:
3236 if bm:
3237 output.append(bm)
3237 output.append(bm)
3238 else:
3238 else:
3239 fm.data(node=hex(remoterev))
3239 fm.data(node=hex(remoterev))
3240 if bookmarks or 'bookmarks' in fm.datahint():
3240 if bookmarks or 'bookmarks' in fm.datahint():
3241 fm.data(bookmarks=fm.formatlist(getbms(), name='bookmark'))
3241 fm.data(bookmarks=fm.formatlist(getbms(), name='bookmark'))
3242 else:
3242 else:
3243 if rev:
3243 if rev:
3244 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
3244 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
3245 ctx = scmutil.revsingle(repo, rev, None)
3245 ctx = scmutil.revsingle(repo, rev, None)
3246
3246
3247 if ctx.rev() is None:
3247 if ctx.rev() is None:
3248 ctx = repo[None]
3248 ctx = repo[None]
3249 parents = ctx.parents()
3249 parents = ctx.parents()
3250 taglist = []
3250 taglist = []
3251 for p in parents:
3251 for p in parents:
3252 taglist.extend(p.tags())
3252 taglist.extend(p.tags())
3253
3253
3254 dirty = ""
3254 dirty = ""
3255 if ctx.dirty(missing=True, merge=False, branch=False):
3255 if ctx.dirty(missing=True, merge=False, branch=False):
3256 dirty = '+'
3256 dirty = '+'
3257 fm.data(dirty=dirty)
3257 fm.data(dirty=dirty)
3258
3258
3259 hexoutput = [fm.hexfunc(p.node()) for p in parents]
3259 hexoutput = [fm.hexfunc(p.node()) for p in parents]
3260 if default or id:
3260 if default or id:
3261 output = ["%s%s" % ('+'.join(hexoutput), dirty)]
3261 output = ["%s%s" % ('+'.join(hexoutput), dirty)]
3262 fm.data(id="%s%s" % ('+'.join(hexoutput), dirty))
3262 fm.data(id="%s%s" % ('+'.join(hexoutput), dirty))
3263
3263
3264 if num:
3264 if num:
3265 numoutput = ["%d" % p.rev() for p in parents]
3265 numoutput = ["%d" % p.rev() for p in parents]
3266 output.append("%s%s" % ('+'.join(numoutput), dirty))
3266 output.append("%s%s" % ('+'.join(numoutput), dirty))
3267
3267
3268 fm.data(parents=fm.formatlist([fm.hexfunc(p.node())
3268 fm.data(parents=fm.formatlist([fm.hexfunc(p.node())
3269 for p in parents], name='node'))
3269 for p in parents], name='node'))
3270 else:
3270 else:
3271 hexoutput = fm.hexfunc(ctx.node())
3271 hexoutput = fm.hexfunc(ctx.node())
3272 if default or id:
3272 if default or id:
3273 output = [hexoutput]
3273 output = [hexoutput]
3274 fm.data(id=hexoutput)
3274 fm.data(id=hexoutput)
3275
3275
3276 if num:
3276 if num:
3277 output.append(pycompat.bytestr(ctx.rev()))
3277 output.append(pycompat.bytestr(ctx.rev()))
3278 taglist = ctx.tags()
3278 taglist = ctx.tags()
3279
3279
3280 if default and not ui.quiet:
3280 if default and not ui.quiet:
3281 b = ctx.branch()
3281 b = ctx.branch()
3282 if b != 'default':
3282 if b != 'default':
3283 output.append("(%s)" % b)
3283 output.append("(%s)" % b)
3284
3284
3285 # multiple tags for a single parent separated by '/'
3285 # multiple tags for a single parent separated by '/'
3286 t = '/'.join(taglist)
3286 t = '/'.join(taglist)
3287 if t:
3287 if t:
3288 output.append(t)
3288 output.append(t)
3289
3289
3290 # multiple bookmarks for a single parent separated by '/'
3290 # multiple bookmarks for a single parent separated by '/'
3291 bm = '/'.join(ctx.bookmarks())
3291 bm = '/'.join(ctx.bookmarks())
3292 if bm:
3292 if bm:
3293 output.append(bm)
3293 output.append(bm)
3294 else:
3294 else:
3295 if branch:
3295 if branch:
3296 output.append(ctx.branch())
3296 output.append(ctx.branch())
3297
3297
3298 if tags:
3298 if tags:
3299 output.extend(taglist)
3299 output.extend(taglist)
3300
3300
3301 if bookmarks:
3301 if bookmarks:
3302 output.extend(ctx.bookmarks())
3302 output.extend(ctx.bookmarks())
3303
3303
3304 fm.data(node=ctx.hex())
3304 fm.data(node=ctx.hex())
3305 fm.data(branch=ctx.branch())
3305 fm.data(branch=ctx.branch())
3306 fm.data(tags=fm.formatlist(taglist, name='tag', sep=':'))
3306 fm.data(tags=fm.formatlist(taglist, name='tag', sep=':'))
3307 fm.data(bookmarks=fm.formatlist(ctx.bookmarks(), name='bookmark'))
3307 fm.data(bookmarks=fm.formatlist(ctx.bookmarks(), name='bookmark'))
3308 fm.context(ctx=ctx)
3308 fm.context(ctx=ctx)
3309
3309
3310 fm.plain("%s\n" % ' '.join(output))
3310 fm.plain("%s\n" % ' '.join(output))
3311 fm.end()
3311 fm.end()
3312
3312
3313 @command('import|patch',
3313 @command('import|patch',
3314 [('p', 'strip', 1,
3314 [('p', 'strip', 1,
3315 _('directory strip option for patch. This has the same '
3315 _('directory strip option for patch. This has the same '
3316 'meaning as the corresponding patch option'), _('NUM')),
3316 'meaning as the corresponding patch option'), _('NUM')),
3317 ('b', 'base', '', _('base path (DEPRECATED)'), _('PATH')),
3317 ('b', 'base', '', _('base path (DEPRECATED)'), _('PATH')),
3318 ('e', 'edit', False, _('invoke editor on commit messages')),
3318 ('e', 'edit', False, _('invoke editor on commit messages')),
3319 ('f', 'force', None,
3319 ('f', 'force', None,
3320 _('skip check for outstanding uncommitted changes (DEPRECATED)')),
3320 _('skip check for outstanding uncommitted changes (DEPRECATED)')),
3321 ('', 'no-commit', None,
3321 ('', 'no-commit', None,
3322 _("don't commit, just update the working directory")),
3322 _("don't commit, just update the working directory")),
3323 ('', 'bypass', None,
3323 ('', 'bypass', None,
3324 _("apply patch without touching the working directory")),
3324 _("apply patch without touching the working directory")),
3325 ('', 'partial', None,
3325 ('', 'partial', None,
3326 _('commit even if some hunks fail')),
3326 _('commit even if some hunks fail')),
3327 ('', 'exact', None,
3327 ('', 'exact', None,
3328 _('abort if patch would apply lossily')),
3328 _('abort if patch would apply lossily')),
3329 ('', 'prefix', '',
3329 ('', 'prefix', '',
3330 _('apply patch to subdirectory'), _('DIR')),
3330 _('apply patch to subdirectory'), _('DIR')),
3331 ('', 'import-branch', None,
3331 ('', 'import-branch', None,
3332 _('use any branch information in patch (implied by --exact)'))] +
3332 _('use any branch information in patch (implied by --exact)'))] +
3333 commitopts + commitopts2 + similarityopts,
3333 commitopts + commitopts2 + similarityopts,
3334 _('[OPTION]... PATCH...'),
3334 _('[OPTION]... PATCH...'),
3335 helpcategory=command.CATEGORY_IMPORT_EXPORT)
3335 helpcategory=command.CATEGORY_IMPORT_EXPORT)
3336 def import_(ui, repo, patch1=None, *patches, **opts):
3336 def import_(ui, repo, patch1=None, *patches, **opts):
3337 """import an ordered set of patches
3337 """import an ordered set of patches
3338
3338
3339 Import a list of patches and commit them individually (unless
3339 Import a list of patches and commit them individually (unless
3340 --no-commit is specified).
3340 --no-commit is specified).
3341
3341
3342 To read a patch from standard input (stdin), use "-" as the patch
3342 To read a patch from standard input (stdin), use "-" as the patch
3343 name. If a URL is specified, the patch will be downloaded from
3343 name. If a URL is specified, the patch will be downloaded from
3344 there.
3344 there.
3345
3345
3346 Import first applies changes to the working directory (unless
3346 Import first applies changes to the working directory (unless
3347 --bypass is specified), import will abort if there are outstanding
3347 --bypass is specified), import will abort if there are outstanding
3348 changes.
3348 changes.
3349
3349
3350 Use --bypass to apply and commit patches directly to the
3350 Use --bypass to apply and commit patches directly to the
3351 repository, without affecting the working directory. Without
3351 repository, without affecting the working directory. Without
3352 --exact, patches will be applied on top of the working directory
3352 --exact, patches will be applied on top of the working directory
3353 parent revision.
3353 parent revision.
3354
3354
3355 You can import a patch straight from a mail message. Even patches
3355 You can import a patch straight from a mail message. Even patches
3356 as attachments work (to use the body part, it must have type
3356 as attachments work (to use the body part, it must have type
3357 text/plain or text/x-patch). From and Subject headers of email
3357 text/plain or text/x-patch). From and Subject headers of email
3358 message are used as default committer and commit message. All
3358 message are used as default committer and commit message. All
3359 text/plain body parts before first diff are added to the commit
3359 text/plain body parts before first diff are added to the commit
3360 message.
3360 message.
3361
3361
3362 If the imported patch was generated by :hg:`export`, user and
3362 If the imported patch was generated by :hg:`export`, user and
3363 description from patch override values from message headers and
3363 description from patch override values from message headers and
3364 body. Values given on command line with -m/--message and -u/--user
3364 body. Values given on command line with -m/--message and -u/--user
3365 override these.
3365 override these.
3366
3366
3367 If --exact is specified, import will set the working directory to
3367 If --exact is specified, import will set the working directory to
3368 the parent of each patch before applying it, and will abort if the
3368 the parent of each patch before applying it, and will abort if the
3369 resulting changeset has a different ID than the one recorded in
3369 resulting changeset has a different ID than the one recorded in
3370 the patch. This will guard against various ways that portable
3370 the patch. This will guard against various ways that portable
3371 patch formats and mail systems might fail to transfer Mercurial
3371 patch formats and mail systems might fail to transfer Mercurial
3372 data or metadata. See :hg:`bundle` for lossless transmission.
3372 data or metadata. See :hg:`bundle` for lossless transmission.
3373
3373
3374 Use --partial to ensure a changeset will be created from the patch
3374 Use --partial to ensure a changeset will be created from the patch
3375 even if some hunks fail to apply. Hunks that fail to apply will be
3375 even if some hunks fail to apply. Hunks that fail to apply will be
3376 written to a <target-file>.rej file. Conflicts can then be resolved
3376 written to a <target-file>.rej file. Conflicts can then be resolved
3377 by hand before :hg:`commit --amend` is run to update the created
3377 by hand before :hg:`commit --amend` is run to update the created
3378 changeset. This flag exists to let people import patches that
3378 changeset. This flag exists to let people import patches that
3379 partially apply without losing the associated metadata (author,
3379 partially apply without losing the associated metadata (author,
3380 date, description, ...).
3380 date, description, ...).
3381
3381
3382 .. note::
3382 .. note::
3383
3383
3384 When no hunks apply cleanly, :hg:`import --partial` will create
3384 When no hunks apply cleanly, :hg:`import --partial` will create
3385 an empty changeset, importing only the patch metadata.
3385 an empty changeset, importing only the patch metadata.
3386
3386
3387 With -s/--similarity, hg will attempt to discover renames and
3387 With -s/--similarity, hg will attempt to discover renames and
3388 copies in the patch in the same way as :hg:`addremove`.
3388 copies in the patch in the same way as :hg:`addremove`.
3389
3389
3390 It is possible to use external patch programs to perform the patch
3390 It is possible to use external patch programs to perform the patch
3391 by setting the ``ui.patch`` configuration option. For the default
3391 by setting the ``ui.patch`` configuration option. For the default
3392 internal tool, the fuzz can also be configured via ``patch.fuzz``.
3392 internal tool, the fuzz can also be configured via ``patch.fuzz``.
3393 See :hg:`help config` for more information about configuration
3393 See :hg:`help config` for more information about configuration
3394 files and how to use these options.
3394 files and how to use these options.
3395
3395
3396 See :hg:`help dates` for a list of formats valid for -d/--date.
3396 See :hg:`help dates` for a list of formats valid for -d/--date.
3397
3397
3398 .. container:: verbose
3398 .. container:: verbose
3399
3399
3400 Examples:
3400 Examples:
3401
3401
3402 - import a traditional patch from a website and detect renames::
3402 - import a traditional patch from a website and detect renames::
3403
3403
3404 hg import -s 80 http://example.com/bugfix.patch
3404 hg import -s 80 http://example.com/bugfix.patch
3405
3405
3406 - import a changeset from an hgweb server::
3406 - import a changeset from an hgweb server::
3407
3407
3408 hg import https://www.mercurial-scm.org/repo/hg/rev/5ca8c111e9aa
3408 hg import https://www.mercurial-scm.org/repo/hg/rev/5ca8c111e9aa
3409
3409
3410 - import all the patches in an Unix-style mbox::
3410 - import all the patches in an Unix-style mbox::
3411
3411
3412 hg import incoming-patches.mbox
3412 hg import incoming-patches.mbox
3413
3413
3414 - import patches from stdin::
3414 - import patches from stdin::
3415
3415
3416 hg import -
3416 hg import -
3417
3417
3418 - attempt to exactly restore an exported changeset (not always
3418 - attempt to exactly restore an exported changeset (not always
3419 possible)::
3419 possible)::
3420
3420
3421 hg import --exact proposed-fix.patch
3421 hg import --exact proposed-fix.patch
3422
3422
3423 - use an external tool to apply a patch which is too fuzzy for
3423 - use an external tool to apply a patch which is too fuzzy for
3424 the default internal tool.
3424 the default internal tool.
3425
3425
3426 hg import --config ui.patch="patch --merge" fuzzy.patch
3426 hg import --config ui.patch="patch --merge" fuzzy.patch
3427
3427
3428 - change the default fuzzing from 2 to a less strict 7
3428 - change the default fuzzing from 2 to a less strict 7
3429
3429
3430 hg import --config ui.fuzz=7 fuzz.patch
3430 hg import --config ui.fuzz=7 fuzz.patch
3431
3431
3432 Returns 0 on success, 1 on partial success (see --partial).
3432 Returns 0 on success, 1 on partial success (see --partial).
3433 """
3433 """
3434
3434
3435 opts = pycompat.byteskwargs(opts)
3435 opts = pycompat.byteskwargs(opts)
3436 if not patch1:
3436 if not patch1:
3437 raise error.Abort(_('need at least one patch to import'))
3437 raise error.Abort(_('need at least one patch to import'))
3438
3438
3439 patches = (patch1,) + patches
3439 patches = (patch1,) + patches
3440
3440
3441 date = opts.get('date')
3441 date = opts.get('date')
3442 if date:
3442 if date:
3443 opts['date'] = dateutil.parsedate(date)
3443 opts['date'] = dateutil.parsedate(date)
3444
3444
3445 exact = opts.get('exact')
3445 exact = opts.get('exact')
3446 update = not opts.get('bypass')
3446 update = not opts.get('bypass')
3447 if not update and opts.get('no_commit'):
3447 if not update and opts.get('no_commit'):
3448 raise error.Abort(_('cannot use --no-commit with --bypass'))
3448 raise error.Abort(_('cannot use --no-commit with --bypass'))
3449 try:
3449 try:
3450 sim = float(opts.get('similarity') or 0)
3450 sim = float(opts.get('similarity') or 0)
3451 except ValueError:
3451 except ValueError:
3452 raise error.Abort(_('similarity must be a number'))
3452 raise error.Abort(_('similarity must be a number'))
3453 if sim < 0 or sim > 100:
3453 if sim < 0 or sim > 100:
3454 raise error.Abort(_('similarity must be between 0 and 100'))
3454 raise error.Abort(_('similarity must be between 0 and 100'))
3455 if sim and not update:
3455 if sim and not update:
3456 raise error.Abort(_('cannot use --similarity with --bypass'))
3456 raise error.Abort(_('cannot use --similarity with --bypass'))
3457 if exact:
3457 if exact:
3458 if opts.get('edit'):
3458 if opts.get('edit'):
3459 raise error.Abort(_('cannot use --exact with --edit'))
3459 raise error.Abort(_('cannot use --exact with --edit'))
3460 if opts.get('prefix'):
3460 if opts.get('prefix'):
3461 raise error.Abort(_('cannot use --exact with --prefix'))
3461 raise error.Abort(_('cannot use --exact with --prefix'))
3462
3462
3463 base = opts["base"]
3463 base = opts["base"]
3464 msgs = []
3464 msgs = []
3465 ret = 0
3465 ret = 0
3466
3466
3467 with repo.wlock():
3467 with repo.wlock():
3468 if update:
3468 if update:
3469 cmdutil.checkunfinished(repo)
3469 cmdutil.checkunfinished(repo)
3470 if (exact or not opts.get('force')):
3470 if (exact or not opts.get('force')):
3471 cmdutil.bailifchanged(repo)
3471 cmdutil.bailifchanged(repo)
3472
3472
3473 if not opts.get('no_commit'):
3473 if not opts.get('no_commit'):
3474 lock = repo.lock
3474 lock = repo.lock
3475 tr = lambda: repo.transaction('import')
3475 tr = lambda: repo.transaction('import')
3476 dsguard = util.nullcontextmanager
3476 dsguard = util.nullcontextmanager
3477 else:
3477 else:
3478 lock = util.nullcontextmanager
3478 lock = util.nullcontextmanager
3479 tr = util.nullcontextmanager
3479 tr = util.nullcontextmanager
3480 dsguard = lambda: dirstateguard.dirstateguard(repo, 'import')
3480 dsguard = lambda: dirstateguard.dirstateguard(repo, 'import')
3481 with lock(), tr(), dsguard():
3481 with lock(), tr(), dsguard():
3482 parents = repo[None].parents()
3482 parents = repo[None].parents()
3483 for patchurl in patches:
3483 for patchurl in patches:
3484 if patchurl == '-':
3484 if patchurl == '-':
3485 ui.status(_('applying patch from stdin\n'))
3485 ui.status(_('applying patch from stdin\n'))
3486 patchfile = ui.fin
3486 patchfile = ui.fin
3487 patchurl = 'stdin' # for error message
3487 patchurl = 'stdin' # for error message
3488 else:
3488 else:
3489 patchurl = os.path.join(base, patchurl)
3489 patchurl = os.path.join(base, patchurl)
3490 ui.status(_('applying %s\n') % patchurl)
3490 ui.status(_('applying %s\n') % patchurl)
3491 patchfile = hg.openpath(ui, patchurl)
3491 patchfile = hg.openpath(ui, patchurl)
3492
3492
3493 haspatch = False
3493 haspatch = False
3494 for hunk in patch.split(patchfile):
3494 for hunk in patch.split(patchfile):
3495 with patch.extract(ui, hunk) as patchdata:
3495 with patch.extract(ui, hunk) as patchdata:
3496 msg, node, rej = cmdutil.tryimportone(ui, repo,
3496 msg, node, rej = cmdutil.tryimportone(ui, repo,
3497 patchdata,
3497 patchdata,
3498 parents, opts,
3498 parents, opts,
3499 msgs, hg.clean)
3499 msgs, hg.clean)
3500 if msg:
3500 if msg:
3501 haspatch = True
3501 haspatch = True
3502 ui.note(msg + '\n')
3502 ui.note(msg + '\n')
3503 if update or exact:
3503 if update or exact:
3504 parents = repo[None].parents()
3504 parents = repo[None].parents()
3505 else:
3505 else:
3506 parents = [repo[node]]
3506 parents = [repo[node]]
3507 if rej:
3507 if rej:
3508 ui.write_err(_("patch applied partially\n"))
3508 ui.write_err(_("patch applied partially\n"))
3509 ui.write_err(_("(fix the .rej files and run "
3509 ui.write_err(_("(fix the .rej files and run "
3510 "`hg commit --amend`)\n"))
3510 "`hg commit --amend`)\n"))
3511 ret = 1
3511 ret = 1
3512 break
3512 break
3513
3513
3514 if not haspatch:
3514 if not haspatch:
3515 raise error.Abort(_('%s: no diffs found') % patchurl)
3515 raise error.Abort(_('%s: no diffs found') % patchurl)
3516
3516
3517 if msgs:
3517 if msgs:
3518 repo.savecommitmessage('\n* * *\n'.join(msgs))
3518 repo.savecommitmessage('\n* * *\n'.join(msgs))
3519 return ret
3519 return ret
3520
3520
3521 @command('incoming|in',
3521 @command('incoming|in',
3522 [('f', 'force', None,
3522 [('f', 'force', None,
3523 _('run even if remote repository is unrelated')),
3523 _('run even if remote repository is unrelated')),
3524 ('n', 'newest-first', None, _('show newest record first')),
3524 ('n', 'newest-first', None, _('show newest record first')),
3525 ('', 'bundle', '',
3525 ('', 'bundle', '',
3526 _('file to store the bundles into'), _('FILE')),
3526 _('file to store the bundles into'), _('FILE')),
3527 ('r', 'rev', [], _('a remote changeset intended to be added'), _('REV')),
3527 ('r', 'rev', [], _('a remote changeset intended to be added'), _('REV')),
3528 ('B', 'bookmarks', False, _("compare bookmarks")),
3528 ('B', 'bookmarks', False, _("compare bookmarks")),
3529 ('b', 'branch', [],
3529 ('b', 'branch', [],
3530 _('a specific branch you would like to pull'), _('BRANCH')),
3530 _('a specific branch you would like to pull'), _('BRANCH')),
3531 ] + logopts + remoteopts + subrepoopts,
3531 ] + logopts + remoteopts + subrepoopts,
3532 _('[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]'),
3532 _('[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]'),
3533 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT)
3533 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT)
3534 def incoming(ui, repo, source="default", **opts):
3534 def incoming(ui, repo, source="default", **opts):
3535 """show new changesets found in source
3535 """show new changesets found in source
3536
3536
3537 Show new changesets found in the specified path/URL or the default
3537 Show new changesets found in the specified path/URL or the default
3538 pull location. These are the changesets that would have been pulled
3538 pull location. These are the changesets that would have been pulled
3539 by :hg:`pull` at the time you issued this command.
3539 by :hg:`pull` at the time you issued this command.
3540
3540
3541 See pull for valid source format details.
3541 See pull for valid source format details.
3542
3542
3543 .. container:: verbose
3543 .. container:: verbose
3544
3544
3545 With -B/--bookmarks, the result of bookmark comparison between
3545 With -B/--bookmarks, the result of bookmark comparison between
3546 local and remote repositories is displayed. With -v/--verbose,
3546 local and remote repositories is displayed. With -v/--verbose,
3547 status is also displayed for each bookmark like below::
3547 status is also displayed for each bookmark like below::
3548
3548
3549 BM1 01234567890a added
3549 BM1 01234567890a added
3550 BM2 1234567890ab advanced
3550 BM2 1234567890ab advanced
3551 BM3 234567890abc diverged
3551 BM3 234567890abc diverged
3552 BM4 34567890abcd changed
3552 BM4 34567890abcd changed
3553
3553
3554 The action taken locally when pulling depends on the
3554 The action taken locally when pulling depends on the
3555 status of each bookmark:
3555 status of each bookmark:
3556
3556
3557 :``added``: pull will create it
3557 :``added``: pull will create it
3558 :``advanced``: pull will update it
3558 :``advanced``: pull will update it
3559 :``diverged``: pull will create a divergent bookmark
3559 :``diverged``: pull will create a divergent bookmark
3560 :``changed``: result depends on remote changesets
3560 :``changed``: result depends on remote changesets
3561
3561
3562 From the point of view of pulling behavior, bookmark
3562 From the point of view of pulling behavior, bookmark
3563 existing only in the remote repository are treated as ``added``,
3563 existing only in the remote repository are treated as ``added``,
3564 even if it is in fact locally deleted.
3564 even if it is in fact locally deleted.
3565
3565
3566 .. container:: verbose
3566 .. container:: verbose
3567
3567
3568 For remote repository, using --bundle avoids downloading the
3568 For remote repository, using --bundle avoids downloading the
3569 changesets twice if the incoming is followed by a pull.
3569 changesets twice if the incoming is followed by a pull.
3570
3570
3571 Examples:
3571 Examples:
3572
3572
3573 - show incoming changes with patches and full description::
3573 - show incoming changes with patches and full description::
3574
3574
3575 hg incoming -vp
3575 hg incoming -vp
3576
3576
3577 - show incoming changes excluding merges, store a bundle::
3577 - show incoming changes excluding merges, store a bundle::
3578
3578
3579 hg in -vpM --bundle incoming.hg
3579 hg in -vpM --bundle incoming.hg
3580 hg pull incoming.hg
3580 hg pull incoming.hg
3581
3581
3582 - briefly list changes inside a bundle::
3582 - briefly list changes inside a bundle::
3583
3583
3584 hg in changes.hg -T "{desc|firstline}\\n"
3584 hg in changes.hg -T "{desc|firstline}\\n"
3585
3585
3586 Returns 0 if there are incoming changes, 1 otherwise.
3586 Returns 0 if there are incoming changes, 1 otherwise.
3587 """
3587 """
3588 opts = pycompat.byteskwargs(opts)
3588 opts = pycompat.byteskwargs(opts)
3589 if opts.get('graph'):
3589 if opts.get('graph'):
3590 logcmdutil.checkunsupportedgraphflags([], opts)
3590 logcmdutil.checkunsupportedgraphflags([], opts)
3591 def display(other, chlist, displayer):
3591 def display(other, chlist, displayer):
3592 revdag = logcmdutil.graphrevs(other, chlist, opts)
3592 revdag = logcmdutil.graphrevs(other, chlist, opts)
3593 logcmdutil.displaygraph(ui, repo, revdag, displayer,
3593 logcmdutil.displaygraph(ui, repo, revdag, displayer,
3594 graphmod.asciiedges)
3594 graphmod.asciiedges)
3595
3595
3596 hg._incoming(display, lambda: 1, ui, repo, source, opts, buffered=True)
3596 hg._incoming(display, lambda: 1, ui, repo, source, opts, buffered=True)
3597 return 0
3597 return 0
3598
3598
3599 if opts.get('bundle') and opts.get('subrepos'):
3599 if opts.get('bundle') and opts.get('subrepos'):
3600 raise error.Abort(_('cannot combine --bundle and --subrepos'))
3600 raise error.Abort(_('cannot combine --bundle and --subrepos'))
3601
3601
3602 if opts.get('bookmarks'):
3602 if opts.get('bookmarks'):
3603 source, branches = hg.parseurl(ui.expandpath(source),
3603 source, branches = hg.parseurl(ui.expandpath(source),
3604 opts.get('branch'))
3604 opts.get('branch'))
3605 other = hg.peer(repo, opts, source)
3605 other = hg.peer(repo, opts, source)
3606 if 'bookmarks' not in other.listkeys('namespaces'):
3606 if 'bookmarks' not in other.listkeys('namespaces'):
3607 ui.warn(_("remote doesn't support bookmarks\n"))
3607 ui.warn(_("remote doesn't support bookmarks\n"))
3608 return 0
3608 return 0
3609 ui.pager('incoming')
3609 ui.pager('incoming')
3610 ui.status(_('comparing with %s\n') % util.hidepassword(source))
3610 ui.status(_('comparing with %s\n') % util.hidepassword(source))
3611 return bookmarks.incoming(ui, repo, other)
3611 return bookmarks.incoming(ui, repo, other)
3612
3612
3613 repo._subtoppath = ui.expandpath(source)
3613 repo._subtoppath = ui.expandpath(source)
3614 try:
3614 try:
3615 return hg.incoming(ui, repo, source, opts)
3615 return hg.incoming(ui, repo, source, opts)
3616 finally:
3616 finally:
3617 del repo._subtoppath
3617 del repo._subtoppath
3618
3618
3619
3619
3620 @command('init', remoteopts, _('[-e CMD] [--remotecmd CMD] [DEST]'),
3620 @command('init', remoteopts, _('[-e CMD] [--remotecmd CMD] [DEST]'),
3621 helpcategory=command.CATEGORY_REPO_CREATION,
3621 helpcategory=command.CATEGORY_REPO_CREATION,
3622 helpbasic=True, norepo=True)
3622 helpbasic=True, norepo=True)
3623 def init(ui, dest=".", **opts):
3623 def init(ui, dest=".", **opts):
3624 """create a new repository in the given directory
3624 """create a new repository in the given directory
3625
3625
3626 Initialize a new repository in the given directory. If the given
3626 Initialize a new repository in the given directory. If the given
3627 directory does not exist, it will be created.
3627 directory does not exist, it will be created.
3628
3628
3629 If no directory is given, the current directory is used.
3629 If no directory is given, the current directory is used.
3630
3630
3631 It is possible to specify an ``ssh://`` URL as the destination.
3631 It is possible to specify an ``ssh://`` URL as the destination.
3632 See :hg:`help urls` for more information.
3632 See :hg:`help urls` for more information.
3633
3633
3634 Returns 0 on success.
3634 Returns 0 on success.
3635 """
3635 """
3636 opts = pycompat.byteskwargs(opts)
3636 opts = pycompat.byteskwargs(opts)
3637 hg.peer(ui, opts, ui.expandpath(dest), create=True)
3637 hg.peer(ui, opts, ui.expandpath(dest), create=True)
3638
3638
3639 @command('locate',
3639 @command('locate',
3640 [('r', 'rev', '', _('search the repository as it is in REV'), _('REV')),
3640 [('r', 'rev', '', _('search the repository as it is in REV'), _('REV')),
3641 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
3641 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
3642 ('f', 'fullpath', None, _('print complete paths from the filesystem root')),
3642 ('f', 'fullpath', None, _('print complete paths from the filesystem root')),
3643 ] + walkopts,
3643 ] + walkopts,
3644 _('[OPTION]... [PATTERN]...'),
3644 _('[OPTION]... [PATTERN]...'),
3645 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
3645 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
3646 def locate(ui, repo, *pats, **opts):
3646 def locate(ui, repo, *pats, **opts):
3647 """locate files matching specific patterns (DEPRECATED)
3647 """locate files matching specific patterns (DEPRECATED)
3648
3648
3649 Print files under Mercurial control in the working directory whose
3649 Print files under Mercurial control in the working directory whose
3650 names match the given patterns.
3650 names match the given patterns.
3651
3651
3652 By default, this command searches all directories in the working
3652 By default, this command searches all directories in the working
3653 directory. To search just the current directory and its
3653 directory. To search just the current directory and its
3654 subdirectories, use "--include .".
3654 subdirectories, use "--include .".
3655
3655
3656 If no patterns are given to match, this command prints the names
3656 If no patterns are given to match, this command prints the names
3657 of all files under Mercurial control in the working directory.
3657 of all files under Mercurial control in the working directory.
3658
3658
3659 If you want to feed the output of this command into the "xargs"
3659 If you want to feed the output of this command into the "xargs"
3660 command, use the -0 option to both this command and "xargs". This
3660 command, use the -0 option to both this command and "xargs". This
3661 will avoid the problem of "xargs" treating single filenames that
3661 will avoid the problem of "xargs" treating single filenames that
3662 contain whitespace as multiple filenames.
3662 contain whitespace as multiple filenames.
3663
3663
3664 See :hg:`help files` for a more versatile command.
3664 See :hg:`help files` for a more versatile command.
3665
3665
3666 Returns 0 if a match is found, 1 otherwise.
3666 Returns 0 if a match is found, 1 otherwise.
3667 """
3667 """
3668 opts = pycompat.byteskwargs(opts)
3668 opts = pycompat.byteskwargs(opts)
3669 if opts.get('print0'):
3669 if opts.get('print0'):
3670 end = '\0'
3670 end = '\0'
3671 else:
3671 else:
3672 end = '\n'
3672 end = '\n'
3673 ctx = scmutil.revsingle(repo, opts.get('rev'), None)
3673 ctx = scmutil.revsingle(repo, opts.get('rev'), None)
3674
3674
3675 ret = 1
3675 ret = 1
3676 m = scmutil.match(ctx, pats, opts, default='relglob',
3676 m = scmutil.match(ctx, pats, opts, default='relglob',
3677 badfn=lambda x, y: False)
3677 badfn=lambda x, y: False)
3678
3678
3679 ui.pager('locate')
3679 ui.pager('locate')
3680 if ctx.rev() is None:
3680 if ctx.rev() is None:
3681 # When run on the working copy, "locate" includes removed files, so
3681 # When run on the working copy, "locate" includes removed files, so
3682 # we get the list of files from the dirstate.
3682 # we get the list of files from the dirstate.
3683 filesgen = sorted(repo.dirstate.matches(m))
3683 filesgen = sorted(repo.dirstate.matches(m))
3684 else:
3684 else:
3685 filesgen = ctx.matches(m)
3685 filesgen = ctx.matches(m)
3686 for abs in filesgen:
3686 for abs in filesgen:
3687 if opts.get('fullpath'):
3687 if opts.get('fullpath'):
3688 ui.write(repo.wjoin(abs), end)
3688 ui.write(repo.wjoin(abs), end)
3689 else:
3689 else:
3690 ui.write(((pats and m.rel(abs)) or abs), end)
3690 ui.write(((pats and m.rel(abs)) or abs), end)
3691 ret = 0
3691 ret = 0
3692
3692
3693 return ret
3693 return ret
3694
3694
3695 @command('log|history',
3695 @command('log|history',
3696 [('f', 'follow', None,
3696 [('f', 'follow', None,
3697 _('follow changeset history, or file history across copies and renames')),
3697 _('follow changeset history, or file history across copies and renames')),
3698 ('', 'follow-first', None,
3698 ('', 'follow-first', None,
3699 _('only follow the first parent of merge changesets (DEPRECATED)')),
3699 _('only follow the first parent of merge changesets (DEPRECATED)')),
3700 ('d', 'date', '', _('show revisions matching date spec'), _('DATE')),
3700 ('d', 'date', '', _('show revisions matching date spec'), _('DATE')),
3701 ('C', 'copies', None, _('show copied files')),
3701 ('C', 'copies', None, _('show copied files')),
3702 ('k', 'keyword', [],
3702 ('k', 'keyword', [],
3703 _('do case-insensitive search for a given text'), _('TEXT')),
3703 _('do case-insensitive search for a given text'), _('TEXT')),
3704 ('r', 'rev', [], _('show the specified revision or revset'), _('REV')),
3704 ('r', 'rev', [], _('show the specified revision or revset'), _('REV')),
3705 ('L', 'line-range', [],
3705 ('L', 'line-range', [],
3706 _('follow line range of specified file (EXPERIMENTAL)'),
3706 _('follow line range of specified file (EXPERIMENTAL)'),
3707 _('FILE,RANGE')),
3707 _('FILE,RANGE')),
3708 ('', 'removed', None, _('include revisions where files were removed')),
3708 ('', 'removed', None, _('include revisions where files were removed')),
3709 ('m', 'only-merges', None, _('show only merges (DEPRECATED)')),
3709 ('m', 'only-merges', None, _('show only merges (DEPRECATED)')),
3710 ('u', 'user', [], _('revisions committed by user'), _('USER')),
3710 ('u', 'user', [], _('revisions committed by user'), _('USER')),
3711 ('', 'only-branch', [],
3711 ('', 'only-branch', [],
3712 _('show only changesets within the given named branch (DEPRECATED)'),
3712 _('show only changesets within the given named branch (DEPRECATED)'),
3713 _('BRANCH')),
3713 _('BRANCH')),
3714 ('b', 'branch', [],
3714 ('b', 'branch', [],
3715 _('show changesets within the given named branch'), _('BRANCH')),
3715 _('show changesets within the given named branch'), _('BRANCH')),
3716 ('P', 'prune', [],
3716 ('P', 'prune', [],
3717 _('do not display revision or any of its ancestors'), _('REV')),
3717 _('do not display revision or any of its ancestors'), _('REV')),
3718 ] + logopts + walkopts,
3718 ] + logopts + walkopts,
3719 _('[OPTION]... [FILE]'),
3719 _('[OPTION]... [FILE]'),
3720 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
3720 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
3721 helpbasic=True, inferrepo=True,
3721 helpbasic=True, inferrepo=True,
3722 intents={INTENT_READONLY})
3722 intents={INTENT_READONLY})
3723 def log(ui, repo, *pats, **opts):
3723 def log(ui, repo, *pats, **opts):
3724 """show revision history of entire repository or files
3724 """show revision history of entire repository or files
3725
3725
3726 Print the revision history of the specified files or the entire
3726 Print the revision history of the specified files or the entire
3727 project.
3727 project.
3728
3728
3729 If no revision range is specified, the default is ``tip:0`` unless
3729 If no revision range is specified, the default is ``tip:0`` unless
3730 --follow is set, in which case the working directory parent is
3730 --follow is set, in which case the working directory parent is
3731 used as the starting revision.
3731 used as the starting revision.
3732
3732
3733 File history is shown without following rename or copy history of
3733 File history is shown without following rename or copy history of
3734 files. Use -f/--follow with a filename to follow history across
3734 files. Use -f/--follow with a filename to follow history across
3735 renames and copies. --follow without a filename will only show
3735 renames and copies. --follow without a filename will only show
3736 ancestors of the starting revision.
3736 ancestors of the starting revision.
3737
3737
3738 By default this command prints revision number and changeset id,
3738 By default this command prints revision number and changeset id,
3739 tags, non-trivial parents, user, date and time, and a summary for
3739 tags, non-trivial parents, user, date and time, and a summary for
3740 each commit. When the -v/--verbose switch is used, the list of
3740 each commit. When the -v/--verbose switch is used, the list of
3741 changed files and full commit message are shown.
3741 changed files and full commit message are shown.
3742
3742
3743 With --graph the revisions are shown as an ASCII art DAG with the most
3743 With --graph the revisions are shown as an ASCII art DAG with the most
3744 recent changeset at the top.
3744 recent changeset at the top.
3745 'o' is a changeset, '@' is a working directory parent, '_' closes a branch,
3745 'o' is a changeset, '@' is a working directory parent, '_' closes a branch,
3746 'x' is obsolete, '*' is unstable, and '+' represents a fork where the
3746 'x' is obsolete, '*' is unstable, and '+' represents a fork where the
3747 changeset from the lines below is a parent of the 'o' merge on the same
3747 changeset from the lines below is a parent of the 'o' merge on the same
3748 line.
3748 line.
3749 Paths in the DAG are represented with '|', '/' and so forth. ':' in place
3749 Paths in the DAG are represented with '|', '/' and so forth. ':' in place
3750 of a '|' indicates one or more revisions in a path are omitted.
3750 of a '|' indicates one or more revisions in a path are omitted.
3751
3751
3752 .. container:: verbose
3752 .. container:: verbose
3753
3753
3754 Use -L/--line-range FILE,M:N options to follow the history of lines
3754 Use -L/--line-range FILE,M:N options to follow the history of lines
3755 from M to N in FILE. With -p/--patch only diff hunks affecting
3755 from M to N in FILE. With -p/--patch only diff hunks affecting
3756 specified line range will be shown. This option requires --follow;
3756 specified line range will be shown. This option requires --follow;
3757 it can be specified multiple times. Currently, this option is not
3757 it can be specified multiple times. Currently, this option is not
3758 compatible with --graph. This option is experimental.
3758 compatible with --graph. This option is experimental.
3759
3759
3760 .. note::
3760 .. note::
3761
3761
3762 :hg:`log --patch` may generate unexpected diff output for merge
3762 :hg:`log --patch` may generate unexpected diff output for merge
3763 changesets, as it will only compare the merge changeset against
3763 changesets, as it will only compare the merge changeset against
3764 its first parent. Also, only files different from BOTH parents
3764 its first parent. Also, only files different from BOTH parents
3765 will appear in files:.
3765 will appear in files:.
3766
3766
3767 .. note::
3767 .. note::
3768
3768
3769 For performance reasons, :hg:`log FILE` may omit duplicate changes
3769 For performance reasons, :hg:`log FILE` may omit duplicate changes
3770 made on branches and will not show removals or mode changes. To
3770 made on branches and will not show removals or mode changes. To
3771 see all such changes, use the --removed switch.
3771 see all such changes, use the --removed switch.
3772
3772
3773 .. container:: verbose
3773 .. container:: verbose
3774
3774
3775 .. note::
3775 .. note::
3776
3776
3777 The history resulting from -L/--line-range options depends on diff
3777 The history resulting from -L/--line-range options depends on diff
3778 options; for instance if white-spaces are ignored, respective changes
3778 options; for instance if white-spaces are ignored, respective changes
3779 with only white-spaces in specified line range will not be listed.
3779 with only white-spaces in specified line range will not be listed.
3780
3780
3781 .. container:: verbose
3781 .. container:: verbose
3782
3782
3783 Some examples:
3783 Some examples:
3784
3784
3785 - changesets with full descriptions and file lists::
3785 - changesets with full descriptions and file lists::
3786
3786
3787 hg log -v
3787 hg log -v
3788
3788
3789 - changesets ancestral to the working directory::
3789 - changesets ancestral to the working directory::
3790
3790
3791 hg log -f
3791 hg log -f
3792
3792
3793 - last 10 commits on the current branch::
3793 - last 10 commits on the current branch::
3794
3794
3795 hg log -l 10 -b .
3795 hg log -l 10 -b .
3796
3796
3797 - changesets showing all modifications of a file, including removals::
3797 - changesets showing all modifications of a file, including removals::
3798
3798
3799 hg log --removed file.c
3799 hg log --removed file.c
3800
3800
3801 - all changesets that touch a directory, with diffs, excluding merges::
3801 - all changesets that touch a directory, with diffs, excluding merges::
3802
3802
3803 hg log -Mp lib/
3803 hg log -Mp lib/
3804
3804
3805 - all revision numbers that match a keyword::
3805 - all revision numbers that match a keyword::
3806
3806
3807 hg log -k bug --template "{rev}\\n"
3807 hg log -k bug --template "{rev}\\n"
3808
3808
3809 - the full hash identifier of the working directory parent::
3809 - the full hash identifier of the working directory parent::
3810
3810
3811 hg log -r . --template "{node}\\n"
3811 hg log -r . --template "{node}\\n"
3812
3812
3813 - list available log templates::
3813 - list available log templates::
3814
3814
3815 hg log -T list
3815 hg log -T list
3816
3816
3817 - check if a given changeset is included in a tagged release::
3817 - check if a given changeset is included in a tagged release::
3818
3818
3819 hg log -r "a21ccf and ancestor(1.9)"
3819 hg log -r "a21ccf and ancestor(1.9)"
3820
3820
3821 - find all changesets by some user in a date range::
3821 - find all changesets by some user in a date range::
3822
3822
3823 hg log -k alice -d "may 2008 to jul 2008"
3823 hg log -k alice -d "may 2008 to jul 2008"
3824
3824
3825 - summary of all changesets after the last tag::
3825 - summary of all changesets after the last tag::
3826
3826
3827 hg log -r "last(tagged())::" --template "{desc|firstline}\\n"
3827 hg log -r "last(tagged())::" --template "{desc|firstline}\\n"
3828
3828
3829 - changesets touching lines 13 to 23 for file.c::
3829 - changesets touching lines 13 to 23 for file.c::
3830
3830
3831 hg log -L file.c,13:23
3831 hg log -L file.c,13:23
3832
3832
3833 - changesets touching lines 13 to 23 for file.c and lines 2 to 6 of
3833 - changesets touching lines 13 to 23 for file.c and lines 2 to 6 of
3834 main.c with patch::
3834 main.c with patch::
3835
3835
3836 hg log -L file.c,13:23 -L main.c,2:6 -p
3836 hg log -L file.c,13:23 -L main.c,2:6 -p
3837
3837
3838 See :hg:`help dates` for a list of formats valid for -d/--date.
3838 See :hg:`help dates` for a list of formats valid for -d/--date.
3839
3839
3840 See :hg:`help revisions` for more about specifying and ordering
3840 See :hg:`help revisions` for more about specifying and ordering
3841 revisions.
3841 revisions.
3842
3842
3843 See :hg:`help templates` for more about pre-packaged styles and
3843 See :hg:`help templates` for more about pre-packaged styles and
3844 specifying custom templates. The default template used by the log
3844 specifying custom templates. The default template used by the log
3845 command can be customized via the ``ui.logtemplate`` configuration
3845 command can be customized via the ``ui.logtemplate`` configuration
3846 setting.
3846 setting.
3847
3847
3848 Returns 0 on success.
3848 Returns 0 on success.
3849
3849
3850 """
3850 """
3851 opts = pycompat.byteskwargs(opts)
3851 opts = pycompat.byteskwargs(opts)
3852 linerange = opts.get('line_range')
3852 linerange = opts.get('line_range')
3853
3853
3854 if linerange and not opts.get('follow'):
3854 if linerange and not opts.get('follow'):
3855 raise error.Abort(_('--line-range requires --follow'))
3855 raise error.Abort(_('--line-range requires --follow'))
3856
3856
3857 if linerange and pats:
3857 if linerange and pats:
3858 # TODO: take pats as patterns with no line-range filter
3858 # TODO: take pats as patterns with no line-range filter
3859 raise error.Abort(
3859 raise error.Abort(
3860 _('FILE arguments are not compatible with --line-range option')
3860 _('FILE arguments are not compatible with --line-range option')
3861 )
3861 )
3862
3862
3863 repo = scmutil.unhidehashlikerevs(repo, opts.get('rev'), 'nowarn')
3863 repo = scmutil.unhidehashlikerevs(repo, opts.get('rev'), 'nowarn')
3864 revs, differ = logcmdutil.getrevs(repo, pats, opts)
3864 revs, differ = logcmdutil.getrevs(repo, pats, opts)
3865 if linerange:
3865 if linerange:
3866 # TODO: should follow file history from logcmdutil._initialrevs(),
3866 # TODO: should follow file history from logcmdutil._initialrevs(),
3867 # then filter the result by logcmdutil._makerevset() and --limit
3867 # then filter the result by logcmdutil._makerevset() and --limit
3868 revs, differ = logcmdutil.getlinerangerevs(repo, revs, opts)
3868 revs, differ = logcmdutil.getlinerangerevs(repo, revs, opts)
3869
3869
3870 getrenamed = None
3870 getrenamed = None
3871 if opts.get('copies'):
3871 if opts.get('copies'):
3872 endrev = None
3872 endrev = None
3873 if revs:
3873 if revs:
3874 endrev = revs.max() + 1
3874 endrev = revs.max() + 1
3875 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
3875 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
3876
3876
3877 ui.pager('log')
3877 ui.pager('log')
3878 displayer = logcmdutil.changesetdisplayer(ui, repo, opts, differ,
3878 displayer = logcmdutil.changesetdisplayer(ui, repo, opts, differ,
3879 buffered=True)
3879 buffered=True)
3880 if opts.get('graph'):
3880 if opts.get('graph'):
3881 displayfn = logcmdutil.displaygraphrevs
3881 displayfn = logcmdutil.displaygraphrevs
3882 else:
3882 else:
3883 displayfn = logcmdutil.displayrevs
3883 displayfn = logcmdutil.displayrevs
3884 displayfn(ui, repo, revs, displayer, getrenamed)
3884 displayfn(ui, repo, revs, displayer, getrenamed)
3885
3885
3886 @command('manifest',
3886 @command('manifest',
3887 [('r', 'rev', '', _('revision to display'), _('REV')),
3887 [('r', 'rev', '', _('revision to display'), _('REV')),
3888 ('', 'all', False, _("list files from all revisions"))]
3888 ('', 'all', False, _("list files from all revisions"))]
3889 + formatteropts,
3889 + formatteropts,
3890 _('[-r REV]'),
3890 _('[-r REV]'),
3891 helpcategory=command.CATEGORY_MAINTENANCE,
3891 helpcategory=command.CATEGORY_MAINTENANCE,
3892 intents={INTENT_READONLY})
3892 intents={INTENT_READONLY})
3893 def manifest(ui, repo, node=None, rev=None, **opts):
3893 def manifest(ui, repo, node=None, rev=None, **opts):
3894 """output the current or given revision of the project manifest
3894 """output the current or given revision of the project manifest
3895
3895
3896 Print a list of version controlled files for the given revision.
3896 Print a list of version controlled files for the given revision.
3897 If no revision is given, the first parent of the working directory
3897 If no revision is given, the first parent of the working directory
3898 is used, or the null revision if no revision is checked out.
3898 is used, or the null revision if no revision is checked out.
3899
3899
3900 With -v, print file permissions, symlink and executable bits.
3900 With -v, print file permissions, symlink and executable bits.
3901 With --debug, print file revision hashes.
3901 With --debug, print file revision hashes.
3902
3902
3903 If option --all is specified, the list of all files from all revisions
3903 If option --all is specified, the list of all files from all revisions
3904 is printed. This includes deleted and renamed files.
3904 is printed. This includes deleted and renamed files.
3905
3905
3906 Returns 0 on success.
3906 Returns 0 on success.
3907 """
3907 """
3908 opts = pycompat.byteskwargs(opts)
3908 opts = pycompat.byteskwargs(opts)
3909 fm = ui.formatter('manifest', opts)
3909 fm = ui.formatter('manifest', opts)
3910
3910
3911 if opts.get('all'):
3911 if opts.get('all'):
3912 if rev or node:
3912 if rev or node:
3913 raise error.Abort(_("can't specify a revision with --all"))
3913 raise error.Abort(_("can't specify a revision with --all"))
3914
3914
3915 res = set()
3915 res = set()
3916 for rev in repo:
3916 for rev in repo:
3917 ctx = repo[rev]
3917 ctx = repo[rev]
3918 res |= set(ctx.files())
3918 res |= set(ctx.files())
3919
3919
3920 ui.pager('manifest')
3920 ui.pager('manifest')
3921 for f in sorted(res):
3921 for f in sorted(res):
3922 fm.startitem()
3922 fm.startitem()
3923 fm.write("path", '%s\n', f)
3923 fm.write("path", '%s\n', f)
3924 fm.end()
3924 fm.end()
3925 return
3925 return
3926
3926
3927 if rev and node:
3927 if rev and node:
3928 raise error.Abort(_("please specify just one revision"))
3928 raise error.Abort(_("please specify just one revision"))
3929
3929
3930 if not node:
3930 if not node:
3931 node = rev
3931 node = rev
3932
3932
3933 char = {'l': '@', 'x': '*', '': '', 't': 'd'}
3933 char = {'l': '@', 'x': '*', '': '', 't': 'd'}
3934 mode = {'l': '644', 'x': '755', '': '644', 't': '755'}
3934 mode = {'l': '644', 'x': '755', '': '644', 't': '755'}
3935 if node:
3935 if node:
3936 repo = scmutil.unhidehashlikerevs(repo, [node], 'nowarn')
3936 repo = scmutil.unhidehashlikerevs(repo, [node], 'nowarn')
3937 ctx = scmutil.revsingle(repo, node)
3937 ctx = scmutil.revsingle(repo, node)
3938 mf = ctx.manifest()
3938 mf = ctx.manifest()
3939 ui.pager('manifest')
3939 ui.pager('manifest')
3940 for f in ctx:
3940 for f in ctx:
3941 fm.startitem()
3941 fm.startitem()
3942 fm.context(ctx=ctx)
3942 fm.context(ctx=ctx)
3943 fl = ctx[f].flags()
3943 fl = ctx[f].flags()
3944 fm.condwrite(ui.debugflag, 'hash', '%s ', hex(mf[f]))
3944 fm.condwrite(ui.debugflag, 'hash', '%s ', hex(mf[f]))
3945 fm.condwrite(ui.verbose, 'mode type', '%s %1s ', mode[fl], char[fl])
3945 fm.condwrite(ui.verbose, 'mode type', '%s %1s ', mode[fl], char[fl])
3946 fm.write('path', '%s\n', f)
3946 fm.write('path', '%s\n', f)
3947 fm.end()
3947 fm.end()
3948
3948
3949 @command('merge',
3949 @command('merge',
3950 [('f', 'force', None,
3950 [('f', 'force', None,
3951 _('force a merge including outstanding changes (DEPRECATED)')),
3951 _('force a merge including outstanding changes (DEPRECATED)')),
3952 ('r', 'rev', '', _('revision to merge'), _('REV')),
3952 ('r', 'rev', '', _('revision to merge'), _('REV')),
3953 ('P', 'preview', None,
3953 ('P', 'preview', None,
3954 _('review revisions to merge (no merge is performed)')),
3954 _('review revisions to merge (no merge is performed)')),
3955 ('', 'abort', None, _('abort the ongoing merge')),
3955 ('', 'abort', None, _('abort the ongoing merge')),
3956 ] + mergetoolopts,
3956 ] + mergetoolopts,
3957 _('[-P] [[-r] REV]'),
3957 _('[-P] [[-r] REV]'),
3958 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, helpbasic=True)
3958 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, helpbasic=True)
3959 def merge(ui, repo, node=None, **opts):
3959 def merge(ui, repo, node=None, **opts):
3960 """merge another revision into working directory
3960 """merge another revision into working directory
3961
3961
3962 The current working directory is updated with all changes made in
3962 The current working directory is updated with all changes made in
3963 the requested revision since the last common predecessor revision.
3963 the requested revision since the last common predecessor revision.
3964
3964
3965 Files that changed between either parent are marked as changed for
3965 Files that changed between either parent are marked as changed for
3966 the next commit and a commit must be performed before any further
3966 the next commit and a commit must be performed before any further
3967 updates to the repository are allowed. The next commit will have
3967 updates to the repository are allowed. The next commit will have
3968 two parents.
3968 two parents.
3969
3969
3970 ``--tool`` can be used to specify the merge tool used for file
3970 ``--tool`` can be used to specify the merge tool used for file
3971 merges. It overrides the HGMERGE environment variable and your
3971 merges. It overrides the HGMERGE environment variable and your
3972 configuration files. See :hg:`help merge-tools` for options.
3972 configuration files. See :hg:`help merge-tools` for options.
3973
3973
3974 If no revision is specified, the working directory's parent is a
3974 If no revision is specified, the working directory's parent is a
3975 head revision, and the current branch contains exactly one other
3975 head revision, and the current branch contains exactly one other
3976 head, the other head is merged with by default. Otherwise, an
3976 head, the other head is merged with by default. Otherwise, an
3977 explicit revision with which to merge with must be provided.
3977 explicit revision with which to merge with must be provided.
3978
3978
3979 See :hg:`help resolve` for information on handling file conflicts.
3979 See :hg:`help resolve` for information on handling file conflicts.
3980
3980
3981 To undo an uncommitted merge, use :hg:`merge --abort` which
3981 To undo an uncommitted merge, use :hg:`merge --abort` which
3982 will check out a clean copy of the original merge parent, losing
3982 will check out a clean copy of the original merge parent, losing
3983 all changes.
3983 all changes.
3984
3984
3985 Returns 0 on success, 1 if there are unresolved files.
3985 Returns 0 on success, 1 if there are unresolved files.
3986 """
3986 """
3987
3987
3988 opts = pycompat.byteskwargs(opts)
3988 opts = pycompat.byteskwargs(opts)
3989 abort = opts.get('abort')
3989 abort = opts.get('abort')
3990 if abort and repo.dirstate.p2() == nullid:
3990 if abort and repo.dirstate.p2() == nullid:
3991 cmdutil.wrongtooltocontinue(repo, _('merge'))
3991 cmdutil.wrongtooltocontinue(repo, _('merge'))
3992 if abort:
3992 if abort:
3993 if node:
3993 if node:
3994 raise error.Abort(_("cannot specify a node with --abort"))
3994 raise error.Abort(_("cannot specify a node with --abort"))
3995 if opts.get('rev'):
3995 if opts.get('rev'):
3996 raise error.Abort(_("cannot specify both --rev and --abort"))
3996 raise error.Abort(_("cannot specify both --rev and --abort"))
3997 if opts.get('preview'):
3997 if opts.get('preview'):
3998 raise error.Abort(_("cannot specify --preview with --abort"))
3998 raise error.Abort(_("cannot specify --preview with --abort"))
3999 if opts.get('rev') and node:
3999 if opts.get('rev') and node:
4000 raise error.Abort(_("please specify just one revision"))
4000 raise error.Abort(_("please specify just one revision"))
4001 if not node:
4001 if not node:
4002 node = opts.get('rev')
4002 node = opts.get('rev')
4003
4003
4004 if node:
4004 if node:
4005 node = scmutil.revsingle(repo, node).node()
4005 node = scmutil.revsingle(repo, node).node()
4006
4006
4007 if not node and not abort:
4007 if not node and not abort:
4008 node = repo[destutil.destmerge(repo)].node()
4008 node = repo[destutil.destmerge(repo)].node()
4009
4009
4010 if opts.get('preview'):
4010 if opts.get('preview'):
4011 # find nodes that are ancestors of p2 but not of p1
4011 # find nodes that are ancestors of p2 but not of p1
4012 p1 = repo.lookup('.')
4012 p1 = repo.lookup('.')
4013 p2 = node
4013 p2 = node
4014 nodes = repo.changelog.findmissing(common=[p1], heads=[p2])
4014 nodes = repo.changelog.findmissing(common=[p1], heads=[p2])
4015
4015
4016 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
4016 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
4017 for node in nodes:
4017 for node in nodes:
4018 displayer.show(repo[node])
4018 displayer.show(repo[node])
4019 displayer.close()
4019 displayer.close()
4020 return 0
4020 return 0
4021
4021
4022 # ui.forcemerge is an internal variable, do not document
4022 # ui.forcemerge is an internal variable, do not document
4023 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
4023 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
4024 with ui.configoverride(overrides, 'merge'):
4024 with ui.configoverride(overrides, 'merge'):
4025 force = opts.get('force')
4025 force = opts.get('force')
4026 labels = ['working copy', 'merge rev']
4026 labels = ['working copy', 'merge rev']
4027 return hg.merge(repo, node, force=force, mergeforce=force,
4027 return hg.merge(repo, node, force=force, mergeforce=force,
4028 labels=labels, abort=abort)
4028 labels=labels, abort=abort)
4029
4029
4030 @command('outgoing|out',
4030 @command('outgoing|out',
4031 [('f', 'force', None, _('run even when the destination is unrelated')),
4031 [('f', 'force', None, _('run even when the destination is unrelated')),
4032 ('r', 'rev', [],
4032 ('r', 'rev', [],
4033 _('a changeset intended to be included in the destination'), _('REV')),
4033 _('a changeset intended to be included in the destination'), _('REV')),
4034 ('n', 'newest-first', None, _('show newest record first')),
4034 ('n', 'newest-first', None, _('show newest record first')),
4035 ('B', 'bookmarks', False, _('compare bookmarks')),
4035 ('B', 'bookmarks', False, _('compare bookmarks')),
4036 ('b', 'branch', [], _('a specific branch you would like to push'),
4036 ('b', 'branch', [], _('a specific branch you would like to push'),
4037 _('BRANCH')),
4037 _('BRANCH')),
4038 ] + logopts + remoteopts + subrepoopts,
4038 ] + logopts + remoteopts + subrepoopts,
4039 _('[-M] [-p] [-n] [-f] [-r REV]... [DEST]'),
4039 _('[-M] [-p] [-n] [-f] [-r REV]... [DEST]'),
4040 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT)
4040 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT)
4041 def outgoing(ui, repo, dest=None, **opts):
4041 def outgoing(ui, repo, dest=None, **opts):
4042 """show changesets not found in the destination
4042 """show changesets not found in the destination
4043
4043
4044 Show changesets not found in the specified destination repository
4044 Show changesets not found in the specified destination repository
4045 or the default push location. These are the changesets that would
4045 or the default push location. These are the changesets that would
4046 be pushed if a push was requested.
4046 be pushed if a push was requested.
4047
4047
4048 See pull for details of valid destination formats.
4048 See pull for details of valid destination formats.
4049
4049
4050 .. container:: verbose
4050 .. container:: verbose
4051
4051
4052 With -B/--bookmarks, the result of bookmark comparison between
4052 With -B/--bookmarks, the result of bookmark comparison between
4053 local and remote repositories is displayed. With -v/--verbose,
4053 local and remote repositories is displayed. With -v/--verbose,
4054 status is also displayed for each bookmark like below::
4054 status is also displayed for each bookmark like below::
4055
4055
4056 BM1 01234567890a added
4056 BM1 01234567890a added
4057 BM2 deleted
4057 BM2 deleted
4058 BM3 234567890abc advanced
4058 BM3 234567890abc advanced
4059 BM4 34567890abcd diverged
4059 BM4 34567890abcd diverged
4060 BM5 4567890abcde changed
4060 BM5 4567890abcde changed
4061
4061
4062 The action taken when pushing depends on the
4062 The action taken when pushing depends on the
4063 status of each bookmark:
4063 status of each bookmark:
4064
4064
4065 :``added``: push with ``-B`` will create it
4065 :``added``: push with ``-B`` will create it
4066 :``deleted``: push with ``-B`` will delete it
4066 :``deleted``: push with ``-B`` will delete it
4067 :``advanced``: push will update it
4067 :``advanced``: push will update it
4068 :``diverged``: push with ``-B`` will update it
4068 :``diverged``: push with ``-B`` will update it
4069 :``changed``: push with ``-B`` will update it
4069 :``changed``: push with ``-B`` will update it
4070
4070
4071 From the point of view of pushing behavior, bookmarks
4071 From the point of view of pushing behavior, bookmarks
4072 existing only in the remote repository are treated as
4072 existing only in the remote repository are treated as
4073 ``deleted``, even if it is in fact added remotely.
4073 ``deleted``, even if it is in fact added remotely.
4074
4074
4075 Returns 0 if there are outgoing changes, 1 otherwise.
4075 Returns 0 if there are outgoing changes, 1 otherwise.
4076 """
4076 """
4077 # hg._outgoing() needs to re-resolve the path in order to handle #branch
4077 # hg._outgoing() needs to re-resolve the path in order to handle #branch
4078 # style URLs, so don't overwrite dest.
4078 # style URLs, so don't overwrite dest.
4079 path = ui.paths.getpath(dest, default=('default-push', 'default'))
4079 path = ui.paths.getpath(dest, default=('default-push', 'default'))
4080 if not path:
4080 if not path:
4081 raise error.Abort(_('default repository not configured!'),
4081 raise error.Abort(_('default repository not configured!'),
4082 hint=_("see 'hg help config.paths'"))
4082 hint=_("see 'hg help config.paths'"))
4083
4083
4084 opts = pycompat.byteskwargs(opts)
4084 opts = pycompat.byteskwargs(opts)
4085 if opts.get('graph'):
4085 if opts.get('graph'):
4086 logcmdutil.checkunsupportedgraphflags([], opts)
4086 logcmdutil.checkunsupportedgraphflags([], opts)
4087 o, other = hg._outgoing(ui, repo, dest, opts)
4087 o, other = hg._outgoing(ui, repo, dest, opts)
4088 if not o:
4088 if not o:
4089 cmdutil.outgoinghooks(ui, repo, other, opts, o)
4089 cmdutil.outgoinghooks(ui, repo, other, opts, o)
4090 return
4090 return
4091
4091
4092 revdag = logcmdutil.graphrevs(repo, o, opts)
4092 revdag = logcmdutil.graphrevs(repo, o, opts)
4093 ui.pager('outgoing')
4093 ui.pager('outgoing')
4094 displayer = logcmdutil.changesetdisplayer(ui, repo, opts, buffered=True)
4094 displayer = logcmdutil.changesetdisplayer(ui, repo, opts, buffered=True)
4095 logcmdutil.displaygraph(ui, repo, revdag, displayer,
4095 logcmdutil.displaygraph(ui, repo, revdag, displayer,
4096 graphmod.asciiedges)
4096 graphmod.asciiedges)
4097 cmdutil.outgoinghooks(ui, repo, other, opts, o)
4097 cmdutil.outgoinghooks(ui, repo, other, opts, o)
4098 return 0
4098 return 0
4099
4099
4100 if opts.get('bookmarks'):
4100 if opts.get('bookmarks'):
4101 dest = path.pushloc or path.loc
4101 dest = path.pushloc or path.loc
4102 other = hg.peer(repo, opts, dest)
4102 other = hg.peer(repo, opts, dest)
4103 if 'bookmarks' not in other.listkeys('namespaces'):
4103 if 'bookmarks' not in other.listkeys('namespaces'):
4104 ui.warn(_("remote doesn't support bookmarks\n"))
4104 ui.warn(_("remote doesn't support bookmarks\n"))
4105 return 0
4105 return 0
4106 ui.status(_('comparing with %s\n') % util.hidepassword(dest))
4106 ui.status(_('comparing with %s\n') % util.hidepassword(dest))
4107 ui.pager('outgoing')
4107 ui.pager('outgoing')
4108 return bookmarks.outgoing(ui, repo, other)
4108 return bookmarks.outgoing(ui, repo, other)
4109
4109
4110 repo._subtoppath = path.pushloc or path.loc
4110 repo._subtoppath = path.pushloc or path.loc
4111 try:
4111 try:
4112 return hg.outgoing(ui, repo, dest, opts)
4112 return hg.outgoing(ui, repo, dest, opts)
4113 finally:
4113 finally:
4114 del repo._subtoppath
4114 del repo._subtoppath
4115
4115
4116 @command('parents',
4116 @command('parents',
4117 [('r', 'rev', '', _('show parents of the specified revision'), _('REV')),
4117 [('r', 'rev', '', _('show parents of the specified revision'), _('REV')),
4118 ] + templateopts,
4118 ] + templateopts,
4119 _('[-r REV] [FILE]'),
4119 _('[-r REV] [FILE]'),
4120 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
4120 helpcategory=command.CATEGORY_CHANGE_NAVIGATION,
4121 inferrepo=True)
4121 inferrepo=True)
4122 def parents(ui, repo, file_=None, **opts):
4122 def parents(ui, repo, file_=None, **opts):
4123 """show the parents of the working directory or revision (DEPRECATED)
4123 """show the parents of the working directory or revision (DEPRECATED)
4124
4124
4125 Print the working directory's parent revisions. If a revision is
4125 Print the working directory's parent revisions. If a revision is
4126 given via -r/--rev, the parent of that revision will be printed.
4126 given via -r/--rev, the parent of that revision will be printed.
4127 If a file argument is given, the revision in which the file was
4127 If a file argument is given, the revision in which the file was
4128 last changed (before the working directory revision or the
4128 last changed (before the working directory revision or the
4129 argument to --rev if given) is printed.
4129 argument to --rev if given) is printed.
4130
4130
4131 This command is equivalent to::
4131 This command is equivalent to::
4132
4132
4133 hg log -r "p1()+p2()" or
4133 hg log -r "p1()+p2()" or
4134 hg log -r "p1(REV)+p2(REV)" or
4134 hg log -r "p1(REV)+p2(REV)" or
4135 hg log -r "max(::p1() and file(FILE))+max(::p2() and file(FILE))" or
4135 hg log -r "max(::p1() and file(FILE))+max(::p2() and file(FILE))" or
4136 hg log -r "max(::p1(REV) and file(FILE))+max(::p2(REV) and file(FILE))"
4136 hg log -r "max(::p1(REV) and file(FILE))+max(::p2(REV) and file(FILE))"
4137
4137
4138 See :hg:`summary` and :hg:`help revsets` for related information.
4138 See :hg:`summary` and :hg:`help revsets` for related information.
4139
4139
4140 Returns 0 on success.
4140 Returns 0 on success.
4141 """
4141 """
4142
4142
4143 opts = pycompat.byteskwargs(opts)
4143 opts = pycompat.byteskwargs(opts)
4144 rev = opts.get('rev')
4144 rev = opts.get('rev')
4145 if rev:
4145 if rev:
4146 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
4146 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
4147 ctx = scmutil.revsingle(repo, rev, None)
4147 ctx = scmutil.revsingle(repo, rev, None)
4148
4148
4149 if file_:
4149 if file_:
4150 m = scmutil.match(ctx, (file_,), opts)
4150 m = scmutil.match(ctx, (file_,), opts)
4151 if m.anypats() or len(m.files()) != 1:
4151 if m.anypats() or len(m.files()) != 1:
4152 raise error.Abort(_('can only specify an explicit filename'))
4152 raise error.Abort(_('can only specify an explicit filename'))
4153 file_ = m.files()[0]
4153 file_ = m.files()[0]
4154 filenodes = []
4154 filenodes = []
4155 for cp in ctx.parents():
4155 for cp in ctx.parents():
4156 if not cp:
4156 if not cp:
4157 continue
4157 continue
4158 try:
4158 try:
4159 filenodes.append(cp.filenode(file_))
4159 filenodes.append(cp.filenode(file_))
4160 except error.LookupError:
4160 except error.LookupError:
4161 pass
4161 pass
4162 if not filenodes:
4162 if not filenodes:
4163 raise error.Abort(_("'%s' not found in manifest!") % file_)
4163 raise error.Abort(_("'%s' not found in manifest!") % file_)
4164 p = []
4164 p = []
4165 for fn in filenodes:
4165 for fn in filenodes:
4166 fctx = repo.filectx(file_, fileid=fn)
4166 fctx = repo.filectx(file_, fileid=fn)
4167 p.append(fctx.node())
4167 p.append(fctx.node())
4168 else:
4168 else:
4169 p = [cp.node() for cp in ctx.parents()]
4169 p = [cp.node() for cp in ctx.parents()]
4170
4170
4171 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
4171 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
4172 for n in p:
4172 for n in p:
4173 if n != nullid:
4173 if n != nullid:
4174 displayer.show(repo[n])
4174 displayer.show(repo[n])
4175 displayer.close()
4175 displayer.close()
4176
4176
4177 @command('paths', formatteropts, _('[NAME]'),
4177 @command('paths', formatteropts, _('[NAME]'),
4178 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4178 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4179 optionalrepo=True, intents={INTENT_READONLY})
4179 optionalrepo=True, intents={INTENT_READONLY})
4180 def paths(ui, repo, search=None, **opts):
4180 def paths(ui, repo, search=None, **opts):
4181 """show aliases for remote repositories
4181 """show aliases for remote repositories
4182
4182
4183 Show definition of symbolic path name NAME. If no name is given,
4183 Show definition of symbolic path name NAME. If no name is given,
4184 show definition of all available names.
4184 show definition of all available names.
4185
4185
4186 Option -q/--quiet suppresses all output when searching for NAME
4186 Option -q/--quiet suppresses all output when searching for NAME
4187 and shows only the path names when listing all definitions.
4187 and shows only the path names when listing all definitions.
4188
4188
4189 Path names are defined in the [paths] section of your
4189 Path names are defined in the [paths] section of your
4190 configuration file and in ``/etc/mercurial/hgrc``. If run inside a
4190 configuration file and in ``/etc/mercurial/hgrc``. If run inside a
4191 repository, ``.hg/hgrc`` is used, too.
4191 repository, ``.hg/hgrc`` is used, too.
4192
4192
4193 The path names ``default`` and ``default-push`` have a special
4193 The path names ``default`` and ``default-push`` have a special
4194 meaning. When performing a push or pull operation, they are used
4194 meaning. When performing a push or pull operation, they are used
4195 as fallbacks if no location is specified on the command-line.
4195 as fallbacks if no location is specified on the command-line.
4196 When ``default-push`` is set, it will be used for push and
4196 When ``default-push`` is set, it will be used for push and
4197 ``default`` will be used for pull; otherwise ``default`` is used
4197 ``default`` will be used for pull; otherwise ``default`` is used
4198 as the fallback for both. When cloning a repository, the clone
4198 as the fallback for both. When cloning a repository, the clone
4199 source is written as ``default`` in ``.hg/hgrc``.
4199 source is written as ``default`` in ``.hg/hgrc``.
4200
4200
4201 .. note::
4201 .. note::
4202
4202
4203 ``default`` and ``default-push`` apply to all inbound (e.g.
4203 ``default`` and ``default-push`` apply to all inbound (e.g.
4204 :hg:`incoming`) and outbound (e.g. :hg:`outgoing`, :hg:`email`
4204 :hg:`incoming`) and outbound (e.g. :hg:`outgoing`, :hg:`email`
4205 and :hg:`bundle`) operations.
4205 and :hg:`bundle`) operations.
4206
4206
4207 See :hg:`help urls` for more information.
4207 See :hg:`help urls` for more information.
4208
4208
4209 .. container:: verbose
4209 .. container:: verbose
4210
4210
4211 Template:
4211 Template:
4212
4212
4213 The following keywords are supported. See also :hg:`help templates`.
4213 The following keywords are supported. See also :hg:`help templates`.
4214
4214
4215 :name: String. Symbolic name of the path alias.
4215 :name: String. Symbolic name of the path alias.
4216 :pushurl: String. URL for push operations.
4216 :pushurl: String. URL for push operations.
4217 :url: String. URL or directory path for the other operations.
4217 :url: String. URL or directory path for the other operations.
4218
4218
4219 Returns 0 on success.
4219 Returns 0 on success.
4220 """
4220 """
4221
4221
4222 opts = pycompat.byteskwargs(opts)
4222 opts = pycompat.byteskwargs(opts)
4223 ui.pager('paths')
4223 ui.pager('paths')
4224 if search:
4224 if search:
4225 pathitems = [(name, path) for name, path in ui.paths.iteritems()
4225 pathitems = [(name, path) for name, path in ui.paths.iteritems()
4226 if name == search]
4226 if name == search]
4227 else:
4227 else:
4228 pathitems = sorted(ui.paths.iteritems())
4228 pathitems = sorted(ui.paths.iteritems())
4229
4229
4230 fm = ui.formatter('paths', opts)
4230 fm = ui.formatter('paths', opts)
4231 if fm.isplain():
4231 if fm.isplain():
4232 hidepassword = util.hidepassword
4232 hidepassword = util.hidepassword
4233 else:
4233 else:
4234 hidepassword = bytes
4234 hidepassword = bytes
4235 if ui.quiet:
4235 if ui.quiet:
4236 namefmt = '%s\n'
4236 namefmt = '%s\n'
4237 else:
4237 else:
4238 namefmt = '%s = '
4238 namefmt = '%s = '
4239 showsubopts = not search and not ui.quiet
4239 showsubopts = not search and not ui.quiet
4240
4240
4241 for name, path in pathitems:
4241 for name, path in pathitems:
4242 fm.startitem()
4242 fm.startitem()
4243 fm.condwrite(not search, 'name', namefmt, name)
4243 fm.condwrite(not search, 'name', namefmt, name)
4244 fm.condwrite(not ui.quiet, 'url', '%s\n', hidepassword(path.rawloc))
4244 fm.condwrite(not ui.quiet, 'url', '%s\n', hidepassword(path.rawloc))
4245 for subopt, value in sorted(path.suboptions.items()):
4245 for subopt, value in sorted(path.suboptions.items()):
4246 assert subopt not in ('name', 'url')
4246 assert subopt not in ('name', 'url')
4247 if showsubopts:
4247 if showsubopts:
4248 fm.plain('%s:%s = ' % (name, subopt))
4248 fm.plain('%s:%s = ' % (name, subopt))
4249 fm.condwrite(showsubopts, subopt, '%s\n', value)
4249 fm.condwrite(showsubopts, subopt, '%s\n', value)
4250
4250
4251 fm.end()
4251 fm.end()
4252
4252
4253 if search and not pathitems:
4253 if search and not pathitems:
4254 if not ui.quiet:
4254 if not ui.quiet:
4255 ui.warn(_("not found!\n"))
4255 ui.warn(_("not found!\n"))
4256 return 1
4256 return 1
4257 else:
4257 else:
4258 return 0
4258 return 0
4259
4259
4260 @command('phase',
4260 @command('phase',
4261 [('p', 'public', False, _('set changeset phase to public')),
4261 [('p', 'public', False, _('set changeset phase to public')),
4262 ('d', 'draft', False, _('set changeset phase to draft')),
4262 ('d', 'draft', False, _('set changeset phase to draft')),
4263 ('s', 'secret', False, _('set changeset phase to secret')),
4263 ('s', 'secret', False, _('set changeset phase to secret')),
4264 ('f', 'force', False, _('allow to move boundary backward')),
4264 ('f', 'force', False, _('allow to move boundary backward')),
4265 ('r', 'rev', [], _('target revision'), _('REV')),
4265 ('r', 'rev', [], _('target revision'), _('REV')),
4266 ],
4266 ],
4267 _('[-p|-d|-s] [-f] [-r] [REV...]'),
4267 _('[-p|-d|-s] [-f] [-r] [REV...]'),
4268 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
4268 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
4269 def phase(ui, repo, *revs, **opts):
4269 def phase(ui, repo, *revs, **opts):
4270 """set or show the current phase name
4270 """set or show the current phase name
4271
4271
4272 With no argument, show the phase name of the current revision(s).
4272 With no argument, show the phase name of the current revision(s).
4273
4273
4274 With one of -p/--public, -d/--draft or -s/--secret, change the
4274 With one of -p/--public, -d/--draft or -s/--secret, change the
4275 phase value of the specified revisions.
4275 phase value of the specified revisions.
4276
4276
4277 Unless -f/--force is specified, :hg:`phase` won't move changesets from a
4277 Unless -f/--force is specified, :hg:`phase` won't move changesets from a
4278 lower phase to a higher phase. Phases are ordered as follows::
4278 lower phase to a higher phase. Phases are ordered as follows::
4279
4279
4280 public < draft < secret
4280 public < draft < secret
4281
4281
4282 Returns 0 on success, 1 if some phases could not be changed.
4282 Returns 0 on success, 1 if some phases could not be changed.
4283
4283
4284 (For more information about the phases concept, see :hg:`help phases`.)
4284 (For more information about the phases concept, see :hg:`help phases`.)
4285 """
4285 """
4286 opts = pycompat.byteskwargs(opts)
4286 opts = pycompat.byteskwargs(opts)
4287 # search for a unique phase argument
4287 # search for a unique phase argument
4288 targetphase = None
4288 targetphase = None
4289 for idx, name in enumerate(phases.cmdphasenames):
4289 for idx, name in enumerate(phases.cmdphasenames):
4290 if opts[name]:
4290 if opts[name]:
4291 if targetphase is not None:
4291 if targetphase is not None:
4292 raise error.Abort(_('only one phase can be specified'))
4292 raise error.Abort(_('only one phase can be specified'))
4293 targetphase = idx
4293 targetphase = idx
4294
4294
4295 # look for specified revision
4295 # look for specified revision
4296 revs = list(revs)
4296 revs = list(revs)
4297 revs.extend(opts['rev'])
4297 revs.extend(opts['rev'])
4298 if not revs:
4298 if not revs:
4299 # display both parents as the second parent phase can influence
4299 # display both parents as the second parent phase can influence
4300 # the phase of a merge commit
4300 # the phase of a merge commit
4301 revs = [c.rev() for c in repo[None].parents()]
4301 revs = [c.rev() for c in repo[None].parents()]
4302
4302
4303 revs = scmutil.revrange(repo, revs)
4303 revs = scmutil.revrange(repo, revs)
4304
4304
4305 ret = 0
4305 ret = 0
4306 if targetphase is None:
4306 if targetphase is None:
4307 # display
4307 # display
4308 for r in revs:
4308 for r in revs:
4309 ctx = repo[r]
4309 ctx = repo[r]
4310 ui.write('%i: %s\n' % (ctx.rev(), ctx.phasestr()))
4310 ui.write('%i: %s\n' % (ctx.rev(), ctx.phasestr()))
4311 else:
4311 else:
4312 with repo.lock(), repo.transaction("phase") as tr:
4312 with repo.lock(), repo.transaction("phase") as tr:
4313 # set phase
4313 # set phase
4314 if not revs:
4314 if not revs:
4315 raise error.Abort(_('empty revision set'))
4315 raise error.Abort(_('empty revision set'))
4316 nodes = [repo[r].node() for r in revs]
4316 nodes = [repo[r].node() for r in revs]
4317 # moving revision from public to draft may hide them
4317 # moving revision from public to draft may hide them
4318 # We have to check result on an unfiltered repository
4318 # We have to check result on an unfiltered repository
4319 unfi = repo.unfiltered()
4319 unfi = repo.unfiltered()
4320 getphase = unfi._phasecache.phase
4320 getphase = unfi._phasecache.phase
4321 olddata = [getphase(unfi, r) for r in unfi]
4321 olddata = [getphase(unfi, r) for r in unfi]
4322 phases.advanceboundary(repo, tr, targetphase, nodes)
4322 phases.advanceboundary(repo, tr, targetphase, nodes)
4323 if opts['force']:
4323 if opts['force']:
4324 phases.retractboundary(repo, tr, targetphase, nodes)
4324 phases.retractboundary(repo, tr, targetphase, nodes)
4325 getphase = unfi._phasecache.phase
4325 getphase = unfi._phasecache.phase
4326 newdata = [getphase(unfi, r) for r in unfi]
4326 newdata = [getphase(unfi, r) for r in unfi]
4327 changes = sum(newdata[r] != olddata[r] for r in unfi)
4327 changes = sum(newdata[r] != olddata[r] for r in unfi)
4328 cl = unfi.changelog
4328 cl = unfi.changelog
4329 rejected = [n for n in nodes
4329 rejected = [n for n in nodes
4330 if newdata[cl.rev(n)] < targetphase]
4330 if newdata[cl.rev(n)] < targetphase]
4331 if rejected:
4331 if rejected:
4332 ui.warn(_('cannot move %i changesets to a higher '
4332 ui.warn(_('cannot move %i changesets to a higher '
4333 'phase, use --force\n') % len(rejected))
4333 'phase, use --force\n') % len(rejected))
4334 ret = 1
4334 ret = 1
4335 if changes:
4335 if changes:
4336 msg = _('phase changed for %i changesets\n') % changes
4336 msg = _('phase changed for %i changesets\n') % changes
4337 if ret:
4337 if ret:
4338 ui.status(msg)
4338 ui.status(msg)
4339 else:
4339 else:
4340 ui.note(msg)
4340 ui.note(msg)
4341 else:
4341 else:
4342 ui.warn(_('no phases changed\n'))
4342 ui.warn(_('no phases changed\n'))
4343 return ret
4343 return ret
4344
4344
4345 def postincoming(ui, repo, modheads, optupdate, checkout, brev):
4345 def postincoming(ui, repo, modheads, optupdate, checkout, brev):
4346 """Run after a changegroup has been added via pull/unbundle
4346 """Run after a changegroup has been added via pull/unbundle
4347
4347
4348 This takes arguments below:
4348 This takes arguments below:
4349
4349
4350 :modheads: change of heads by pull/unbundle
4350 :modheads: change of heads by pull/unbundle
4351 :optupdate: updating working directory is needed or not
4351 :optupdate: updating working directory is needed or not
4352 :checkout: update destination revision (or None to default destination)
4352 :checkout: update destination revision (or None to default destination)
4353 :brev: a name, which might be a bookmark to be activated after updating
4353 :brev: a name, which might be a bookmark to be activated after updating
4354 """
4354 """
4355 if modheads == 0:
4355 if modheads == 0:
4356 return
4356 return
4357 if optupdate:
4357 if optupdate:
4358 try:
4358 try:
4359 return hg.updatetotally(ui, repo, checkout, brev)
4359 return hg.updatetotally(ui, repo, checkout, brev)
4360 except error.UpdateAbort as inst:
4360 except error.UpdateAbort as inst:
4361 msg = _("not updating: %s") % stringutil.forcebytestr(inst)
4361 msg = _("not updating: %s") % stringutil.forcebytestr(inst)
4362 hint = inst.hint
4362 hint = inst.hint
4363 raise error.UpdateAbort(msg, hint=hint)
4363 raise error.UpdateAbort(msg, hint=hint)
4364 if modheads is not None and modheads > 1:
4364 if modheads is not None and modheads > 1:
4365 currentbranchheads = len(repo.branchheads())
4365 currentbranchheads = len(repo.branchheads())
4366 if currentbranchheads == modheads:
4366 if currentbranchheads == modheads:
4367 ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n"))
4367 ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n"))
4368 elif currentbranchheads > 1:
4368 elif currentbranchheads > 1:
4369 ui.status(_("(run 'hg heads .' to see heads, 'hg merge' to "
4369 ui.status(_("(run 'hg heads .' to see heads, 'hg merge' to "
4370 "merge)\n"))
4370 "merge)\n"))
4371 else:
4371 else:
4372 ui.status(_("(run 'hg heads' to see heads)\n"))
4372 ui.status(_("(run 'hg heads' to see heads)\n"))
4373 elif not ui.configbool('commands', 'update.requiredest'):
4373 elif not ui.configbool('commands', 'update.requiredest'):
4374 ui.status(_("(run 'hg update' to get a working copy)\n"))
4374 ui.status(_("(run 'hg update' to get a working copy)\n"))
4375
4375
4376 @command('pull',
4376 @command('pull',
4377 [('u', 'update', None,
4377 [('u', 'update', None,
4378 _('update to new branch head if new descendants were pulled')),
4378 _('update to new branch head if new descendants were pulled')),
4379 ('f', 'force', None, _('run even when remote repository is unrelated')),
4379 ('f', 'force', None, _('run even when remote repository is unrelated')),
4380 ('r', 'rev', [], _('a remote changeset intended to be added'), _('REV')),
4380 ('r', 'rev', [], _('a remote changeset intended to be added'), _('REV')),
4381 ('B', 'bookmark', [], _("bookmark to pull"), _('BOOKMARK')),
4381 ('B', 'bookmark', [], _("bookmark to pull"), _('BOOKMARK')),
4382 ('b', 'branch', [], _('a specific branch you would like to pull'),
4382 ('b', 'branch', [], _('a specific branch you would like to pull'),
4383 _('BRANCH')),
4383 _('BRANCH')),
4384 ] + remoteopts,
4384 ] + remoteopts,
4385 _('[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]'),
4385 _('[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]'),
4386 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4386 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4387 helpbasic=True)
4387 helpbasic=True)
4388 def pull(ui, repo, source="default", **opts):
4388 def pull(ui, repo, source="default", **opts):
4389 """pull changes from the specified source
4389 """pull changes from the specified source
4390
4390
4391 Pull changes from a remote repository to a local one.
4391 Pull changes from a remote repository to a local one.
4392
4392
4393 This finds all changes from the repository at the specified path
4393 This finds all changes from the repository at the specified path
4394 or URL and adds them to a local repository (the current one unless
4394 or URL and adds them to a local repository (the current one unless
4395 -R is specified). By default, this does not update the copy of the
4395 -R is specified). By default, this does not update the copy of the
4396 project in the working directory.
4396 project in the working directory.
4397
4397
4398 When cloning from servers that support it, Mercurial may fetch
4398 When cloning from servers that support it, Mercurial may fetch
4399 pre-generated data. When this is done, hooks operating on incoming
4399 pre-generated data. When this is done, hooks operating on incoming
4400 changesets and changegroups may fire more than once, once for each
4400 changesets and changegroups may fire more than once, once for each
4401 pre-generated bundle and as well as for any additional remaining
4401 pre-generated bundle and as well as for any additional remaining
4402 data. See :hg:`help -e clonebundles` for more.
4402 data. See :hg:`help -e clonebundles` for more.
4403
4403
4404 Use :hg:`incoming` if you want to see what would have been added
4404 Use :hg:`incoming` if you want to see what would have been added
4405 by a pull at the time you issued this command. If you then decide
4405 by a pull at the time you issued this command. If you then decide
4406 to add those changes to the repository, you should use :hg:`pull
4406 to add those changes to the repository, you should use :hg:`pull
4407 -r X` where ``X`` is the last changeset listed by :hg:`incoming`.
4407 -r X` where ``X`` is the last changeset listed by :hg:`incoming`.
4408
4408
4409 If SOURCE is omitted, the 'default' path will be used.
4409 If SOURCE is omitted, the 'default' path will be used.
4410 See :hg:`help urls` for more information.
4410 See :hg:`help urls` for more information.
4411
4411
4412 Specifying bookmark as ``.`` is equivalent to specifying the active
4412 Specifying bookmark as ``.`` is equivalent to specifying the active
4413 bookmark's name.
4413 bookmark's name.
4414
4414
4415 Returns 0 on success, 1 if an update had unresolved files.
4415 Returns 0 on success, 1 if an update had unresolved files.
4416 """
4416 """
4417
4417
4418 opts = pycompat.byteskwargs(opts)
4418 opts = pycompat.byteskwargs(opts)
4419 if ui.configbool('commands', 'update.requiredest') and opts.get('update'):
4419 if ui.configbool('commands', 'update.requiredest') and opts.get('update'):
4420 msg = _('update destination required by configuration')
4420 msg = _('update destination required by configuration')
4421 hint = _('use hg pull followed by hg update DEST')
4421 hint = _('use hg pull followed by hg update DEST')
4422 raise error.Abort(msg, hint=hint)
4422 raise error.Abort(msg, hint=hint)
4423
4423
4424 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
4424 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
4425 ui.status(_('pulling from %s\n') % util.hidepassword(source))
4425 ui.status(_('pulling from %s\n') % util.hidepassword(source))
4426 other = hg.peer(repo, opts, source)
4426 other = hg.peer(repo, opts, source)
4427 try:
4427 try:
4428 revs, checkout = hg.addbranchrevs(repo, other, branches,
4428 revs, checkout = hg.addbranchrevs(repo, other, branches,
4429 opts.get('rev'))
4429 opts.get('rev'))
4430
4430
4431 pullopargs = {}
4431 pullopargs = {}
4432
4432
4433 nodes = None
4433 nodes = None
4434 if opts.get('bookmark') or revs:
4434 if opts.get('bookmark') or revs:
4435 # The list of bookmark used here is the same used to actually update
4435 # The list of bookmark used here is the same used to actually update
4436 # the bookmark names, to avoid the race from issue 4689 and we do
4436 # the bookmark names, to avoid the race from issue 4689 and we do
4437 # all lookup and bookmark queries in one go so they see the same
4437 # all lookup and bookmark queries in one go so they see the same
4438 # version of the server state (issue 4700).
4438 # version of the server state (issue 4700).
4439 nodes = []
4439 nodes = []
4440 fnodes = []
4440 fnodes = []
4441 revs = revs or []
4441 revs = revs or []
4442 if revs and not other.capable('lookup'):
4442 if revs and not other.capable('lookup'):
4443 err = _("other repository doesn't support revision lookup, "
4443 err = _("other repository doesn't support revision lookup, "
4444 "so a rev cannot be specified.")
4444 "so a rev cannot be specified.")
4445 raise error.Abort(err)
4445 raise error.Abort(err)
4446 with other.commandexecutor() as e:
4446 with other.commandexecutor() as e:
4447 fremotebookmarks = e.callcommand('listkeys', {
4447 fremotebookmarks = e.callcommand('listkeys', {
4448 'namespace': 'bookmarks'
4448 'namespace': 'bookmarks'
4449 })
4449 })
4450 for r in revs:
4450 for r in revs:
4451 fnodes.append(e.callcommand('lookup', {'key': r}))
4451 fnodes.append(e.callcommand('lookup', {'key': r}))
4452 remotebookmarks = fremotebookmarks.result()
4452 remotebookmarks = fremotebookmarks.result()
4453 remotebookmarks = bookmarks.unhexlifybookmarks(remotebookmarks)
4453 remotebookmarks = bookmarks.unhexlifybookmarks(remotebookmarks)
4454 pullopargs['remotebookmarks'] = remotebookmarks
4454 pullopargs['remotebookmarks'] = remotebookmarks
4455 for b in opts.get('bookmark', []):
4455 for b in opts.get('bookmark', []):
4456 b = repo._bookmarks.expandname(b)
4456 b = repo._bookmarks.expandname(b)
4457 if b not in remotebookmarks:
4457 if b not in remotebookmarks:
4458 raise error.Abort(_('remote bookmark %s not found!') % b)
4458 raise error.Abort(_('remote bookmark %s not found!') % b)
4459 nodes.append(remotebookmarks[b])
4459 nodes.append(remotebookmarks[b])
4460 for i, rev in enumerate(revs):
4460 for i, rev in enumerate(revs):
4461 node = fnodes[i].result()
4461 node = fnodes[i].result()
4462 nodes.append(node)
4462 nodes.append(node)
4463 if rev == checkout:
4463 if rev == checkout:
4464 checkout = node
4464 checkout = node
4465
4465
4466 wlock = util.nullcontextmanager()
4466 wlock = util.nullcontextmanager()
4467 if opts.get('update'):
4467 if opts.get('update'):
4468 wlock = repo.wlock()
4468 wlock = repo.wlock()
4469 with wlock:
4469 with wlock:
4470 pullopargs.update(opts.get('opargs', {}))
4470 pullopargs.update(opts.get('opargs', {}))
4471 modheads = exchange.pull(repo, other, heads=nodes,
4471 modheads = exchange.pull(repo, other, heads=nodes,
4472 force=opts.get('force'),
4472 force=opts.get('force'),
4473 bookmarks=opts.get('bookmark', ()),
4473 bookmarks=opts.get('bookmark', ()),
4474 opargs=pullopargs).cgresult
4474 opargs=pullopargs).cgresult
4475
4475
4476 # brev is a name, which might be a bookmark to be activated at
4476 # brev is a name, which might be a bookmark to be activated at
4477 # the end of the update. In other words, it is an explicit
4477 # the end of the update. In other words, it is an explicit
4478 # destination of the update
4478 # destination of the update
4479 brev = None
4479 brev = None
4480
4480
4481 if checkout:
4481 if checkout:
4482 checkout = repo.changelog.rev(checkout)
4482 checkout = repo.changelog.rev(checkout)
4483
4483
4484 # order below depends on implementation of
4484 # order below depends on implementation of
4485 # hg.addbranchrevs(). opts['bookmark'] is ignored,
4485 # hg.addbranchrevs(). opts['bookmark'] is ignored,
4486 # because 'checkout' is determined without it.
4486 # because 'checkout' is determined without it.
4487 if opts.get('rev'):
4487 if opts.get('rev'):
4488 brev = opts['rev'][0]
4488 brev = opts['rev'][0]
4489 elif opts.get('branch'):
4489 elif opts.get('branch'):
4490 brev = opts['branch'][0]
4490 brev = opts['branch'][0]
4491 else:
4491 else:
4492 brev = branches[0]
4492 brev = branches[0]
4493 repo._subtoppath = source
4493 repo._subtoppath = source
4494 try:
4494 try:
4495 ret = postincoming(ui, repo, modheads, opts.get('update'),
4495 ret = postincoming(ui, repo, modheads, opts.get('update'),
4496 checkout, brev)
4496 checkout, brev)
4497
4497
4498 finally:
4498 finally:
4499 del repo._subtoppath
4499 del repo._subtoppath
4500
4500
4501 finally:
4501 finally:
4502 other.close()
4502 other.close()
4503 return ret
4503 return ret
4504
4504
4505 @command('push',
4505 @command('push',
4506 [('f', 'force', None, _('force push')),
4506 [('f', 'force', None, _('force push')),
4507 ('r', 'rev', [],
4507 ('r', 'rev', [],
4508 _('a changeset intended to be included in the destination'),
4508 _('a changeset intended to be included in the destination'),
4509 _('REV')),
4509 _('REV')),
4510 ('B', 'bookmark', [], _("bookmark to push"), _('BOOKMARK')),
4510 ('B', 'bookmark', [], _("bookmark to push"), _('BOOKMARK')),
4511 ('b', 'branch', [],
4511 ('b', 'branch', [],
4512 _('a specific branch you would like to push'), _('BRANCH')),
4512 _('a specific branch you would like to push'), _('BRANCH')),
4513 ('', 'new-branch', False, _('allow pushing a new branch')),
4513 ('', 'new-branch', False, _('allow pushing a new branch')),
4514 ('', 'pushvars', [], _('variables that can be sent to server (ADVANCED)')),
4514 ('', 'pushvars', [], _('variables that can be sent to server (ADVANCED)')),
4515 ('', 'publish', False, _('push the changeset as public (EXPERIMENTAL)')),
4515 ('', 'publish', False, _('push the changeset as public (EXPERIMENTAL)')),
4516 ] + remoteopts,
4516 ] + remoteopts,
4517 _('[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]'),
4517 _('[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]'),
4518 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4518 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4519 helpbasic=True)
4519 helpbasic=True)
4520 def push(ui, repo, dest=None, **opts):
4520 def push(ui, repo, dest=None, **opts):
4521 """push changes to the specified destination
4521 """push changes to the specified destination
4522
4522
4523 Push changesets from the local repository to the specified
4523 Push changesets from the local repository to the specified
4524 destination.
4524 destination.
4525
4525
4526 This operation is symmetrical to pull: it is identical to a pull
4526 This operation is symmetrical to pull: it is identical to a pull
4527 in the destination repository from the current one.
4527 in the destination repository from the current one.
4528
4528
4529 By default, push will not allow creation of new heads at the
4529 By default, push will not allow creation of new heads at the
4530 destination, since multiple heads would make it unclear which head
4530 destination, since multiple heads would make it unclear which head
4531 to use. In this situation, it is recommended to pull and merge
4531 to use. In this situation, it is recommended to pull and merge
4532 before pushing.
4532 before pushing.
4533
4533
4534 Use --new-branch if you want to allow push to create a new named
4534 Use --new-branch if you want to allow push to create a new named
4535 branch that is not present at the destination. This allows you to
4535 branch that is not present at the destination. This allows you to
4536 only create a new branch without forcing other changes.
4536 only create a new branch without forcing other changes.
4537
4537
4538 .. note::
4538 .. note::
4539
4539
4540 Extra care should be taken with the -f/--force option,
4540 Extra care should be taken with the -f/--force option,
4541 which will push all new heads on all branches, an action which will
4541 which will push all new heads on all branches, an action which will
4542 almost always cause confusion for collaborators.
4542 almost always cause confusion for collaborators.
4543
4543
4544 If -r/--rev is used, the specified revision and all its ancestors
4544 If -r/--rev is used, the specified revision and all its ancestors
4545 will be pushed to the remote repository.
4545 will be pushed to the remote repository.
4546
4546
4547 If -B/--bookmark is used, the specified bookmarked revision, its
4547 If -B/--bookmark is used, the specified bookmarked revision, its
4548 ancestors, and the bookmark will be pushed to the remote
4548 ancestors, and the bookmark will be pushed to the remote
4549 repository. Specifying ``.`` is equivalent to specifying the active
4549 repository. Specifying ``.`` is equivalent to specifying the active
4550 bookmark's name.
4550 bookmark's name.
4551
4551
4552 Please see :hg:`help urls` for important details about ``ssh://``
4552 Please see :hg:`help urls` for important details about ``ssh://``
4553 URLs. If DESTINATION is omitted, a default path will be used.
4553 URLs. If DESTINATION is omitted, a default path will be used.
4554
4554
4555 .. container:: verbose
4555 .. container:: verbose
4556
4556
4557 The --pushvars option sends strings to the server that become
4557 The --pushvars option sends strings to the server that become
4558 environment variables prepended with ``HG_USERVAR_``. For example,
4558 environment variables prepended with ``HG_USERVAR_``. For example,
4559 ``--pushvars ENABLE_FEATURE=true``, provides the server side hooks with
4559 ``--pushvars ENABLE_FEATURE=true``, provides the server side hooks with
4560 ``HG_USERVAR_ENABLE_FEATURE=true`` as part of their environment.
4560 ``HG_USERVAR_ENABLE_FEATURE=true`` as part of their environment.
4561
4561
4562 pushvars can provide for user-overridable hooks as well as set debug
4562 pushvars can provide for user-overridable hooks as well as set debug
4563 levels. One example is having a hook that blocks commits containing
4563 levels. One example is having a hook that blocks commits containing
4564 conflict markers, but enables the user to override the hook if the file
4564 conflict markers, but enables the user to override the hook if the file
4565 is using conflict markers for testing purposes or the file format has
4565 is using conflict markers for testing purposes or the file format has
4566 strings that look like conflict markers.
4566 strings that look like conflict markers.
4567
4567
4568 By default, servers will ignore `--pushvars`. To enable it add the
4568 By default, servers will ignore `--pushvars`. To enable it add the
4569 following to your configuration file::
4569 following to your configuration file::
4570
4570
4571 [push]
4571 [push]
4572 pushvars.server = true
4572 pushvars.server = true
4573
4573
4574 Returns 0 if push was successful, 1 if nothing to push.
4574 Returns 0 if push was successful, 1 if nothing to push.
4575 """
4575 """
4576
4576
4577 opts = pycompat.byteskwargs(opts)
4577 opts = pycompat.byteskwargs(opts)
4578 if opts.get('bookmark'):
4578 if opts.get('bookmark'):
4579 ui.setconfig('bookmarks', 'pushing', opts['bookmark'], 'push')
4579 ui.setconfig('bookmarks', 'pushing', opts['bookmark'], 'push')
4580 for b in opts['bookmark']:
4580 for b in opts['bookmark']:
4581 # translate -B options to -r so changesets get pushed
4581 # translate -B options to -r so changesets get pushed
4582 b = repo._bookmarks.expandname(b)
4582 b = repo._bookmarks.expandname(b)
4583 if b in repo._bookmarks:
4583 if b in repo._bookmarks:
4584 opts.setdefault('rev', []).append(b)
4584 opts.setdefault('rev', []).append(b)
4585 else:
4585 else:
4586 # if we try to push a deleted bookmark, translate it to null
4586 # if we try to push a deleted bookmark, translate it to null
4587 # this lets simultaneous -r, -b options continue working
4587 # this lets simultaneous -r, -b options continue working
4588 opts.setdefault('rev', []).append("null")
4588 opts.setdefault('rev', []).append("null")
4589
4589
4590 path = ui.paths.getpath(dest, default=('default-push', 'default'))
4590 path = ui.paths.getpath(dest, default=('default-push', 'default'))
4591 if not path:
4591 if not path:
4592 raise error.Abort(_('default repository not configured!'),
4592 raise error.Abort(_('default repository not configured!'),
4593 hint=_("see 'hg help config.paths'"))
4593 hint=_("see 'hg help config.paths'"))
4594 dest = path.pushloc or path.loc
4594 dest = path.pushloc or path.loc
4595 branches = (path.branch, opts.get('branch') or [])
4595 branches = (path.branch, opts.get('branch') or [])
4596 ui.status(_('pushing to %s\n') % util.hidepassword(dest))
4596 ui.status(_('pushing to %s\n') % util.hidepassword(dest))
4597 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
4597 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
4598 other = hg.peer(repo, opts, dest)
4598 other = hg.peer(repo, opts, dest)
4599
4599
4600 if revs:
4600 if revs:
4601 revs = [repo[r].node() for r in scmutil.revrange(repo, revs)]
4601 revs = [repo[r].node() for r in scmutil.revrange(repo, revs)]
4602 if not revs:
4602 if not revs:
4603 raise error.Abort(_("specified revisions evaluate to an empty set"),
4603 raise error.Abort(_("specified revisions evaluate to an empty set"),
4604 hint=_("use different revision arguments"))
4604 hint=_("use different revision arguments"))
4605 elif path.pushrev:
4605 elif path.pushrev:
4606 # It doesn't make any sense to specify ancestor revisions. So limit
4606 # It doesn't make any sense to specify ancestor revisions. So limit
4607 # to DAG heads to make discovery simpler.
4607 # to DAG heads to make discovery simpler.
4608 expr = revsetlang.formatspec('heads(%r)', path.pushrev)
4608 expr = revsetlang.formatspec('heads(%r)', path.pushrev)
4609 revs = scmutil.revrange(repo, [expr])
4609 revs = scmutil.revrange(repo, [expr])
4610 revs = [repo[rev].node() for rev in revs]
4610 revs = [repo[rev].node() for rev in revs]
4611 if not revs:
4611 if not revs:
4612 raise error.Abort(_('default push revset for path evaluates to an '
4612 raise error.Abort(_('default push revset for path evaluates to an '
4613 'empty set'))
4613 'empty set'))
4614
4614
4615 repo._subtoppath = dest
4615 repo._subtoppath = dest
4616 try:
4616 try:
4617 # push subrepos depth-first for coherent ordering
4617 # push subrepos depth-first for coherent ordering
4618 c = repo['.']
4618 c = repo['.']
4619 subs = c.substate # only repos that are committed
4619 subs = c.substate # only repos that are committed
4620 for s in sorted(subs):
4620 for s in sorted(subs):
4621 result = c.sub(s).push(opts)
4621 result = c.sub(s).push(opts)
4622 if result == 0:
4622 if result == 0:
4623 return not result
4623 return not result
4624 finally:
4624 finally:
4625 del repo._subtoppath
4625 del repo._subtoppath
4626
4626
4627 opargs = dict(opts.get('opargs', {})) # copy opargs since we may mutate it
4627 opargs = dict(opts.get('opargs', {})) # copy opargs since we may mutate it
4628 opargs.setdefault('pushvars', []).extend(opts.get('pushvars', []))
4628 opargs.setdefault('pushvars', []).extend(opts.get('pushvars', []))
4629
4629
4630 pushop = exchange.push(repo, other, opts.get('force'), revs=revs,
4630 pushop = exchange.push(repo, other, opts.get('force'), revs=revs,
4631 newbranch=opts.get('new_branch'),
4631 newbranch=opts.get('new_branch'),
4632 bookmarks=opts.get('bookmark', ()),
4632 bookmarks=opts.get('bookmark', ()),
4633 publish=opts.get('publish'),
4633 publish=opts.get('publish'),
4634 opargs=opargs)
4634 opargs=opargs)
4635
4635
4636 result = not pushop.cgresult
4636 result = not pushop.cgresult
4637
4637
4638 if pushop.bkresult is not None:
4638 if pushop.bkresult is not None:
4639 if pushop.bkresult == 2:
4639 if pushop.bkresult == 2:
4640 result = 2
4640 result = 2
4641 elif not result and pushop.bkresult:
4641 elif not result and pushop.bkresult:
4642 result = 2
4642 result = 2
4643
4643
4644 return result
4644 return result
4645
4645
4646 @command('recover', [], helpcategory=command.CATEGORY_MAINTENANCE)
4646 @command('recover', [], helpcategory=command.CATEGORY_MAINTENANCE)
4647 def recover(ui, repo):
4647 def recover(ui, repo):
4648 """roll back an interrupted transaction
4648 """roll back an interrupted transaction
4649
4649
4650 Recover from an interrupted commit or pull.
4650 Recover from an interrupted commit or pull.
4651
4651
4652 This command tries to fix the repository status after an
4652 This command tries to fix the repository status after an
4653 interrupted operation. It should only be necessary when Mercurial
4653 interrupted operation. It should only be necessary when Mercurial
4654 suggests it.
4654 suggests it.
4655
4655
4656 Returns 0 if successful, 1 if nothing to recover or verify fails.
4656 Returns 0 if successful, 1 if nothing to recover or verify fails.
4657 """
4657 """
4658 if repo.recover():
4658 if repo.recover():
4659 return hg.verify(repo)
4659 return hg.verify(repo)
4660 return 1
4660 return 1
4661
4661
4662 @command('remove|rm',
4662 @command('remove|rm',
4663 [('A', 'after', None, _('record delete for missing files')),
4663 [('A', 'after', None, _('record delete for missing files')),
4664 ('f', 'force', None,
4664 ('f', 'force', None,
4665 _('forget added files, delete modified files')),
4665 _('forget added files, delete modified files')),
4666 ] + subrepoopts + walkopts + dryrunopts,
4666 ] + subrepoopts + walkopts + dryrunopts,
4667 _('[OPTION]... FILE...'),
4667 _('[OPTION]... FILE...'),
4668 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
4668 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
4669 helpbasic=True, inferrepo=True)
4669 helpbasic=True, inferrepo=True)
4670 def remove(ui, repo, *pats, **opts):
4670 def remove(ui, repo, *pats, **opts):
4671 """remove the specified files on the next commit
4671 """remove the specified files on the next commit
4672
4672
4673 Schedule the indicated files for removal from the current branch.
4673 Schedule the indicated files for removal from the current branch.
4674
4674
4675 This command schedules the files to be removed at the next commit.
4675 This command schedules the files to be removed at the next commit.
4676 To undo a remove before that, see :hg:`revert`. To undo added
4676 To undo a remove before that, see :hg:`revert`. To undo added
4677 files, see :hg:`forget`.
4677 files, see :hg:`forget`.
4678
4678
4679 .. container:: verbose
4679 .. container:: verbose
4680
4680
4681 -A/--after can be used to remove only files that have already
4681 -A/--after can be used to remove only files that have already
4682 been deleted, -f/--force can be used to force deletion, and -Af
4682 been deleted, -f/--force can be used to force deletion, and -Af
4683 can be used to remove files from the next revision without
4683 can be used to remove files from the next revision without
4684 deleting them from the working directory.
4684 deleting them from the working directory.
4685
4685
4686 The following table details the behavior of remove for different
4686 The following table details the behavior of remove for different
4687 file states (columns) and option combinations (rows). The file
4687 file states (columns) and option combinations (rows). The file
4688 states are Added [A], Clean [C], Modified [M] and Missing [!]
4688 states are Added [A], Clean [C], Modified [M] and Missing [!]
4689 (as reported by :hg:`status`). The actions are Warn, Remove
4689 (as reported by :hg:`status`). The actions are Warn, Remove
4690 (from branch) and Delete (from disk):
4690 (from branch) and Delete (from disk):
4691
4691
4692 ========= == == == ==
4692 ========= == == == ==
4693 opt/state A C M !
4693 opt/state A C M !
4694 ========= == == == ==
4694 ========= == == == ==
4695 none W RD W R
4695 none W RD W R
4696 -f R RD RD R
4696 -f R RD RD R
4697 -A W W W R
4697 -A W W W R
4698 -Af R R R R
4698 -Af R R R R
4699 ========= == == == ==
4699 ========= == == == ==
4700
4700
4701 .. note::
4701 .. note::
4702
4702
4703 :hg:`remove` never deletes files in Added [A] state from the
4703 :hg:`remove` never deletes files in Added [A] state from the
4704 working directory, not even if ``--force`` is specified.
4704 working directory, not even if ``--force`` is specified.
4705
4705
4706 Returns 0 on success, 1 if any warnings encountered.
4706 Returns 0 on success, 1 if any warnings encountered.
4707 """
4707 """
4708
4708
4709 opts = pycompat.byteskwargs(opts)
4709 opts = pycompat.byteskwargs(opts)
4710 after, force = opts.get('after'), opts.get('force')
4710 after, force = opts.get('after'), opts.get('force')
4711 dryrun = opts.get('dry_run')
4711 dryrun = opts.get('dry_run')
4712 if not pats and not after:
4712 if not pats and not after:
4713 raise error.Abort(_('no files specified'))
4713 raise error.Abort(_('no files specified'))
4714
4714
4715 m = scmutil.match(repo[None], pats, opts)
4715 m = scmutil.match(repo[None], pats, opts)
4716 subrepos = opts.get('subrepos')
4716 subrepos = opts.get('subrepos')
4717 return cmdutil.remove(ui, repo, m, "", after, force, subrepos,
4717 return cmdutil.remove(ui, repo, m, "", after, force, subrepos,
4718 dryrun=dryrun)
4718 dryrun=dryrun)
4719
4719
4720 @command('rename|move|mv',
4720 @command('rename|move|mv',
4721 [('A', 'after', None, _('record a rename that has already occurred')),
4721 [('A', 'after', None, _('record a rename that has already occurred')),
4722 ('f', 'force', None, _('forcibly copy over an existing managed file')),
4722 ('f', 'force', None, _('forcibly copy over an existing managed file')),
4723 ] + walkopts + dryrunopts,
4723 ] + walkopts + dryrunopts,
4724 _('[OPTION]... SOURCE... DEST'),
4724 _('[OPTION]... SOURCE... DEST'),
4725 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
4725 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
4726 def rename(ui, repo, *pats, **opts):
4726 def rename(ui, repo, *pats, **opts):
4727 """rename files; equivalent of copy + remove
4727 """rename files; equivalent of copy + remove
4728
4728
4729 Mark dest as copies of sources; mark sources for deletion. If dest
4729 Mark dest as copies of sources; mark sources for deletion. If dest
4730 is a directory, copies are put in that directory. If dest is a
4730 is a directory, copies are put in that directory. If dest is a
4731 file, there can only be one source.
4731 file, there can only be one source.
4732
4732
4733 By default, this command copies the contents of files as they
4733 By default, this command copies the contents of files as they
4734 exist in the working directory. If invoked with -A/--after, the
4734 exist in the working directory. If invoked with -A/--after, the
4735 operation is recorded, but no copying is performed.
4735 operation is recorded, but no copying is performed.
4736
4736
4737 This command takes effect at the next commit. To undo a rename
4737 This command takes effect at the next commit. To undo a rename
4738 before that, see :hg:`revert`.
4738 before that, see :hg:`revert`.
4739
4739
4740 Returns 0 on success, 1 if errors are encountered.
4740 Returns 0 on success, 1 if errors are encountered.
4741 """
4741 """
4742 opts = pycompat.byteskwargs(opts)
4742 opts = pycompat.byteskwargs(opts)
4743 with repo.wlock(False):
4743 with repo.wlock(False):
4744 return cmdutil.copy(ui, repo, pats, opts, rename=True)
4744 return cmdutil.copy(ui, repo, pats, opts, rename=True)
4745
4745
4746 @command('resolve',
4746 @command('resolve',
4747 [('a', 'all', None, _('select all unresolved files')),
4747 [('a', 'all', None, _('select all unresolved files')),
4748 ('l', 'list', None, _('list state of files needing merge')),
4748 ('l', 'list', None, _('list state of files needing merge')),
4749 ('m', 'mark', None, _('mark files as resolved')),
4749 ('m', 'mark', None, _('mark files as resolved')),
4750 ('u', 'unmark', None, _('mark files as unresolved')),
4750 ('u', 'unmark', None, _('mark files as unresolved')),
4751 ('n', 'no-status', None, _('hide status prefix')),
4751 ('n', 'no-status', None, _('hide status prefix')),
4752 ('', 're-merge', None, _('re-merge files'))]
4752 ('', 're-merge', None, _('re-merge files'))]
4753 + mergetoolopts + walkopts + formatteropts,
4753 + mergetoolopts + walkopts + formatteropts,
4754 _('[OPTION]... [FILE]...'),
4754 _('[OPTION]... [FILE]...'),
4755 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
4755 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
4756 inferrepo=True)
4756 inferrepo=True)
4757 def resolve(ui, repo, *pats, **opts):
4757 def resolve(ui, repo, *pats, **opts):
4758 """redo merges or set/view the merge status of files
4758 """redo merges or set/view the merge status of files
4759
4759
4760 Merges with unresolved conflicts are often the result of
4760 Merges with unresolved conflicts are often the result of
4761 non-interactive merging using the ``internal:merge`` configuration
4761 non-interactive merging using the ``internal:merge`` configuration
4762 setting, or a command-line merge tool like ``diff3``. The resolve
4762 setting, or a command-line merge tool like ``diff3``. The resolve
4763 command is used to manage the files involved in a merge, after
4763 command is used to manage the files involved in a merge, after
4764 :hg:`merge` has been run, and before :hg:`commit` is run (i.e. the
4764 :hg:`merge` has been run, and before :hg:`commit` is run (i.e. the
4765 working directory must have two parents). See :hg:`help
4765 working directory must have two parents). See :hg:`help
4766 merge-tools` for information on configuring merge tools.
4766 merge-tools` for information on configuring merge tools.
4767
4767
4768 The resolve command can be used in the following ways:
4768 The resolve command can be used in the following ways:
4769
4769
4770 - :hg:`resolve [--re-merge] [--tool TOOL] FILE...`: attempt to re-merge
4770 - :hg:`resolve [--re-merge] [--tool TOOL] FILE...`: attempt to re-merge
4771 the specified files, discarding any previous merge attempts. Re-merging
4771 the specified files, discarding any previous merge attempts. Re-merging
4772 is not performed for files already marked as resolved. Use ``--all/-a``
4772 is not performed for files already marked as resolved. Use ``--all/-a``
4773 to select all unresolved files. ``--tool`` can be used to specify
4773 to select all unresolved files. ``--tool`` can be used to specify
4774 the merge tool used for the given files. It overrides the HGMERGE
4774 the merge tool used for the given files. It overrides the HGMERGE
4775 environment variable and your configuration files. Previous file
4775 environment variable and your configuration files. Previous file
4776 contents are saved with a ``.orig`` suffix.
4776 contents are saved with a ``.orig`` suffix.
4777
4777
4778 - :hg:`resolve -m [FILE]`: mark a file as having been resolved
4778 - :hg:`resolve -m [FILE]`: mark a file as having been resolved
4779 (e.g. after having manually fixed-up the files). The default is
4779 (e.g. after having manually fixed-up the files). The default is
4780 to mark all unresolved files.
4780 to mark all unresolved files.
4781
4781
4782 - :hg:`resolve -u [FILE]...`: mark a file as unresolved. The
4782 - :hg:`resolve -u [FILE]...`: mark a file as unresolved. The
4783 default is to mark all resolved files.
4783 default is to mark all resolved files.
4784
4784
4785 - :hg:`resolve -l`: list files which had or still have conflicts.
4785 - :hg:`resolve -l`: list files which had or still have conflicts.
4786 In the printed list, ``U`` = unresolved and ``R`` = resolved.
4786 In the printed list, ``U`` = unresolved and ``R`` = resolved.
4787 You can use ``set:unresolved()`` or ``set:resolved()`` to filter
4787 You can use ``set:unresolved()`` or ``set:resolved()`` to filter
4788 the list. See :hg:`help filesets` for details.
4788 the list. See :hg:`help filesets` for details.
4789
4789
4790 .. note::
4790 .. note::
4791
4791
4792 Mercurial will not let you commit files with unresolved merge
4792 Mercurial will not let you commit files with unresolved merge
4793 conflicts. You must use :hg:`resolve -m ...` before you can
4793 conflicts. You must use :hg:`resolve -m ...` before you can
4794 commit after a conflicting merge.
4794 commit after a conflicting merge.
4795
4795
4796 .. container:: verbose
4796 .. container:: verbose
4797
4797
4798 Template:
4798 Template:
4799
4799
4800 The following keywords are supported in addition to the common template
4800 The following keywords are supported in addition to the common template
4801 keywords and functions. See also :hg:`help templates`.
4801 keywords and functions. See also :hg:`help templates`.
4802
4802
4803 :mergestatus: String. Character denoting merge conflicts, ``U`` or ``R``.
4803 :mergestatus: String. Character denoting merge conflicts, ``U`` or ``R``.
4804 :path: String. Repository-absolute path of the file.
4804 :path: String. Repository-absolute path of the file.
4805
4805
4806 Returns 0 on success, 1 if any files fail a resolve attempt.
4806 Returns 0 on success, 1 if any files fail a resolve attempt.
4807 """
4807 """
4808
4808
4809 opts = pycompat.byteskwargs(opts)
4809 opts = pycompat.byteskwargs(opts)
4810 confirm = ui.configbool('commands', 'resolve.confirm')
4810 confirm = ui.configbool('commands', 'resolve.confirm')
4811 flaglist = 'all mark unmark list no_status re_merge'.split()
4811 flaglist = 'all mark unmark list no_status re_merge'.split()
4812 all, mark, unmark, show, nostatus, remerge = \
4812 all, mark, unmark, show, nostatus, remerge = \
4813 [opts.get(o) for o in flaglist]
4813 [opts.get(o) for o in flaglist]
4814
4814
4815 actioncount = len(list(filter(None, [show, mark, unmark, remerge])))
4815 actioncount = len(list(filter(None, [show, mark, unmark, remerge])))
4816 if actioncount > 1:
4816 if actioncount > 1:
4817 raise error.Abort(_("too many actions specified"))
4817 raise error.Abort(_("too many actions specified"))
4818 elif (actioncount == 0
4818 elif (actioncount == 0
4819 and ui.configbool('commands', 'resolve.explicit-re-merge')):
4819 and ui.configbool('commands', 'resolve.explicit-re-merge')):
4820 hint = _('use --mark, --unmark, --list or --re-merge')
4820 hint = _('use --mark, --unmark, --list or --re-merge')
4821 raise error.Abort(_('no action specified'), hint=hint)
4821 raise error.Abort(_('no action specified'), hint=hint)
4822 if pats and all:
4822 if pats and all:
4823 raise error.Abort(_("can't specify --all and patterns"))
4823 raise error.Abort(_("can't specify --all and patterns"))
4824 if not (all or pats or show or mark or unmark):
4824 if not (all or pats or show or mark or unmark):
4825 raise error.Abort(_('no files or directories specified'),
4825 raise error.Abort(_('no files or directories specified'),
4826 hint=('use --all to re-merge all unresolved files'))
4826 hint=('use --all to re-merge all unresolved files'))
4827
4827
4828 if confirm:
4828 if confirm:
4829 if all:
4829 if all:
4830 if ui.promptchoice(_(b're-merge all unresolved files (yn)?'
4830 if ui.promptchoice(_(b're-merge all unresolved files (yn)?'
4831 b'$$ &Yes $$ &No')):
4831 b'$$ &Yes $$ &No')):
4832 raise error.Abort(_('user quit'))
4832 raise error.Abort(_('user quit'))
4833 if mark and not pats:
4833 if mark and not pats:
4834 if ui.promptchoice(_(b'mark all unresolved files as resolved (yn)?'
4834 if ui.promptchoice(_(b'mark all unresolved files as resolved (yn)?'
4835 b'$$ &Yes $$ &No')):
4835 b'$$ &Yes $$ &No')):
4836 raise error.Abort(_('user quit'))
4836 raise error.Abort(_('user quit'))
4837 if unmark and not pats:
4837 if unmark and not pats:
4838 if ui.promptchoice(_(b'mark all resolved files as unresolved (yn)?'
4838 if ui.promptchoice(_(b'mark all resolved files as unresolved (yn)?'
4839 b'$$ &Yes $$ &No')):
4839 b'$$ &Yes $$ &No')):
4840 raise error.Abort(_('user quit'))
4840 raise error.Abort(_('user quit'))
4841
4841
4842 uipathfn = scmutil.getuipathfn(repo)
4842 uipathfn = scmutil.getuipathfn(repo)
4843
4843
4844 if show:
4844 if show:
4845 ui.pager('resolve')
4845 ui.pager('resolve')
4846 fm = ui.formatter('resolve', opts)
4846 fm = ui.formatter('resolve', opts)
4847 ms = mergemod.mergestate.read(repo)
4847 ms = mergemod.mergestate.read(repo)
4848 wctx = repo[None]
4848 wctx = repo[None]
4849 m = scmutil.match(wctx, pats, opts)
4849 m = scmutil.match(wctx, pats, opts)
4850
4850
4851 # Labels and keys based on merge state. Unresolved path conflicts show
4851 # Labels and keys based on merge state. Unresolved path conflicts show
4852 # as 'P'. Resolved path conflicts show as 'R', the same as normal
4852 # as 'P'. Resolved path conflicts show as 'R', the same as normal
4853 # resolved conflicts.
4853 # resolved conflicts.
4854 mergestateinfo = {
4854 mergestateinfo = {
4855 mergemod.MERGE_RECORD_UNRESOLVED: ('resolve.unresolved', 'U'),
4855 mergemod.MERGE_RECORD_UNRESOLVED: ('resolve.unresolved', 'U'),
4856 mergemod.MERGE_RECORD_RESOLVED: ('resolve.resolved', 'R'),
4856 mergemod.MERGE_RECORD_RESOLVED: ('resolve.resolved', 'R'),
4857 mergemod.MERGE_RECORD_UNRESOLVED_PATH: ('resolve.unresolved', 'P'),
4857 mergemod.MERGE_RECORD_UNRESOLVED_PATH: ('resolve.unresolved', 'P'),
4858 mergemod.MERGE_RECORD_RESOLVED_PATH: ('resolve.resolved', 'R'),
4858 mergemod.MERGE_RECORD_RESOLVED_PATH: ('resolve.resolved', 'R'),
4859 mergemod.MERGE_RECORD_DRIVER_RESOLVED: ('resolve.driverresolved',
4859 mergemod.MERGE_RECORD_DRIVER_RESOLVED: ('resolve.driverresolved',
4860 'D'),
4860 'D'),
4861 }
4861 }
4862
4862
4863 for f in ms:
4863 for f in ms:
4864 if not m(f):
4864 if not m(f):
4865 continue
4865 continue
4866
4866
4867 label, key = mergestateinfo[ms[f]]
4867 label, key = mergestateinfo[ms[f]]
4868 fm.startitem()
4868 fm.startitem()
4869 fm.context(ctx=wctx)
4869 fm.context(ctx=wctx)
4870 fm.condwrite(not nostatus, 'mergestatus', '%s ', key, label=label)
4870 fm.condwrite(not nostatus, 'mergestatus', '%s ', key, label=label)
4871 fm.data(path=f)
4871 fm.data(path=f)
4872 fm.plain('%s\n' % uipathfn(f), label=label)
4872 fm.plain('%s\n' % uipathfn(f), label=label)
4873 fm.end()
4873 fm.end()
4874 return 0
4874 return 0
4875
4875
4876 with repo.wlock():
4876 with repo.wlock():
4877 ms = mergemod.mergestate.read(repo)
4877 ms = mergemod.mergestate.read(repo)
4878
4878
4879 if not (ms.active() or repo.dirstate.p2() != nullid):
4879 if not (ms.active() or repo.dirstate.p2() != nullid):
4880 raise error.Abort(
4880 raise error.Abort(
4881 _('resolve command not applicable when not merging'))
4881 _('resolve command not applicable when not merging'))
4882
4882
4883 wctx = repo[None]
4883 wctx = repo[None]
4884
4884
4885 if (ms.mergedriver
4885 if (ms.mergedriver
4886 and ms.mdstate() == mergemod.MERGE_DRIVER_STATE_UNMARKED):
4886 and ms.mdstate() == mergemod.MERGE_DRIVER_STATE_UNMARKED):
4887 proceed = mergemod.driverpreprocess(repo, ms, wctx)
4887 proceed = mergemod.driverpreprocess(repo, ms, wctx)
4888 ms.commit()
4888 ms.commit()
4889 # allow mark and unmark to go through
4889 # allow mark and unmark to go through
4890 if not mark and not unmark and not proceed:
4890 if not mark and not unmark and not proceed:
4891 return 1
4891 return 1
4892
4892
4893 m = scmutil.match(wctx, pats, opts)
4893 m = scmutil.match(wctx, pats, opts)
4894 ret = 0
4894 ret = 0
4895 didwork = False
4895 didwork = False
4896 runconclude = False
4896 runconclude = False
4897
4897
4898 tocomplete = []
4898 tocomplete = []
4899 hasconflictmarkers = []
4899 hasconflictmarkers = []
4900 if mark:
4900 if mark:
4901 markcheck = ui.config('commands', 'resolve.mark-check')
4901 markcheck = ui.config('commands', 'resolve.mark-check')
4902 if markcheck not in ['warn', 'abort']:
4902 if markcheck not in ['warn', 'abort']:
4903 # Treat all invalid / unrecognized values as 'none'.
4903 # Treat all invalid / unrecognized values as 'none'.
4904 markcheck = False
4904 markcheck = False
4905 for f in ms:
4905 for f in ms:
4906 if not m(f):
4906 if not m(f):
4907 continue
4907 continue
4908
4908
4909 didwork = True
4909 didwork = True
4910
4910
4911 # don't let driver-resolved files be marked, and run the conclude
4911 # don't let driver-resolved files be marked, and run the conclude
4912 # step if asked to resolve
4912 # step if asked to resolve
4913 if ms[f] == mergemod.MERGE_RECORD_DRIVER_RESOLVED:
4913 if ms[f] == mergemod.MERGE_RECORD_DRIVER_RESOLVED:
4914 exact = m.exact(f)
4914 exact = m.exact(f)
4915 if mark:
4915 if mark:
4916 if exact:
4916 if exact:
4917 ui.warn(_('not marking %s as it is driver-resolved\n')
4917 ui.warn(_('not marking %s as it is driver-resolved\n')
4918 % f)
4918 % f)
4919 elif unmark:
4919 elif unmark:
4920 if exact:
4920 if exact:
4921 ui.warn(_('not unmarking %s as it is driver-resolved\n')
4921 ui.warn(_('not unmarking %s as it is driver-resolved\n')
4922 % f)
4922 % f)
4923 else:
4923 else:
4924 runconclude = True
4924 runconclude = True
4925 continue
4925 continue
4926
4926
4927 # path conflicts must be resolved manually
4927 # path conflicts must be resolved manually
4928 if ms[f] in (mergemod.MERGE_RECORD_UNRESOLVED_PATH,
4928 if ms[f] in (mergemod.MERGE_RECORD_UNRESOLVED_PATH,
4929 mergemod.MERGE_RECORD_RESOLVED_PATH):
4929 mergemod.MERGE_RECORD_RESOLVED_PATH):
4930 if mark:
4930 if mark:
4931 ms.mark(f, mergemod.MERGE_RECORD_RESOLVED_PATH)
4931 ms.mark(f, mergemod.MERGE_RECORD_RESOLVED_PATH)
4932 elif unmark:
4932 elif unmark:
4933 ms.mark(f, mergemod.MERGE_RECORD_UNRESOLVED_PATH)
4933 ms.mark(f, mergemod.MERGE_RECORD_UNRESOLVED_PATH)
4934 elif ms[f] == mergemod.MERGE_RECORD_UNRESOLVED_PATH:
4934 elif ms[f] == mergemod.MERGE_RECORD_UNRESOLVED_PATH:
4935 ui.warn(_('%s: path conflict must be resolved manually\n')
4935 ui.warn(_('%s: path conflict must be resolved manually\n')
4936 % f)
4936 % f)
4937 continue
4937 continue
4938
4938
4939 if mark:
4939 if mark:
4940 if markcheck:
4940 if markcheck:
4941 fdata = repo.wvfs.tryread(f)
4941 fdata = repo.wvfs.tryread(f)
4942 if filemerge.hasconflictmarkers(fdata) and \
4942 if filemerge.hasconflictmarkers(fdata) and \
4943 ms[f] != mergemod.MERGE_RECORD_RESOLVED:
4943 ms[f] != mergemod.MERGE_RECORD_RESOLVED:
4944 hasconflictmarkers.append(f)
4944 hasconflictmarkers.append(f)
4945 ms.mark(f, mergemod.MERGE_RECORD_RESOLVED)
4945 ms.mark(f, mergemod.MERGE_RECORD_RESOLVED)
4946 elif unmark:
4946 elif unmark:
4947 ms.mark(f, mergemod.MERGE_RECORD_UNRESOLVED)
4947 ms.mark(f, mergemod.MERGE_RECORD_UNRESOLVED)
4948 else:
4948 else:
4949 # backup pre-resolve (merge uses .orig for its own purposes)
4949 # backup pre-resolve (merge uses .orig for its own purposes)
4950 a = repo.wjoin(f)
4950 a = repo.wjoin(f)
4951 try:
4951 try:
4952 util.copyfile(a, a + ".resolve")
4952 util.copyfile(a, a + ".resolve")
4953 except (IOError, OSError) as inst:
4953 except (IOError, OSError) as inst:
4954 if inst.errno != errno.ENOENT:
4954 if inst.errno != errno.ENOENT:
4955 raise
4955 raise
4956
4956
4957 try:
4957 try:
4958 # preresolve file
4958 # preresolve file
4959 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
4959 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
4960 with ui.configoverride(overrides, 'resolve'):
4960 with ui.configoverride(overrides, 'resolve'):
4961 complete, r = ms.preresolve(f, wctx)
4961 complete, r = ms.preresolve(f, wctx)
4962 if not complete:
4962 if not complete:
4963 tocomplete.append(f)
4963 tocomplete.append(f)
4964 elif r:
4964 elif r:
4965 ret = 1
4965 ret = 1
4966 finally:
4966 finally:
4967 ms.commit()
4967 ms.commit()
4968
4968
4969 # replace filemerge's .orig file with our resolve file, but only
4969 # replace filemerge's .orig file with our resolve file, but only
4970 # for merges that are complete
4970 # for merges that are complete
4971 if complete:
4971 if complete:
4972 try:
4972 try:
4973 util.rename(a + ".resolve",
4973 util.rename(a + ".resolve",
4974 scmutil.origpath(ui, repo, a))
4974 scmutil.origpath(ui, repo, a))
4975 except OSError as inst:
4975 except OSError as inst:
4976 if inst.errno != errno.ENOENT:
4976 if inst.errno != errno.ENOENT:
4977 raise
4977 raise
4978
4978
4979 if hasconflictmarkers:
4979 if hasconflictmarkers:
4980 ui.warn(_('warning: the following files still have conflict '
4980 ui.warn(_('warning: the following files still have conflict '
4981 'markers:\n ') + '\n '.join(hasconflictmarkers) + '\n')
4981 'markers:\n ') + '\n '.join(hasconflictmarkers) + '\n')
4982 if markcheck == 'abort' and not all and not pats:
4982 if markcheck == 'abort' and not all and not pats:
4983 raise error.Abort(_('conflict markers detected'),
4983 raise error.Abort(_('conflict markers detected'),
4984 hint=_('use --all to mark anyway'))
4984 hint=_('use --all to mark anyway'))
4985
4985
4986 for f in tocomplete:
4986 for f in tocomplete:
4987 try:
4987 try:
4988 # resolve file
4988 # resolve file
4989 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
4989 overrides = {('ui', 'forcemerge'): opts.get('tool', '')}
4990 with ui.configoverride(overrides, 'resolve'):
4990 with ui.configoverride(overrides, 'resolve'):
4991 r = ms.resolve(f, wctx)
4991 r = ms.resolve(f, wctx)
4992 if r:
4992 if r:
4993 ret = 1
4993 ret = 1
4994 finally:
4994 finally:
4995 ms.commit()
4995 ms.commit()
4996
4996
4997 # replace filemerge's .orig file with our resolve file
4997 # replace filemerge's .orig file with our resolve file
4998 a = repo.wjoin(f)
4998 a = repo.wjoin(f)
4999 try:
4999 try:
5000 util.rename(a + ".resolve", scmutil.origpath(ui, repo, a))
5000 util.rename(a + ".resolve", scmutil.origpath(ui, repo, a))
5001 except OSError as inst:
5001 except OSError as inst:
5002 if inst.errno != errno.ENOENT:
5002 if inst.errno != errno.ENOENT:
5003 raise
5003 raise
5004
5004
5005 ms.commit()
5005 ms.commit()
5006 ms.recordactions()
5006 ms.recordactions()
5007
5007
5008 if not didwork and pats:
5008 if not didwork and pats:
5009 hint = None
5009 hint = None
5010 if not any([p for p in pats if p.find(':') >= 0]):
5010 if not any([p for p in pats if p.find(':') >= 0]):
5011 pats = ['path:%s' % p for p in pats]
5011 pats = ['path:%s' % p for p in pats]
5012 m = scmutil.match(wctx, pats, opts)
5012 m = scmutil.match(wctx, pats, opts)
5013 for f in ms:
5013 for f in ms:
5014 if not m(f):
5014 if not m(f):
5015 continue
5015 continue
5016 def flag(o):
5016 def flag(o):
5017 if o == 're_merge':
5017 if o == 're_merge':
5018 return '--re-merge '
5018 return '--re-merge '
5019 return '-%s ' % o[0:1]
5019 return '-%s ' % o[0:1]
5020 flags = ''.join([flag(o) for o in flaglist if opts.get(o)])
5020 flags = ''.join([flag(o) for o in flaglist if opts.get(o)])
5021 hint = _("(try: hg resolve %s%s)\n") % (
5021 hint = _("(try: hg resolve %s%s)\n") % (
5022 flags,
5022 flags,
5023 ' '.join(pats))
5023 ' '.join(pats))
5024 break
5024 break
5025 ui.warn(_("arguments do not match paths that need resolving\n"))
5025 ui.warn(_("arguments do not match paths that need resolving\n"))
5026 if hint:
5026 if hint:
5027 ui.warn(hint)
5027 ui.warn(hint)
5028 elif ms.mergedriver and ms.mdstate() != 's':
5028 elif ms.mergedriver and ms.mdstate() != 's':
5029 # run conclude step when either a driver-resolved file is requested
5029 # run conclude step when either a driver-resolved file is requested
5030 # or there are no driver-resolved files
5030 # or there are no driver-resolved files
5031 # we can't use 'ret' to determine whether any files are unresolved
5031 # we can't use 'ret' to determine whether any files are unresolved
5032 # because we might not have tried to resolve some
5032 # because we might not have tried to resolve some
5033 if ((runconclude or not list(ms.driverresolved()))
5033 if ((runconclude or not list(ms.driverresolved()))
5034 and not list(ms.unresolved())):
5034 and not list(ms.unresolved())):
5035 proceed = mergemod.driverconclude(repo, ms, wctx)
5035 proceed = mergemod.driverconclude(repo, ms, wctx)
5036 ms.commit()
5036 ms.commit()
5037 if not proceed:
5037 if not proceed:
5038 return 1
5038 return 1
5039
5039
5040 # Nudge users into finishing an unfinished operation
5040 # Nudge users into finishing an unfinished operation
5041 unresolvedf = list(ms.unresolved())
5041 unresolvedf = list(ms.unresolved())
5042 driverresolvedf = list(ms.driverresolved())
5042 driverresolvedf = list(ms.driverresolved())
5043 if not unresolvedf and not driverresolvedf:
5043 if not unresolvedf and not driverresolvedf:
5044 ui.status(_('(no more unresolved files)\n'))
5044 ui.status(_('(no more unresolved files)\n'))
5045 cmdutil.checkafterresolved(repo)
5045 cmdutil.checkafterresolved(repo)
5046 elif not unresolvedf:
5046 elif not unresolvedf:
5047 ui.status(_('(no more unresolved files -- '
5047 ui.status(_('(no more unresolved files -- '
5048 'run "hg resolve --all" to conclude)\n'))
5048 'run "hg resolve --all" to conclude)\n'))
5049
5049
5050 return ret
5050 return ret
5051
5051
5052 @command('revert',
5052 @command('revert',
5053 [('a', 'all', None, _('revert all changes when no arguments given')),
5053 [('a', 'all', None, _('revert all changes when no arguments given')),
5054 ('d', 'date', '', _('tipmost revision matching date'), _('DATE')),
5054 ('d', 'date', '', _('tipmost revision matching date'), _('DATE')),
5055 ('r', 'rev', '', _('revert to the specified revision'), _('REV')),
5055 ('r', 'rev', '', _('revert to the specified revision'), _('REV')),
5056 ('C', 'no-backup', None, _('do not save backup copies of files')),
5056 ('C', 'no-backup', None, _('do not save backup copies of files')),
5057 ('i', 'interactive', None, _('interactively select the changes')),
5057 ('i', 'interactive', None, _('interactively select the changes')),
5058 ] + walkopts + dryrunopts,
5058 ] + walkopts + dryrunopts,
5059 _('[OPTION]... [-r REV] [NAME]...'),
5059 _('[OPTION]... [-r REV] [NAME]...'),
5060 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
5060 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
5061 def revert(ui, repo, *pats, **opts):
5061 def revert(ui, repo, *pats, **opts):
5062 """restore files to their checkout state
5062 """restore files to their checkout state
5063
5063
5064 .. note::
5064 .. note::
5065
5065
5066 To check out earlier revisions, you should use :hg:`update REV`.
5066 To check out earlier revisions, you should use :hg:`update REV`.
5067 To cancel an uncommitted merge (and lose your changes),
5067 To cancel an uncommitted merge (and lose your changes),
5068 use :hg:`merge --abort`.
5068 use :hg:`merge --abort`.
5069
5069
5070 With no revision specified, revert the specified files or directories
5070 With no revision specified, revert the specified files or directories
5071 to the contents they had in the parent of the working directory.
5071 to the contents they had in the parent of the working directory.
5072 This restores the contents of files to an unmodified
5072 This restores the contents of files to an unmodified
5073 state and unschedules adds, removes, copies, and renames. If the
5073 state and unschedules adds, removes, copies, and renames. If the
5074 working directory has two parents, you must explicitly specify a
5074 working directory has two parents, you must explicitly specify a
5075 revision.
5075 revision.
5076
5076
5077 Using the -r/--rev or -d/--date options, revert the given files or
5077 Using the -r/--rev or -d/--date options, revert the given files or
5078 directories to their states as of a specific revision. Because
5078 directories to their states as of a specific revision. Because
5079 revert does not change the working directory parents, this will
5079 revert does not change the working directory parents, this will
5080 cause these files to appear modified. This can be helpful to "back
5080 cause these files to appear modified. This can be helpful to "back
5081 out" some or all of an earlier change. See :hg:`backout` for a
5081 out" some or all of an earlier change. See :hg:`backout` for a
5082 related method.
5082 related method.
5083
5083
5084 Modified files are saved with a .orig suffix before reverting.
5084 Modified files are saved with a .orig suffix before reverting.
5085 To disable these backups, use --no-backup. It is possible to store
5085 To disable these backups, use --no-backup. It is possible to store
5086 the backup files in a custom directory relative to the root of the
5086 the backup files in a custom directory relative to the root of the
5087 repository by setting the ``ui.origbackuppath`` configuration
5087 repository by setting the ``ui.origbackuppath`` configuration
5088 option.
5088 option.
5089
5089
5090 See :hg:`help dates` for a list of formats valid for -d/--date.
5090 See :hg:`help dates` for a list of formats valid for -d/--date.
5091
5091
5092 See :hg:`help backout` for a way to reverse the effect of an
5092 See :hg:`help backout` for a way to reverse the effect of an
5093 earlier changeset.
5093 earlier changeset.
5094
5094
5095 Returns 0 on success.
5095 Returns 0 on success.
5096 """
5096 """
5097
5097
5098 opts = pycompat.byteskwargs(opts)
5098 opts = pycompat.byteskwargs(opts)
5099 if opts.get("date"):
5099 if opts.get("date"):
5100 if opts.get("rev"):
5100 if opts.get("rev"):
5101 raise error.Abort(_("you can't specify a revision and a date"))
5101 raise error.Abort(_("you can't specify a revision and a date"))
5102 opts["rev"] = cmdutil.finddate(ui, repo, opts["date"])
5102 opts["rev"] = cmdutil.finddate(ui, repo, opts["date"])
5103
5103
5104 parent, p2 = repo.dirstate.parents()
5104 parent, p2 = repo.dirstate.parents()
5105 if not opts.get('rev') and p2 != nullid:
5105 if not opts.get('rev') and p2 != nullid:
5106 # revert after merge is a trap for new users (issue2915)
5106 # revert after merge is a trap for new users (issue2915)
5107 raise error.Abort(_('uncommitted merge with no revision specified'),
5107 raise error.Abort(_('uncommitted merge with no revision specified'),
5108 hint=_("use 'hg update' or see 'hg help revert'"))
5108 hint=_("use 'hg update' or see 'hg help revert'"))
5109
5109
5110 rev = opts.get('rev')
5110 rev = opts.get('rev')
5111 if rev:
5111 if rev:
5112 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
5112 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
5113 ctx = scmutil.revsingle(repo, rev)
5113 ctx = scmutil.revsingle(repo, rev)
5114
5114
5115 if (not (pats or opts.get('include') or opts.get('exclude') or
5115 if (not (pats or opts.get('include') or opts.get('exclude') or
5116 opts.get('all') or opts.get('interactive'))):
5116 opts.get('all') or opts.get('interactive'))):
5117 msg = _("no files or directories specified")
5117 msg = _("no files or directories specified")
5118 if p2 != nullid:
5118 if p2 != nullid:
5119 hint = _("uncommitted merge, use --all to discard all changes,"
5119 hint = _("uncommitted merge, use --all to discard all changes,"
5120 " or 'hg update -C .' to abort the merge")
5120 " or 'hg update -C .' to abort the merge")
5121 raise error.Abort(msg, hint=hint)
5121 raise error.Abort(msg, hint=hint)
5122 dirty = any(repo.status())
5122 dirty = any(repo.status())
5123 node = ctx.node()
5123 node = ctx.node()
5124 if node != parent:
5124 if node != parent:
5125 if dirty:
5125 if dirty:
5126 hint = _("uncommitted changes, use --all to discard all"
5126 hint = _("uncommitted changes, use --all to discard all"
5127 " changes, or 'hg update %d' to update") % ctx.rev()
5127 " changes, or 'hg update %d' to update") % ctx.rev()
5128 else:
5128 else:
5129 hint = _("use --all to revert all files,"
5129 hint = _("use --all to revert all files,"
5130 " or 'hg update %d' to update") % ctx.rev()
5130 " or 'hg update %d' to update") % ctx.rev()
5131 elif dirty:
5131 elif dirty:
5132 hint = _("uncommitted changes, use --all to discard all changes")
5132 hint = _("uncommitted changes, use --all to discard all changes")
5133 else:
5133 else:
5134 hint = _("use --all to revert all files")
5134 hint = _("use --all to revert all files")
5135 raise error.Abort(msg, hint=hint)
5135 raise error.Abort(msg, hint=hint)
5136
5136
5137 return cmdutil.revert(ui, repo, ctx, (parent, p2), *pats,
5137 return cmdutil.revert(ui, repo, ctx, (parent, p2), *pats,
5138 **pycompat.strkwargs(opts))
5138 **pycompat.strkwargs(opts))
5139
5139
5140 @command(
5140 @command(
5141 'rollback',
5141 'rollback',
5142 dryrunopts + [('f', 'force', False, _('ignore safety measures'))],
5142 dryrunopts + [('f', 'force', False, _('ignore safety measures'))],
5143 helpcategory=command.CATEGORY_MAINTENANCE)
5143 helpcategory=command.CATEGORY_MAINTENANCE)
5144 def rollback(ui, repo, **opts):
5144 def rollback(ui, repo, **opts):
5145 """roll back the last transaction (DANGEROUS) (DEPRECATED)
5145 """roll back the last transaction (DANGEROUS) (DEPRECATED)
5146
5146
5147 Please use :hg:`commit --amend` instead of rollback to correct
5147 Please use :hg:`commit --amend` instead of rollback to correct
5148 mistakes in the last commit.
5148 mistakes in the last commit.
5149
5149
5150 This command should be used with care. There is only one level of
5150 This command should be used with care. There is only one level of
5151 rollback, and there is no way to undo a rollback. It will also
5151 rollback, and there is no way to undo a rollback. It will also
5152 restore the dirstate at the time of the last transaction, losing
5152 restore the dirstate at the time of the last transaction, losing
5153 any dirstate changes since that time. This command does not alter
5153 any dirstate changes since that time. This command does not alter
5154 the working directory.
5154 the working directory.
5155
5155
5156 Transactions are used to encapsulate the effects of all commands
5156 Transactions are used to encapsulate the effects of all commands
5157 that create new changesets or propagate existing changesets into a
5157 that create new changesets or propagate existing changesets into a
5158 repository.
5158 repository.
5159
5159
5160 .. container:: verbose
5160 .. container:: verbose
5161
5161
5162 For example, the following commands are transactional, and their
5162 For example, the following commands are transactional, and their
5163 effects can be rolled back:
5163 effects can be rolled back:
5164
5164
5165 - commit
5165 - commit
5166 - import
5166 - import
5167 - pull
5167 - pull
5168 - push (with this repository as the destination)
5168 - push (with this repository as the destination)
5169 - unbundle
5169 - unbundle
5170
5170
5171 To avoid permanent data loss, rollback will refuse to rollback a
5171 To avoid permanent data loss, rollback will refuse to rollback a
5172 commit transaction if it isn't checked out. Use --force to
5172 commit transaction if it isn't checked out. Use --force to
5173 override this protection.
5173 override this protection.
5174
5174
5175 The rollback command can be entirely disabled by setting the
5175 The rollback command can be entirely disabled by setting the
5176 ``ui.rollback`` configuration setting to false. If you're here
5176 ``ui.rollback`` configuration setting to false. If you're here
5177 because you want to use rollback and it's disabled, you can
5177 because you want to use rollback and it's disabled, you can
5178 re-enable the command by setting ``ui.rollback`` to true.
5178 re-enable the command by setting ``ui.rollback`` to true.
5179
5179
5180 This command is not intended for use on public repositories. Once
5180 This command is not intended for use on public repositories. Once
5181 changes are visible for pull by other users, rolling a transaction
5181 changes are visible for pull by other users, rolling a transaction
5182 back locally is ineffective (someone else may already have pulled
5182 back locally is ineffective (someone else may already have pulled
5183 the changes). Furthermore, a race is possible with readers of the
5183 the changes). Furthermore, a race is possible with readers of the
5184 repository; for example an in-progress pull from the repository
5184 repository; for example an in-progress pull from the repository
5185 may fail if a rollback is performed.
5185 may fail if a rollback is performed.
5186
5186
5187 Returns 0 on success, 1 if no rollback data is available.
5187 Returns 0 on success, 1 if no rollback data is available.
5188 """
5188 """
5189 if not ui.configbool('ui', 'rollback'):
5189 if not ui.configbool('ui', 'rollback'):
5190 raise error.Abort(_('rollback is disabled because it is unsafe'),
5190 raise error.Abort(_('rollback is disabled because it is unsafe'),
5191 hint=('see `hg help -v rollback` for information'))
5191 hint=('see `hg help -v rollback` for information'))
5192 return repo.rollback(dryrun=opts.get(r'dry_run'),
5192 return repo.rollback(dryrun=opts.get(r'dry_run'),
5193 force=opts.get(r'force'))
5193 force=opts.get(r'force'))
5194
5194
5195 @command(
5195 @command(
5196 'root', [], intents={INTENT_READONLY},
5196 'root', [], intents={INTENT_READONLY},
5197 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
5197 helpcategory=command.CATEGORY_WORKING_DIRECTORY)
5198 def root(ui, repo):
5198 def root(ui, repo):
5199 """print the root (top) of the current working directory
5199 """print the root (top) of the current working directory
5200
5200
5201 Print the root directory of the current repository.
5201 Print the root directory of the current repository.
5202
5202
5203 Returns 0 on success.
5203 Returns 0 on success.
5204 """
5204 """
5205 ui.write(repo.root + "\n")
5205 ui.write(repo.root + "\n")
5206
5206
5207 @command('serve',
5207 @command('serve',
5208 [('A', 'accesslog', '', _('name of access log file to write to'),
5208 [('A', 'accesslog', '', _('name of access log file to write to'),
5209 _('FILE')),
5209 _('FILE')),
5210 ('d', 'daemon', None, _('run server in background')),
5210 ('d', 'daemon', None, _('run server in background')),
5211 ('', 'daemon-postexec', [], _('used internally by daemon mode')),
5211 ('', 'daemon-postexec', [], _('used internally by daemon mode')),
5212 ('E', 'errorlog', '', _('name of error log file to write to'), _('FILE')),
5212 ('E', 'errorlog', '', _('name of error log file to write to'), _('FILE')),
5213 # use string type, then we can check if something was passed
5213 # use string type, then we can check if something was passed
5214 ('p', 'port', '', _('port to listen on (default: 8000)'), _('PORT')),
5214 ('p', 'port', '', _('port to listen on (default: 8000)'), _('PORT')),
5215 ('a', 'address', '', _('address to listen on (default: all interfaces)'),
5215 ('a', 'address', '', _('address to listen on (default: all interfaces)'),
5216 _('ADDR')),
5216 _('ADDR')),
5217 ('', 'prefix', '', _('prefix path to serve from (default: server root)'),
5217 ('', 'prefix', '', _('prefix path to serve from (default: server root)'),
5218 _('PREFIX')),
5218 _('PREFIX')),
5219 ('n', 'name', '',
5219 ('n', 'name', '',
5220 _('name to show in web pages (default: working directory)'), _('NAME')),
5220 _('name to show in web pages (default: working directory)'), _('NAME')),
5221 ('', 'web-conf', '',
5221 ('', 'web-conf', '',
5222 _("name of the hgweb config file (see 'hg help hgweb')"), _('FILE')),
5222 _("name of the hgweb config file (see 'hg help hgweb')"), _('FILE')),
5223 ('', 'webdir-conf', '', _('name of the hgweb config file (DEPRECATED)'),
5223 ('', 'webdir-conf', '', _('name of the hgweb config file (DEPRECATED)'),
5224 _('FILE')),
5224 _('FILE')),
5225 ('', 'pid-file', '', _('name of file to write process ID to'), _('FILE')),
5225 ('', 'pid-file', '', _('name of file to write process ID to'), _('FILE')),
5226 ('', 'stdio', None, _('for remote clients (ADVANCED)')),
5226 ('', 'stdio', None, _('for remote clients (ADVANCED)')),
5227 ('', 'cmdserver', '', _('for remote clients (ADVANCED)'), _('MODE')),
5227 ('', 'cmdserver', '', _('for remote clients (ADVANCED)'), _('MODE')),
5228 ('t', 'templates', '', _('web templates to use'), _('TEMPLATE')),
5228 ('t', 'templates', '', _('web templates to use'), _('TEMPLATE')),
5229 ('', 'style', '', _('template style to use'), _('STYLE')),
5229 ('', 'style', '', _('template style to use'), _('STYLE')),
5230 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')),
5230 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')),
5231 ('', 'certificate', '', _('SSL certificate file'), _('FILE')),
5231 ('', 'certificate', '', _('SSL certificate file'), _('FILE')),
5232 ('', 'print-url', None, _('start and print only the URL'))]
5232 ('', 'print-url', None, _('start and print only the URL'))]
5233 + subrepoopts,
5233 + subrepoopts,
5234 _('[OPTION]...'),
5234 _('[OPTION]...'),
5235 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
5235 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
5236 helpbasic=True, optionalrepo=True)
5236 helpbasic=True, optionalrepo=True)
5237 def serve(ui, repo, **opts):
5237 def serve(ui, repo, **opts):
5238 """start stand-alone webserver
5238 """start stand-alone webserver
5239
5239
5240 Start a local HTTP repository browser and pull server. You can use
5240 Start a local HTTP repository browser and pull server. You can use
5241 this for ad-hoc sharing and browsing of repositories. It is
5241 this for ad-hoc sharing and browsing of repositories. It is
5242 recommended to use a real web server to serve a repository for
5242 recommended to use a real web server to serve a repository for
5243 longer periods of time.
5243 longer periods of time.
5244
5244
5245 Please note that the server does not implement access control.
5245 Please note that the server does not implement access control.
5246 This means that, by default, anybody can read from the server and
5246 This means that, by default, anybody can read from the server and
5247 nobody can write to it by default. Set the ``web.allow-push``
5247 nobody can write to it by default. Set the ``web.allow-push``
5248 option to ``*`` to allow everybody to push to the server. You
5248 option to ``*`` to allow everybody to push to the server. You
5249 should use a real web server if you need to authenticate users.
5249 should use a real web server if you need to authenticate users.
5250
5250
5251 By default, the server logs accesses to stdout and errors to
5251 By default, the server logs accesses to stdout and errors to
5252 stderr. Use the -A/--accesslog and -E/--errorlog options to log to
5252 stderr. Use the -A/--accesslog and -E/--errorlog options to log to
5253 files.
5253 files.
5254
5254
5255 To have the server choose a free port number to listen on, specify
5255 To have the server choose a free port number to listen on, specify
5256 a port number of 0; in this case, the server will print the port
5256 a port number of 0; in this case, the server will print the port
5257 number it uses.
5257 number it uses.
5258
5258
5259 Returns 0 on success.
5259 Returns 0 on success.
5260 """
5260 """
5261
5261
5262 opts = pycompat.byteskwargs(opts)
5262 opts = pycompat.byteskwargs(opts)
5263 if opts["stdio"] and opts["cmdserver"]:
5263 if opts["stdio"] and opts["cmdserver"]:
5264 raise error.Abort(_("cannot use --stdio with --cmdserver"))
5264 raise error.Abort(_("cannot use --stdio with --cmdserver"))
5265 if opts["print_url"] and ui.verbose:
5265 if opts["print_url"] and ui.verbose:
5266 raise error.Abort(_("cannot use --print-url with --verbose"))
5266 raise error.Abort(_("cannot use --print-url with --verbose"))
5267
5267
5268 if opts["stdio"]:
5268 if opts["stdio"]:
5269 if repo is None:
5269 if repo is None:
5270 raise error.RepoError(_("there is no Mercurial repository here"
5270 raise error.RepoError(_("there is no Mercurial repository here"
5271 " (.hg not found)"))
5271 " (.hg not found)"))
5272 s = wireprotoserver.sshserver(ui, repo)
5272 s = wireprotoserver.sshserver(ui, repo)
5273 s.serve_forever()
5273 s.serve_forever()
5274
5274
5275 service = server.createservice(ui, repo, opts)
5275 service = server.createservice(ui, repo, opts)
5276 return server.runservice(opts, initfn=service.init, runfn=service.run)
5276 return server.runservice(opts, initfn=service.init, runfn=service.run)
5277
5277
5278 _NOTTERSE = 'nothing'
5278 _NOTTERSE = 'nothing'
5279
5279
5280 @command('status|st',
5280 @command('status|st',
5281 [('A', 'all', None, _('show status of all files')),
5281 [('A', 'all', None, _('show status of all files')),
5282 ('m', 'modified', None, _('show only modified files')),
5282 ('m', 'modified', None, _('show only modified files')),
5283 ('a', 'added', None, _('show only added files')),
5283 ('a', 'added', None, _('show only added files')),
5284 ('r', 'removed', None, _('show only removed files')),
5284 ('r', 'removed', None, _('show only removed files')),
5285 ('d', 'deleted', None, _('show only deleted (but tracked) files')),
5285 ('d', 'deleted', None, _('show only deleted (but tracked) files')),
5286 ('c', 'clean', None, _('show only files without changes')),
5286 ('c', 'clean', None, _('show only files without changes')),
5287 ('u', 'unknown', None, _('show only unknown (not tracked) files')),
5287 ('u', 'unknown', None, _('show only unknown (not tracked) files')),
5288 ('i', 'ignored', None, _('show only ignored files')),
5288 ('i', 'ignored', None, _('show only ignored files')),
5289 ('n', 'no-status', None, _('hide status prefix')),
5289 ('n', 'no-status', None, _('hide status prefix')),
5290 ('t', 'terse', _NOTTERSE, _('show the terse output (EXPERIMENTAL)')),
5290 ('t', 'terse', _NOTTERSE, _('show the terse output (EXPERIMENTAL)')),
5291 ('C', 'copies', None, _('show source of copied files')),
5291 ('C', 'copies', None, _('show source of copied files')),
5292 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
5292 ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
5293 ('', 'rev', [], _('show difference from revision'), _('REV')),
5293 ('', 'rev', [], _('show difference from revision'), _('REV')),
5294 ('', 'change', '', _('list the changed files of a revision'), _('REV')),
5294 ('', 'change', '', _('list the changed files of a revision'), _('REV')),
5295 ] + walkopts + subrepoopts + formatteropts,
5295 ] + walkopts + subrepoopts + formatteropts,
5296 _('[OPTION]... [FILE]...'),
5296 _('[OPTION]... [FILE]...'),
5297 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
5297 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
5298 helpbasic=True, inferrepo=True,
5298 helpbasic=True, inferrepo=True,
5299 intents={INTENT_READONLY})
5299 intents={INTENT_READONLY})
5300 def status(ui, repo, *pats, **opts):
5300 def status(ui, repo, *pats, **opts):
5301 """show changed files in the working directory
5301 """show changed files in the working directory
5302
5302
5303 Show status of files in the repository. If names are given, only
5303 Show status of files in the repository. If names are given, only
5304 files that match are shown. Files that are clean or ignored or
5304 files that match are shown. Files that are clean or ignored or
5305 the source of a copy/move operation, are not listed unless
5305 the source of a copy/move operation, are not listed unless
5306 -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.
5306 -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.
5307 Unless options described with "show only ..." are given, the
5307 Unless options described with "show only ..." are given, the
5308 options -mardu are used.
5308 options -mardu are used.
5309
5309
5310 Option -q/--quiet hides untracked (unknown and ignored) files
5310 Option -q/--quiet hides untracked (unknown and ignored) files
5311 unless explicitly requested with -u/--unknown or -i/--ignored.
5311 unless explicitly requested with -u/--unknown or -i/--ignored.
5312
5312
5313 .. note::
5313 .. note::
5314
5314
5315 :hg:`status` may appear to disagree with diff if permissions have
5315 :hg:`status` may appear to disagree with diff if permissions have
5316 changed or a merge has occurred. The standard diff format does
5316 changed or a merge has occurred. The standard diff format does
5317 not report permission changes and diff only reports changes
5317 not report permission changes and diff only reports changes
5318 relative to one merge parent.
5318 relative to one merge parent.
5319
5319
5320 If one revision is given, it is used as the base revision.
5320 If one revision is given, it is used as the base revision.
5321 If two revisions are given, the differences between them are
5321 If two revisions are given, the differences between them are
5322 shown. The --change option can also be used as a shortcut to list
5322 shown. The --change option can also be used as a shortcut to list
5323 the changed files of a revision from its first parent.
5323 the changed files of a revision from its first parent.
5324
5324
5325 The codes used to show the status of files are::
5325 The codes used to show the status of files are::
5326
5326
5327 M = modified
5327 M = modified
5328 A = added
5328 A = added
5329 R = removed
5329 R = removed
5330 C = clean
5330 C = clean
5331 ! = missing (deleted by non-hg command, but still tracked)
5331 ! = missing (deleted by non-hg command, but still tracked)
5332 ? = not tracked
5332 ? = not tracked
5333 I = ignored
5333 I = ignored
5334 = origin of the previous file (with --copies)
5334 = origin of the previous file (with --copies)
5335
5335
5336 .. container:: verbose
5336 .. container:: verbose
5337
5337
5338 The -t/--terse option abbreviates the output by showing only the directory
5338 The -t/--terse option abbreviates the output by showing only the directory
5339 name if all the files in it share the same status. The option takes an
5339 name if all the files in it share the same status. The option takes an
5340 argument indicating the statuses to abbreviate: 'm' for 'modified', 'a'
5340 argument indicating the statuses to abbreviate: 'm' for 'modified', 'a'
5341 for 'added', 'r' for 'removed', 'd' for 'deleted', 'u' for 'unknown', 'i'
5341 for 'added', 'r' for 'removed', 'd' for 'deleted', 'u' for 'unknown', 'i'
5342 for 'ignored' and 'c' for clean.
5342 for 'ignored' and 'c' for clean.
5343
5343
5344 It abbreviates only those statuses which are passed. Note that clean and
5344 It abbreviates only those statuses which are passed. Note that clean and
5345 ignored files are not displayed with '--terse ic' unless the -c/--clean
5345 ignored files are not displayed with '--terse ic' unless the -c/--clean
5346 and -i/--ignored options are also used.
5346 and -i/--ignored options are also used.
5347
5347
5348 The -v/--verbose option shows information when the repository is in an
5348 The -v/--verbose option shows information when the repository is in an
5349 unfinished merge, shelve, rebase state etc. You can have this behavior
5349 unfinished merge, shelve, rebase state etc. You can have this behavior
5350 turned on by default by enabling the ``commands.status.verbose`` option.
5350 turned on by default by enabling the ``commands.status.verbose`` option.
5351
5351
5352 You can skip displaying some of these states by setting
5352 You can skip displaying some of these states by setting
5353 ``commands.status.skipstates`` to one or more of: 'bisect', 'graft',
5353 ``commands.status.skipstates`` to one or more of: 'bisect', 'graft',
5354 'histedit', 'merge', 'rebase', or 'unshelve'.
5354 'histedit', 'merge', 'rebase', or 'unshelve'.
5355
5355
5356 Template:
5356 Template:
5357
5357
5358 The following keywords are supported in addition to the common template
5358 The following keywords are supported in addition to the common template
5359 keywords and functions. See also :hg:`help templates`.
5359 keywords and functions. See also :hg:`help templates`.
5360
5360
5361 :path: String. Repository-absolute path of the file.
5361 :path: String. Repository-absolute path of the file.
5362 :source: String. Repository-absolute path of the file originated from.
5362 :source: String. Repository-absolute path of the file originated from.
5363 Available if ``--copies`` is specified.
5363 Available if ``--copies`` is specified.
5364 :status: String. Character denoting file's status.
5364 :status: String. Character denoting file's status.
5365
5365
5366 Examples:
5366 Examples:
5367
5367
5368 - show changes in the working directory relative to a
5368 - show changes in the working directory relative to a
5369 changeset::
5369 changeset::
5370
5370
5371 hg status --rev 9353
5371 hg status --rev 9353
5372
5372
5373 - show changes in the working directory relative to the
5373 - show changes in the working directory relative to the
5374 current directory (see :hg:`help patterns` for more information)::
5374 current directory (see :hg:`help patterns` for more information)::
5375
5375
5376 hg status re:
5376 hg status re:
5377
5377
5378 - show all changes including copies in an existing changeset::
5378 - show all changes including copies in an existing changeset::
5379
5379
5380 hg status --copies --change 9353
5380 hg status --copies --change 9353
5381
5381
5382 - get a NUL separated list of added files, suitable for xargs::
5382 - get a NUL separated list of added files, suitable for xargs::
5383
5383
5384 hg status -an0
5384 hg status -an0
5385
5385
5386 - show more information about the repository status, abbreviating
5386 - show more information about the repository status, abbreviating
5387 added, removed, modified, deleted, and untracked paths::
5387 added, removed, modified, deleted, and untracked paths::
5388
5388
5389 hg status -v -t mardu
5389 hg status -v -t mardu
5390
5390
5391 Returns 0 on success.
5391 Returns 0 on success.
5392
5392
5393 """
5393 """
5394
5394
5395 opts = pycompat.byteskwargs(opts)
5395 opts = pycompat.byteskwargs(opts)
5396 revs = opts.get('rev')
5396 revs = opts.get('rev')
5397 change = opts.get('change')
5397 change = opts.get('change')
5398 terse = opts.get('terse')
5398 terse = opts.get('terse')
5399 if terse is _NOTTERSE:
5399 if terse is _NOTTERSE:
5400 if revs:
5400 if revs:
5401 terse = ''
5401 terse = ''
5402 else:
5402 else:
5403 terse = ui.config('commands', 'status.terse')
5403 terse = ui.config('commands', 'status.terse')
5404
5404
5405 if revs and change:
5405 if revs and change:
5406 msg = _('cannot specify --rev and --change at the same time')
5406 msg = _('cannot specify --rev and --change at the same time')
5407 raise error.Abort(msg)
5407 raise error.Abort(msg)
5408 elif revs and terse:
5408 elif revs and terse:
5409 msg = _('cannot use --terse with --rev')
5409 msg = _('cannot use --terse with --rev')
5410 raise error.Abort(msg)
5410 raise error.Abort(msg)
5411 elif change:
5411 elif change:
5412 repo = scmutil.unhidehashlikerevs(repo, [change], 'nowarn')
5412 repo = scmutil.unhidehashlikerevs(repo, [change], 'nowarn')
5413 ctx2 = scmutil.revsingle(repo, change, None)
5413 ctx2 = scmutil.revsingle(repo, change, None)
5414 ctx1 = ctx2.p1()
5414 ctx1 = ctx2.p1()
5415 else:
5415 else:
5416 repo = scmutil.unhidehashlikerevs(repo, revs, 'nowarn')
5416 repo = scmutil.unhidehashlikerevs(repo, revs, 'nowarn')
5417 ctx1, ctx2 = scmutil.revpair(repo, revs)
5417 ctx1, ctx2 = scmutil.revpair(repo, revs)
5418
5418
5419 relative = None
5419 relative = None
5420 if pats:
5420 if pats:
5421 relative = True
5421 relative = True
5422 elif ui.hasconfig('commands', 'status.relative'):
5422 elif ui.hasconfig('commands', 'status.relative'):
5423 relative = ui.configbool('commands', 'status.relative')
5423 relative = ui.configbool('commands', 'status.relative')
5424 uipathfn = scmutil.getuipathfn(repo, relative)
5424 uipathfn = scmutil.getuipathfn(repo, relative)
5425
5425
5426 if opts.get('print0'):
5426 if opts.get('print0'):
5427 end = '\0'
5427 end = '\0'
5428 else:
5428 else:
5429 end = '\n'
5429 end = '\n'
5430 copy = {}
5430 copy = {}
5431 states = 'modified added removed deleted unknown ignored clean'.split()
5431 states = 'modified added removed deleted unknown ignored clean'.split()
5432 show = [k for k in states if opts.get(k)]
5432 show = [k for k in states if opts.get(k)]
5433 if opts.get('all'):
5433 if opts.get('all'):
5434 show += ui.quiet and (states[:4] + ['clean']) or states
5434 show += ui.quiet and (states[:4] + ['clean']) or states
5435
5435
5436 if not show:
5436 if not show:
5437 if ui.quiet:
5437 if ui.quiet:
5438 show = states[:4]
5438 show = states[:4]
5439 else:
5439 else:
5440 show = states[:5]
5440 show = states[:5]
5441
5441
5442 m = scmutil.match(ctx2, pats, opts)
5442 m = scmutil.match(ctx2, pats, opts)
5443 if terse:
5443 if terse:
5444 # we need to compute clean and unknown to terse
5444 # we need to compute clean and unknown to terse
5445 stat = repo.status(ctx1.node(), ctx2.node(), m,
5445 stat = repo.status(ctx1.node(), ctx2.node(), m,
5446 'ignored' in show or 'i' in terse,
5446 'ignored' in show or 'i' in terse,
5447 clean=True, unknown=True,
5447 clean=True, unknown=True,
5448 listsubrepos=opts.get('subrepos'))
5448 listsubrepos=opts.get('subrepos'))
5449
5449
5450 stat = cmdutil.tersedir(stat, terse)
5450 stat = cmdutil.tersedir(stat, terse)
5451 else:
5451 else:
5452 stat = repo.status(ctx1.node(), ctx2.node(), m,
5452 stat = repo.status(ctx1.node(), ctx2.node(), m,
5453 'ignored' in show, 'clean' in show,
5453 'ignored' in show, 'clean' in show,
5454 'unknown' in show, opts.get('subrepos'))
5454 'unknown' in show, opts.get('subrepos'))
5455
5455
5456 changestates = zip(states, pycompat.iterbytestr('MAR!?IC'), stat)
5456 changestates = zip(states, pycompat.iterbytestr('MAR!?IC'), stat)
5457
5457
5458 if (opts.get('all') or opts.get('copies')
5458 if (opts.get('all') or opts.get('copies')
5459 or ui.configbool('ui', 'statuscopies')) and not opts.get('no_status'):
5459 or ui.configbool('ui', 'statuscopies')) and not opts.get('no_status'):
5460 copy = copies.pathcopies(ctx1, ctx2, m)
5460 copy = copies.pathcopies(ctx1, ctx2, m)
5461
5461
5462 ui.pager('status')
5462 ui.pager('status')
5463 fm = ui.formatter('status', opts)
5463 fm = ui.formatter('status', opts)
5464 fmt = '%s' + end
5464 fmt = '%s' + end
5465 showchar = not opts.get('no_status')
5465 showchar = not opts.get('no_status')
5466
5466
5467 for state, char, files in changestates:
5467 for state, char, files in changestates:
5468 if state in show:
5468 if state in show:
5469 label = 'status.' + state
5469 label = 'status.' + state
5470 for f in files:
5470 for f in files:
5471 fm.startitem()
5471 fm.startitem()
5472 fm.context(ctx=ctx2)
5472 fm.context(ctx=ctx2)
5473 fm.data(path=f)
5473 fm.data(path=f)
5474 fm.condwrite(showchar, 'status', '%s ', char, label=label)
5474 fm.condwrite(showchar, 'status', '%s ', char, label=label)
5475 fm.plain(fmt % uipathfn(f), label=label)
5475 fm.plain(fmt % uipathfn(f), label=label)
5476 if f in copy:
5476 if f in copy:
5477 fm.data(source=copy[f])
5477 fm.data(source=copy[f])
5478 fm.plain((' %s' + end) % uipathfn(copy[f]),
5478 fm.plain((' %s' + end) % uipathfn(copy[f]),
5479 label='status.copied')
5479 label='status.copied')
5480
5480
5481 if ((ui.verbose or ui.configbool('commands', 'status.verbose'))
5481 if ((ui.verbose or ui.configbool('commands', 'status.verbose'))
5482 and not ui.plain()):
5482 and not ui.plain()):
5483 cmdutil.morestatus(repo, fm)
5483 cmdutil.morestatus(repo, fm)
5484 fm.end()
5484 fm.end()
5485
5485
5486 @command('summary|sum',
5486 @command('summary|sum',
5487 [('', 'remote', None, _('check for push and pull'))],
5487 [('', 'remote', None, _('check for push and pull'))],
5488 '[--remote]',
5488 '[--remote]',
5489 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
5489 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
5490 helpbasic=True,
5490 helpbasic=True,
5491 intents={INTENT_READONLY})
5491 intents={INTENT_READONLY})
5492 def summary(ui, repo, **opts):
5492 def summary(ui, repo, **opts):
5493 """summarize working directory state
5493 """summarize working directory state
5494
5494
5495 This generates a brief summary of the working directory state,
5495 This generates a brief summary of the working directory state,
5496 including parents, branch, commit status, phase and available updates.
5496 including parents, branch, commit status, phase and available updates.
5497
5497
5498 With the --remote option, this will check the default paths for
5498 With the --remote option, this will check the default paths for
5499 incoming and outgoing changes. This can be time-consuming.
5499 incoming and outgoing changes. This can be time-consuming.
5500
5500
5501 Returns 0 on success.
5501 Returns 0 on success.
5502 """
5502 """
5503
5503
5504 opts = pycompat.byteskwargs(opts)
5504 opts = pycompat.byteskwargs(opts)
5505 ui.pager('summary')
5505 ui.pager('summary')
5506 ctx = repo[None]
5506 ctx = repo[None]
5507 parents = ctx.parents()
5507 parents = ctx.parents()
5508 pnode = parents[0].node()
5508 pnode = parents[0].node()
5509 marks = []
5509 marks = []
5510
5510
5511 try:
5511 try:
5512 ms = mergemod.mergestate.read(repo)
5512 ms = mergemod.mergestate.read(repo)
5513 except error.UnsupportedMergeRecords as e:
5513 except error.UnsupportedMergeRecords as e:
5514 s = ' '.join(e.recordtypes)
5514 s = ' '.join(e.recordtypes)
5515 ui.warn(
5515 ui.warn(
5516 _('warning: merge state has unsupported record types: %s\n') % s)
5516 _('warning: merge state has unsupported record types: %s\n') % s)
5517 unresolved = []
5517 unresolved = []
5518 else:
5518 else:
5519 unresolved = list(ms.unresolved())
5519 unresolved = list(ms.unresolved())
5520
5520
5521 for p in parents:
5521 for p in parents:
5522 # label with log.changeset (instead of log.parent) since this
5522 # label with log.changeset (instead of log.parent) since this
5523 # shows a working directory parent *changeset*:
5523 # shows a working directory parent *changeset*:
5524 # i18n: column positioning for "hg summary"
5524 # i18n: column positioning for "hg summary"
5525 ui.write(_('parent: %d:%s ') % (p.rev(), p),
5525 ui.write(_('parent: %d:%s ') % (p.rev(), p),
5526 label=logcmdutil.changesetlabels(p))
5526 label=logcmdutil.changesetlabels(p))
5527 ui.write(' '.join(p.tags()), label='log.tag')
5527 ui.write(' '.join(p.tags()), label='log.tag')
5528 if p.bookmarks():
5528 if p.bookmarks():
5529 marks.extend(p.bookmarks())
5529 marks.extend(p.bookmarks())
5530 if p.rev() == -1:
5530 if p.rev() == -1:
5531 if not len(repo):
5531 if not len(repo):
5532 ui.write(_(' (empty repository)'))
5532 ui.write(_(' (empty repository)'))
5533 else:
5533 else:
5534 ui.write(_(' (no revision checked out)'))
5534 ui.write(_(' (no revision checked out)'))
5535 if p.obsolete():
5535 if p.obsolete():
5536 ui.write(_(' (obsolete)'))
5536 ui.write(_(' (obsolete)'))
5537 if p.isunstable():
5537 if p.isunstable():
5538 instabilities = (ui.label(instability, 'trouble.%s' % instability)
5538 instabilities = (ui.label(instability, 'trouble.%s' % instability)
5539 for instability in p.instabilities())
5539 for instability in p.instabilities())
5540 ui.write(' ('
5540 ui.write(' ('
5541 + ', '.join(instabilities)
5541 + ', '.join(instabilities)
5542 + ')')
5542 + ')')
5543 ui.write('\n')
5543 ui.write('\n')
5544 if p.description():
5544 if p.description():
5545 ui.status(' ' + p.description().splitlines()[0].strip() + '\n',
5545 ui.status(' ' + p.description().splitlines()[0].strip() + '\n',
5546 label='log.summary')
5546 label='log.summary')
5547
5547
5548 branch = ctx.branch()
5548 branch = ctx.branch()
5549 bheads = repo.branchheads(branch)
5549 bheads = repo.branchheads(branch)
5550 # i18n: column positioning for "hg summary"
5550 # i18n: column positioning for "hg summary"
5551 m = _('branch: %s\n') % branch
5551 m = _('branch: %s\n') % branch
5552 if branch != 'default':
5552 if branch != 'default':
5553 ui.write(m, label='log.branch')
5553 ui.write(m, label='log.branch')
5554 else:
5554 else:
5555 ui.status(m, label='log.branch')
5555 ui.status(m, label='log.branch')
5556
5556
5557 if marks:
5557 if marks:
5558 active = repo._activebookmark
5558 active = repo._activebookmark
5559 # i18n: column positioning for "hg summary"
5559 # i18n: column positioning for "hg summary"
5560 ui.write(_('bookmarks:'), label='log.bookmark')
5560 ui.write(_('bookmarks:'), label='log.bookmark')
5561 if active is not None:
5561 if active is not None:
5562 if active in marks:
5562 if active in marks:
5563 ui.write(' *' + active, label=bookmarks.activebookmarklabel)
5563 ui.write(' *' + active, label=bookmarks.activebookmarklabel)
5564 marks.remove(active)
5564 marks.remove(active)
5565 else:
5565 else:
5566 ui.write(' [%s]' % active, label=bookmarks.activebookmarklabel)
5566 ui.write(' [%s]' % active, label=bookmarks.activebookmarklabel)
5567 for m in marks:
5567 for m in marks:
5568 ui.write(' ' + m, label='log.bookmark')
5568 ui.write(' ' + m, label='log.bookmark')
5569 ui.write('\n', label='log.bookmark')
5569 ui.write('\n', label='log.bookmark')
5570
5570
5571 status = repo.status(unknown=True)
5571 status = repo.status(unknown=True)
5572
5572
5573 c = repo.dirstate.copies()
5573 c = repo.dirstate.copies()
5574 copied, renamed = [], []
5574 copied, renamed = [], []
5575 for d, s in c.iteritems():
5575 for d, s in c.iteritems():
5576 if s in status.removed:
5576 if s in status.removed:
5577 status.removed.remove(s)
5577 status.removed.remove(s)
5578 renamed.append(d)
5578 renamed.append(d)
5579 else:
5579 else:
5580 copied.append(d)
5580 copied.append(d)
5581 if d in status.added:
5581 if d in status.added:
5582 status.added.remove(d)
5582 status.added.remove(d)
5583
5583
5584 subs = [s for s in ctx.substate if ctx.sub(s).dirty()]
5584 subs = [s for s in ctx.substate if ctx.sub(s).dirty()]
5585
5585
5586 labels = [(ui.label(_('%d modified'), 'status.modified'), status.modified),
5586 labels = [(ui.label(_('%d modified'), 'status.modified'), status.modified),
5587 (ui.label(_('%d added'), 'status.added'), status.added),
5587 (ui.label(_('%d added'), 'status.added'), status.added),
5588 (ui.label(_('%d removed'), 'status.removed'), status.removed),
5588 (ui.label(_('%d removed'), 'status.removed'), status.removed),
5589 (ui.label(_('%d renamed'), 'status.copied'), renamed),
5589 (ui.label(_('%d renamed'), 'status.copied'), renamed),
5590 (ui.label(_('%d copied'), 'status.copied'), copied),
5590 (ui.label(_('%d copied'), 'status.copied'), copied),
5591 (ui.label(_('%d deleted'), 'status.deleted'), status.deleted),
5591 (ui.label(_('%d deleted'), 'status.deleted'), status.deleted),
5592 (ui.label(_('%d unknown'), 'status.unknown'), status.unknown),
5592 (ui.label(_('%d unknown'), 'status.unknown'), status.unknown),
5593 (ui.label(_('%d unresolved'), 'resolve.unresolved'), unresolved),
5593 (ui.label(_('%d unresolved'), 'resolve.unresolved'), unresolved),
5594 (ui.label(_('%d subrepos'), 'status.modified'), subs)]
5594 (ui.label(_('%d subrepos'), 'status.modified'), subs)]
5595 t = []
5595 t = []
5596 for l, s in labels:
5596 for l, s in labels:
5597 if s:
5597 if s:
5598 t.append(l % len(s))
5598 t.append(l % len(s))
5599
5599
5600 t = ', '.join(t)
5600 t = ', '.join(t)
5601 cleanworkdir = False
5601 cleanworkdir = False
5602
5602
5603 if repo.vfs.exists('graftstate'):
5603 if repo.vfs.exists('graftstate'):
5604 t += _(' (graft in progress)')
5604 t += _(' (graft in progress)')
5605 if repo.vfs.exists('updatestate'):
5605 if repo.vfs.exists('updatestate'):
5606 t += _(' (interrupted update)')
5606 t += _(' (interrupted update)')
5607 elif len(parents) > 1:
5607 elif len(parents) > 1:
5608 t += _(' (merge)')
5608 t += _(' (merge)')
5609 elif branch != parents[0].branch():
5609 elif branch != parents[0].branch():
5610 t += _(' (new branch)')
5610 t += _(' (new branch)')
5611 elif (parents[0].closesbranch() and
5611 elif (parents[0].closesbranch() and
5612 pnode in repo.branchheads(branch, closed=True)):
5612 pnode in repo.branchheads(branch, closed=True)):
5613 t += _(' (head closed)')
5613 t += _(' (head closed)')
5614 elif not (status.modified or status.added or status.removed or renamed or
5614 elif not (status.modified or status.added or status.removed or renamed or
5615 copied or subs):
5615 copied or subs):
5616 t += _(' (clean)')
5616 t += _(' (clean)')
5617 cleanworkdir = True
5617 cleanworkdir = True
5618 elif pnode not in bheads:
5618 elif pnode not in bheads:
5619 t += _(' (new branch head)')
5619 t += _(' (new branch head)')
5620
5620
5621 if parents:
5621 if parents:
5622 pendingphase = max(p.phase() for p in parents)
5622 pendingphase = max(p.phase() for p in parents)
5623 else:
5623 else:
5624 pendingphase = phases.public
5624 pendingphase = phases.public
5625
5625
5626 if pendingphase > phases.newcommitphase(ui):
5626 if pendingphase > phases.newcommitphase(ui):
5627 t += ' (%s)' % phases.phasenames[pendingphase]
5627 t += ' (%s)' % phases.phasenames[pendingphase]
5628
5628
5629 if cleanworkdir:
5629 if cleanworkdir:
5630 # i18n: column positioning for "hg summary"
5630 # i18n: column positioning for "hg summary"
5631 ui.status(_('commit: %s\n') % t.strip())
5631 ui.status(_('commit: %s\n') % t.strip())
5632 else:
5632 else:
5633 # i18n: column positioning for "hg summary"
5633 # i18n: column positioning for "hg summary"
5634 ui.write(_('commit: %s\n') % t.strip())
5634 ui.write(_('commit: %s\n') % t.strip())
5635
5635
5636 # all ancestors of branch heads - all ancestors of parent = new csets
5636 # all ancestors of branch heads - all ancestors of parent = new csets
5637 new = len(repo.changelog.findmissing([pctx.node() for pctx in parents],
5637 new = len(repo.changelog.findmissing([pctx.node() for pctx in parents],
5638 bheads))
5638 bheads))
5639
5639
5640 if new == 0:
5640 if new == 0:
5641 # i18n: column positioning for "hg summary"
5641 # i18n: column positioning for "hg summary"
5642 ui.status(_('update: (current)\n'))
5642 ui.status(_('update: (current)\n'))
5643 elif pnode not in bheads:
5643 elif pnode not in bheads:
5644 # i18n: column positioning for "hg summary"
5644 # i18n: column positioning for "hg summary"
5645 ui.write(_('update: %d new changesets (update)\n') % new)
5645 ui.write(_('update: %d new changesets (update)\n') % new)
5646 else:
5646 else:
5647 # i18n: column positioning for "hg summary"
5647 # i18n: column positioning for "hg summary"
5648 ui.write(_('update: %d new changesets, %d branch heads (merge)\n') %
5648 ui.write(_('update: %d new changesets, %d branch heads (merge)\n') %
5649 (new, len(bheads)))
5649 (new, len(bheads)))
5650
5650
5651 t = []
5651 t = []
5652 draft = len(repo.revs('draft()'))
5652 draft = len(repo.revs('draft()'))
5653 if draft:
5653 if draft:
5654 t.append(_('%d draft') % draft)
5654 t.append(_('%d draft') % draft)
5655 secret = len(repo.revs('secret()'))
5655 secret = len(repo.revs('secret()'))
5656 if secret:
5656 if secret:
5657 t.append(_('%d secret') % secret)
5657 t.append(_('%d secret') % secret)
5658
5658
5659 if draft or secret:
5659 if draft or secret:
5660 ui.status(_('phases: %s\n') % ', '.join(t))
5660 ui.status(_('phases: %s\n') % ', '.join(t))
5661
5661
5662 if obsolete.isenabled(repo, obsolete.createmarkersopt):
5662 if obsolete.isenabled(repo, obsolete.createmarkersopt):
5663 for trouble in ("orphan", "contentdivergent", "phasedivergent"):
5663 for trouble in ("orphan", "contentdivergent", "phasedivergent"):
5664 numtrouble = len(repo.revs(trouble + "()"))
5664 numtrouble = len(repo.revs(trouble + "()"))
5665 # We write all the possibilities to ease translation
5665 # We write all the possibilities to ease translation
5666 troublemsg = {
5666 troublemsg = {
5667 "orphan": _("orphan: %d changesets"),
5667 "orphan": _("orphan: %d changesets"),
5668 "contentdivergent": _("content-divergent: %d changesets"),
5668 "contentdivergent": _("content-divergent: %d changesets"),
5669 "phasedivergent": _("phase-divergent: %d changesets"),
5669 "phasedivergent": _("phase-divergent: %d changesets"),
5670 }
5670 }
5671 if numtrouble > 0:
5671 if numtrouble > 0:
5672 ui.status(troublemsg[trouble] % numtrouble + "\n")
5672 ui.status(troublemsg[trouble] % numtrouble + "\n")
5673
5673
5674 cmdutil.summaryhooks(ui, repo)
5674 cmdutil.summaryhooks(ui, repo)
5675
5675
5676 if opts.get('remote'):
5676 if opts.get('remote'):
5677 needsincoming, needsoutgoing = True, True
5677 needsincoming, needsoutgoing = True, True
5678 else:
5678 else:
5679 needsincoming, needsoutgoing = False, False
5679 needsincoming, needsoutgoing = False, False
5680 for i, o in cmdutil.summaryremotehooks(ui, repo, opts, None):
5680 for i, o in cmdutil.summaryremotehooks(ui, repo, opts, None):
5681 if i:
5681 if i:
5682 needsincoming = True
5682 needsincoming = True
5683 if o:
5683 if o:
5684 needsoutgoing = True
5684 needsoutgoing = True
5685 if not needsincoming and not needsoutgoing:
5685 if not needsincoming and not needsoutgoing:
5686 return
5686 return
5687
5687
5688 def getincoming():
5688 def getincoming():
5689 source, branches = hg.parseurl(ui.expandpath('default'))
5689 source, branches = hg.parseurl(ui.expandpath('default'))
5690 sbranch = branches[0]
5690 sbranch = branches[0]
5691 try:
5691 try:
5692 other = hg.peer(repo, {}, source)
5692 other = hg.peer(repo, {}, source)
5693 except error.RepoError:
5693 except error.RepoError:
5694 if opts.get('remote'):
5694 if opts.get('remote'):
5695 raise
5695 raise
5696 return source, sbranch, None, None, None
5696 return source, sbranch, None, None, None
5697 revs, checkout = hg.addbranchrevs(repo, other, branches, None)
5697 revs, checkout = hg.addbranchrevs(repo, other, branches, None)
5698 if revs:
5698 if revs:
5699 revs = [other.lookup(rev) for rev in revs]
5699 revs = [other.lookup(rev) for rev in revs]
5700 ui.debug('comparing with %s\n' % util.hidepassword(source))
5700 ui.debug('comparing with %s\n' % util.hidepassword(source))
5701 repo.ui.pushbuffer()
5701 repo.ui.pushbuffer()
5702 commoninc = discovery.findcommonincoming(repo, other, heads=revs)
5702 commoninc = discovery.findcommonincoming(repo, other, heads=revs)
5703 repo.ui.popbuffer()
5703 repo.ui.popbuffer()
5704 return source, sbranch, other, commoninc, commoninc[1]
5704 return source, sbranch, other, commoninc, commoninc[1]
5705
5705
5706 if needsincoming:
5706 if needsincoming:
5707 source, sbranch, sother, commoninc, incoming = getincoming()
5707 source, sbranch, sother, commoninc, incoming = getincoming()
5708 else:
5708 else:
5709 source = sbranch = sother = commoninc = incoming = None
5709 source = sbranch = sother = commoninc = incoming = None
5710
5710
5711 def getoutgoing():
5711 def getoutgoing():
5712 dest, branches = hg.parseurl(ui.expandpath('default-push', 'default'))
5712 dest, branches = hg.parseurl(ui.expandpath('default-push', 'default'))
5713 dbranch = branches[0]
5713 dbranch = branches[0]
5714 revs, checkout = hg.addbranchrevs(repo, repo, branches, None)
5714 revs, checkout = hg.addbranchrevs(repo, repo, branches, None)
5715 if source != dest:
5715 if source != dest:
5716 try:
5716 try:
5717 dother = hg.peer(repo, {}, dest)
5717 dother = hg.peer(repo, {}, dest)
5718 except error.RepoError:
5718 except error.RepoError:
5719 if opts.get('remote'):
5719 if opts.get('remote'):
5720 raise
5720 raise
5721 return dest, dbranch, None, None
5721 return dest, dbranch, None, None
5722 ui.debug('comparing with %s\n' % util.hidepassword(dest))
5722 ui.debug('comparing with %s\n' % util.hidepassword(dest))
5723 elif sother is None:
5723 elif sother is None:
5724 # there is no explicit destination peer, but source one is invalid
5724 # there is no explicit destination peer, but source one is invalid
5725 return dest, dbranch, None, None
5725 return dest, dbranch, None, None
5726 else:
5726 else:
5727 dother = sother
5727 dother = sother
5728 if (source != dest or (sbranch is not None and sbranch != dbranch)):
5728 if (source != dest or (sbranch is not None and sbranch != dbranch)):
5729 common = None
5729 common = None
5730 else:
5730 else:
5731 common = commoninc
5731 common = commoninc
5732 if revs:
5732 if revs:
5733 revs = [repo.lookup(rev) for rev in revs]
5733 revs = [repo.lookup(rev) for rev in revs]
5734 repo.ui.pushbuffer()
5734 repo.ui.pushbuffer()
5735 outgoing = discovery.findcommonoutgoing(repo, dother, onlyheads=revs,
5735 outgoing = discovery.findcommonoutgoing(repo, dother, onlyheads=revs,
5736 commoninc=common)
5736 commoninc=common)
5737 repo.ui.popbuffer()
5737 repo.ui.popbuffer()
5738 return dest, dbranch, dother, outgoing
5738 return dest, dbranch, dother, outgoing
5739
5739
5740 if needsoutgoing:
5740 if needsoutgoing:
5741 dest, dbranch, dother, outgoing = getoutgoing()
5741 dest, dbranch, dother, outgoing = getoutgoing()
5742 else:
5742 else:
5743 dest = dbranch = dother = outgoing = None
5743 dest = dbranch = dother = outgoing = None
5744
5744
5745 if opts.get('remote'):
5745 if opts.get('remote'):
5746 t = []
5746 t = []
5747 if incoming:
5747 if incoming:
5748 t.append(_('1 or more incoming'))
5748 t.append(_('1 or more incoming'))
5749 o = outgoing.missing
5749 o = outgoing.missing
5750 if o:
5750 if o:
5751 t.append(_('%d outgoing') % len(o))
5751 t.append(_('%d outgoing') % len(o))
5752 other = dother or sother
5752 other = dother or sother
5753 if 'bookmarks' in other.listkeys('namespaces'):
5753 if 'bookmarks' in other.listkeys('namespaces'):
5754 counts = bookmarks.summary(repo, other)
5754 counts = bookmarks.summary(repo, other)
5755 if counts[0] > 0:
5755 if counts[0] > 0:
5756 t.append(_('%d incoming bookmarks') % counts[0])
5756 t.append(_('%d incoming bookmarks') % counts[0])
5757 if counts[1] > 0:
5757 if counts[1] > 0:
5758 t.append(_('%d outgoing bookmarks') % counts[1])
5758 t.append(_('%d outgoing bookmarks') % counts[1])
5759
5759
5760 if t:
5760 if t:
5761 # i18n: column positioning for "hg summary"
5761 # i18n: column positioning for "hg summary"
5762 ui.write(_('remote: %s\n') % (', '.join(t)))
5762 ui.write(_('remote: %s\n') % (', '.join(t)))
5763 else:
5763 else:
5764 # i18n: column positioning for "hg summary"
5764 # i18n: column positioning for "hg summary"
5765 ui.status(_('remote: (synced)\n'))
5765 ui.status(_('remote: (synced)\n'))
5766
5766
5767 cmdutil.summaryremotehooks(ui, repo, opts,
5767 cmdutil.summaryremotehooks(ui, repo, opts,
5768 ((source, sbranch, sother, commoninc),
5768 ((source, sbranch, sother, commoninc),
5769 (dest, dbranch, dother, outgoing)))
5769 (dest, dbranch, dother, outgoing)))
5770
5770
5771 @command('tag',
5771 @command('tag',
5772 [('f', 'force', None, _('force tag')),
5772 [('f', 'force', None, _('force tag')),
5773 ('l', 'local', None, _('make the tag local')),
5773 ('l', 'local', None, _('make the tag local')),
5774 ('r', 'rev', '', _('revision to tag'), _('REV')),
5774 ('r', 'rev', '', _('revision to tag'), _('REV')),
5775 ('', 'remove', None, _('remove a tag')),
5775 ('', 'remove', None, _('remove a tag')),
5776 # -l/--local is already there, commitopts cannot be used
5776 # -l/--local is already there, commitopts cannot be used
5777 ('e', 'edit', None, _('invoke editor on commit messages')),
5777 ('e', 'edit', None, _('invoke editor on commit messages')),
5778 ('m', 'message', '', _('use text as commit message'), _('TEXT')),
5778 ('m', 'message', '', _('use text as commit message'), _('TEXT')),
5779 ] + commitopts2,
5779 ] + commitopts2,
5780 _('[-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...'),
5780 _('[-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...'),
5781 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
5781 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION)
5782 def tag(ui, repo, name1, *names, **opts):
5782 def tag(ui, repo, name1, *names, **opts):
5783 """add one or more tags for the current or given revision
5783 """add one or more tags for the current or given revision
5784
5784
5785 Name a particular revision using <name>.
5785 Name a particular revision using <name>.
5786
5786
5787 Tags are used to name particular revisions of the repository and are
5787 Tags are used to name particular revisions of the repository and are
5788 very useful to compare different revisions, to go back to significant
5788 very useful to compare different revisions, to go back to significant
5789 earlier versions or to mark branch points as releases, etc. Changing
5789 earlier versions or to mark branch points as releases, etc. Changing
5790 an existing tag is normally disallowed; use -f/--force to override.
5790 an existing tag is normally disallowed; use -f/--force to override.
5791
5791
5792 If no revision is given, the parent of the working directory is
5792 If no revision is given, the parent of the working directory is
5793 used.
5793 used.
5794
5794
5795 To facilitate version control, distribution, and merging of tags,
5795 To facilitate version control, distribution, and merging of tags,
5796 they are stored as a file named ".hgtags" which is managed similarly
5796 they are stored as a file named ".hgtags" which is managed similarly
5797 to other project files and can be hand-edited if necessary. This
5797 to other project files and can be hand-edited if necessary. This
5798 also means that tagging creates a new commit. The file
5798 also means that tagging creates a new commit. The file
5799 ".hg/localtags" is used for local tags (not shared among
5799 ".hg/localtags" is used for local tags (not shared among
5800 repositories).
5800 repositories).
5801
5801
5802 Tag commits are usually made at the head of a branch. If the parent
5802 Tag commits are usually made at the head of a branch. If the parent
5803 of the working directory is not a branch head, :hg:`tag` aborts; use
5803 of the working directory is not a branch head, :hg:`tag` aborts; use
5804 -f/--force to force the tag commit to be based on a non-head
5804 -f/--force to force the tag commit to be based on a non-head
5805 changeset.
5805 changeset.
5806
5806
5807 See :hg:`help dates` for a list of formats valid for -d/--date.
5807 See :hg:`help dates` for a list of formats valid for -d/--date.
5808
5808
5809 Since tag names have priority over branch names during revision
5809 Since tag names have priority over branch names during revision
5810 lookup, using an existing branch name as a tag name is discouraged.
5810 lookup, using an existing branch name as a tag name is discouraged.
5811
5811
5812 Returns 0 on success.
5812 Returns 0 on success.
5813 """
5813 """
5814 opts = pycompat.byteskwargs(opts)
5814 opts = pycompat.byteskwargs(opts)
5815 with repo.wlock(), repo.lock():
5815 with repo.wlock(), repo.lock():
5816 rev_ = "."
5816 rev_ = "."
5817 names = [t.strip() for t in (name1,) + names]
5817 names = [t.strip() for t in (name1,) + names]
5818 if len(names) != len(set(names)):
5818 if len(names) != len(set(names)):
5819 raise error.Abort(_('tag names must be unique'))
5819 raise error.Abort(_('tag names must be unique'))
5820 for n in names:
5820 for n in names:
5821 scmutil.checknewlabel(repo, n, 'tag')
5821 scmutil.checknewlabel(repo, n, 'tag')
5822 if not n:
5822 if not n:
5823 raise error.Abort(_('tag names cannot consist entirely of '
5823 raise error.Abort(_('tag names cannot consist entirely of '
5824 'whitespace'))
5824 'whitespace'))
5825 if opts.get('rev') and opts.get('remove'):
5825 if opts.get('rev') and opts.get('remove'):
5826 raise error.Abort(_("--rev and --remove are incompatible"))
5826 raise error.Abort(_("--rev and --remove are incompatible"))
5827 if opts.get('rev'):
5827 if opts.get('rev'):
5828 rev_ = opts['rev']
5828 rev_ = opts['rev']
5829 message = opts.get('message')
5829 message = opts.get('message')
5830 if opts.get('remove'):
5830 if opts.get('remove'):
5831 if opts.get('local'):
5831 if opts.get('local'):
5832 expectedtype = 'local'
5832 expectedtype = 'local'
5833 else:
5833 else:
5834 expectedtype = 'global'
5834 expectedtype = 'global'
5835
5835
5836 for n in names:
5836 for n in names:
5837 if repo.tagtype(n) == 'global':
5837 if repo.tagtype(n) == 'global':
5838 alltags = tagsmod.findglobaltags(ui, repo)
5838 alltags = tagsmod.findglobaltags(ui, repo)
5839 if alltags[n][0] == nullid:
5839 if alltags[n][0] == nullid:
5840 raise error.Abort(_("tag '%s' is already removed") % n)
5840 raise error.Abort(_("tag '%s' is already removed") % n)
5841 if not repo.tagtype(n):
5841 if not repo.tagtype(n):
5842 raise error.Abort(_("tag '%s' does not exist") % n)
5842 raise error.Abort(_("tag '%s' does not exist") % n)
5843 if repo.tagtype(n) != expectedtype:
5843 if repo.tagtype(n) != expectedtype:
5844 if expectedtype == 'global':
5844 if expectedtype == 'global':
5845 raise error.Abort(_("tag '%s' is not a global tag") % n)
5845 raise error.Abort(_("tag '%s' is not a global tag") % n)
5846 else:
5846 else:
5847 raise error.Abort(_("tag '%s' is not a local tag") % n)
5847 raise error.Abort(_("tag '%s' is not a local tag") % n)
5848 rev_ = 'null'
5848 rev_ = 'null'
5849 if not message:
5849 if not message:
5850 # we don't translate commit messages
5850 # we don't translate commit messages
5851 message = 'Removed tag %s' % ', '.join(names)
5851 message = 'Removed tag %s' % ', '.join(names)
5852 elif not opts.get('force'):
5852 elif not opts.get('force'):
5853 for n in names:
5853 for n in names:
5854 if n in repo.tags():
5854 if n in repo.tags():
5855 raise error.Abort(_("tag '%s' already exists "
5855 raise error.Abort(_("tag '%s' already exists "
5856 "(use -f to force)") % n)
5856 "(use -f to force)") % n)
5857 if not opts.get('local'):
5857 if not opts.get('local'):
5858 p1, p2 = repo.dirstate.parents()
5858 p1, p2 = repo.dirstate.parents()
5859 if p2 != nullid:
5859 if p2 != nullid:
5860 raise error.Abort(_('uncommitted merge'))
5860 raise error.Abort(_('uncommitted merge'))
5861 bheads = repo.branchheads()
5861 bheads = repo.branchheads()
5862 if not opts.get('force') and bheads and p1 not in bheads:
5862 if not opts.get('force') and bheads and p1 not in bheads:
5863 raise error.Abort(_('working directory is not at a branch head '
5863 raise error.Abort(_('working directory is not at a branch head '
5864 '(use -f to force)'))
5864 '(use -f to force)'))
5865 node = scmutil.revsingle(repo, rev_).node()
5865 node = scmutil.revsingle(repo, rev_).node()
5866
5866
5867 if not message:
5867 if not message:
5868 # we don't translate commit messages
5868 # we don't translate commit messages
5869 message = ('Added tag %s for changeset %s' %
5869 message = ('Added tag %s for changeset %s' %
5870 (', '.join(names), short(node)))
5870 (', '.join(names), short(node)))
5871
5871
5872 date = opts.get('date')
5872 date = opts.get('date')
5873 if date:
5873 if date:
5874 date = dateutil.parsedate(date)
5874 date = dateutil.parsedate(date)
5875
5875
5876 if opts.get('remove'):
5876 if opts.get('remove'):
5877 editform = 'tag.remove'
5877 editform = 'tag.remove'
5878 else:
5878 else:
5879 editform = 'tag.add'
5879 editform = 'tag.add'
5880 editor = cmdutil.getcommiteditor(editform=editform,
5880 editor = cmdutil.getcommiteditor(editform=editform,
5881 **pycompat.strkwargs(opts))
5881 **pycompat.strkwargs(opts))
5882
5882
5883 # don't allow tagging the null rev
5883 # don't allow tagging the null rev
5884 if (not opts.get('remove') and
5884 if (not opts.get('remove') and
5885 scmutil.revsingle(repo, rev_).rev() == nullrev):
5885 scmutil.revsingle(repo, rev_).rev() == nullrev):
5886 raise error.Abort(_("cannot tag null revision"))
5886 raise error.Abort(_("cannot tag null revision"))
5887
5887
5888 tagsmod.tag(repo, names, node, message, opts.get('local'),
5888 tagsmod.tag(repo, names, node, message, opts.get('local'),
5889 opts.get('user'), date, editor=editor)
5889 opts.get('user'), date, editor=editor)
5890
5890
5891 @command(
5891 @command(
5892 'tags', formatteropts, '',
5892 'tags', formatteropts, '',
5893 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
5893 helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
5894 intents={INTENT_READONLY})
5894 intents={INTENT_READONLY})
5895 def tags(ui, repo, **opts):
5895 def tags(ui, repo, **opts):
5896 """list repository tags
5896 """list repository tags
5897
5897
5898 This lists both regular and local tags. When the -v/--verbose
5898 This lists both regular and local tags. When the -v/--verbose
5899 switch is used, a third column "local" is printed for local tags.
5899 switch is used, a third column "local" is printed for local tags.
5900 When the -q/--quiet switch is used, only the tag name is printed.
5900 When the -q/--quiet switch is used, only the tag name is printed.
5901
5901
5902 .. container:: verbose
5902 .. container:: verbose
5903
5903
5904 Template:
5904 Template:
5905
5905
5906 The following keywords are supported in addition to the common template
5906 The following keywords are supported in addition to the common template
5907 keywords and functions such as ``{tag}``. See also
5907 keywords and functions such as ``{tag}``. See also
5908 :hg:`help templates`.
5908 :hg:`help templates`.
5909
5909
5910 :type: String. ``local`` for local tags.
5910 :type: String. ``local`` for local tags.
5911
5911
5912 Returns 0 on success.
5912 Returns 0 on success.
5913 """
5913 """
5914
5914
5915 opts = pycompat.byteskwargs(opts)
5915 opts = pycompat.byteskwargs(opts)
5916 ui.pager('tags')
5916 ui.pager('tags')
5917 fm = ui.formatter('tags', opts)
5917 fm = ui.formatter('tags', opts)
5918 hexfunc = fm.hexfunc
5918 hexfunc = fm.hexfunc
5919
5919
5920 for t, n in reversed(repo.tagslist()):
5920 for t, n in reversed(repo.tagslist()):
5921 hn = hexfunc(n)
5921 hn = hexfunc(n)
5922 label = 'tags.normal'
5922 label = 'tags.normal'
5923 tagtype = ''
5923 tagtype = ''
5924 if repo.tagtype(t) == 'local':
5924 if repo.tagtype(t) == 'local':
5925 label = 'tags.local'
5925 label = 'tags.local'
5926 tagtype = 'local'
5926 tagtype = 'local'
5927
5927
5928 fm.startitem()
5928 fm.startitem()
5929 fm.context(repo=repo)
5929 fm.context(repo=repo)
5930 fm.write('tag', '%s', t, label=label)
5930 fm.write('tag', '%s', t, label=label)
5931 fmt = " " * (30 - encoding.colwidth(t)) + ' %5d:%s'
5931 fmt = " " * (30 - encoding.colwidth(t)) + ' %5d:%s'
5932 fm.condwrite(not ui.quiet, 'rev node', fmt,
5932 fm.condwrite(not ui.quiet, 'rev node', fmt,
5933 repo.changelog.rev(n), hn, label=label)
5933 repo.changelog.rev(n), hn, label=label)
5934 fm.condwrite(ui.verbose and tagtype, 'type', ' %s',
5934 fm.condwrite(ui.verbose and tagtype, 'type', ' %s',
5935 tagtype, label=label)
5935 tagtype, label=label)
5936 fm.plain('\n')
5936 fm.plain('\n')
5937 fm.end()
5937 fm.end()
5938
5938
5939 @command('tip',
5939 @command('tip',
5940 [('p', 'patch', None, _('show patch')),
5940 [('p', 'patch', None, _('show patch')),
5941 ('g', 'git', None, _('use git extended diff format')),
5941 ('g', 'git', None, _('use git extended diff format')),
5942 ] + templateopts,
5942 ] + templateopts,
5943 _('[-p] [-g]'),
5943 _('[-p] [-g]'),
5944 helpcategory=command.CATEGORY_CHANGE_NAVIGATION)
5944 helpcategory=command.CATEGORY_CHANGE_NAVIGATION)
5945 def tip(ui, repo, **opts):
5945 def tip(ui, repo, **opts):
5946 """show the tip revision (DEPRECATED)
5946 """show the tip revision (DEPRECATED)
5947
5947
5948 The tip revision (usually just called the tip) is the changeset
5948 The tip revision (usually just called the tip) is the changeset
5949 most recently added to the repository (and therefore the most
5949 most recently added to the repository (and therefore the most
5950 recently changed head).
5950 recently changed head).
5951
5951
5952 If you have just made a commit, that commit will be the tip. If
5952 If you have just made a commit, that commit will be the tip. If
5953 you have just pulled changes from another repository, the tip of
5953 you have just pulled changes from another repository, the tip of
5954 that repository becomes the current tip. The "tip" tag is special
5954 that repository becomes the current tip. The "tip" tag is special
5955 and cannot be renamed or assigned to a different changeset.
5955 and cannot be renamed or assigned to a different changeset.
5956
5956
5957 This command is deprecated, please use :hg:`heads` instead.
5957 This command is deprecated, please use :hg:`heads` instead.
5958
5958
5959 Returns 0 on success.
5959 Returns 0 on success.
5960 """
5960 """
5961 opts = pycompat.byteskwargs(opts)
5961 opts = pycompat.byteskwargs(opts)
5962 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
5962 displayer = logcmdutil.changesetdisplayer(ui, repo, opts)
5963 displayer.show(repo['tip'])
5963 displayer.show(repo['tip'])
5964 displayer.close()
5964 displayer.close()
5965
5965
5966 @command('unbundle',
5966 @command('unbundle',
5967 [('u', 'update', None,
5967 [('u', 'update', None,
5968 _('update to new branch head if changesets were unbundled'))],
5968 _('update to new branch head if changesets were unbundled'))],
5969 _('[-u] FILE...'),
5969 _('[-u] FILE...'),
5970 helpcategory=command.CATEGORY_IMPORT_EXPORT)
5970 helpcategory=command.CATEGORY_IMPORT_EXPORT)
5971 def unbundle(ui, repo, fname1, *fnames, **opts):
5971 def unbundle(ui, repo, fname1, *fnames, **opts):
5972 """apply one or more bundle files
5972 """apply one or more bundle files
5973
5973
5974 Apply one or more bundle files generated by :hg:`bundle`.
5974 Apply one or more bundle files generated by :hg:`bundle`.
5975
5975
5976 Returns 0 on success, 1 if an update has unresolved files.
5976 Returns 0 on success, 1 if an update has unresolved files.
5977 """
5977 """
5978 fnames = (fname1,) + fnames
5978 fnames = (fname1,) + fnames
5979
5979
5980 with repo.lock():
5980 with repo.lock():
5981 for fname in fnames:
5981 for fname in fnames:
5982 f = hg.openpath(ui, fname)
5982 f = hg.openpath(ui, fname)
5983 gen = exchange.readbundle(ui, f, fname)
5983 gen = exchange.readbundle(ui, f, fname)
5984 if isinstance(gen, streamclone.streamcloneapplier):
5984 if isinstance(gen, streamclone.streamcloneapplier):
5985 raise error.Abort(
5985 raise error.Abort(
5986 _('packed bundles cannot be applied with '
5986 _('packed bundles cannot be applied with '
5987 '"hg unbundle"'),
5987 '"hg unbundle"'),
5988 hint=_('use "hg debugapplystreamclonebundle"'))
5988 hint=_('use "hg debugapplystreamclonebundle"'))
5989 url = 'bundle:' + fname
5989 url = 'bundle:' + fname
5990 try:
5990 try:
5991 txnname = 'unbundle'
5991 txnname = 'unbundle'
5992 if not isinstance(gen, bundle2.unbundle20):
5992 if not isinstance(gen, bundle2.unbundle20):
5993 txnname = 'unbundle\n%s' % util.hidepassword(url)
5993 txnname = 'unbundle\n%s' % util.hidepassword(url)
5994 with repo.transaction(txnname) as tr:
5994 with repo.transaction(txnname) as tr:
5995 op = bundle2.applybundle(repo, gen, tr, source='unbundle',
5995 op = bundle2.applybundle(repo, gen, tr, source='unbundle',
5996 url=url)
5996 url=url)
5997 except error.BundleUnknownFeatureError as exc:
5997 except error.BundleUnknownFeatureError as exc:
5998 raise error.Abort(
5998 raise error.Abort(
5999 _('%s: unknown bundle feature, %s') % (fname, exc),
5999 _('%s: unknown bundle feature, %s') % (fname, exc),
6000 hint=_("see https://mercurial-scm.org/"
6000 hint=_("see https://mercurial-scm.org/"
6001 "wiki/BundleFeature for more "
6001 "wiki/BundleFeature for more "
6002 "information"))
6002 "information"))
6003 modheads = bundle2.combinechangegroupresults(op)
6003 modheads = bundle2.combinechangegroupresults(op)
6004
6004
6005 return postincoming(ui, repo, modheads, opts.get(r'update'), None, None)
6005 return postincoming(ui, repo, modheads, opts.get(r'update'), None, None)
6006
6006
6007 @command('update|up|checkout|co',
6007 @command('update|up|checkout|co',
6008 [('C', 'clean', None, _('discard uncommitted changes (no backup)')),
6008 [('C', 'clean', None, _('discard uncommitted changes (no backup)')),
6009 ('c', 'check', None, _('require clean working directory')),
6009 ('c', 'check', None, _('require clean working directory')),
6010 ('m', 'merge', None, _('merge uncommitted changes')),
6010 ('m', 'merge', None, _('merge uncommitted changes')),
6011 ('d', 'date', '', _('tipmost revision matching date'), _('DATE')),
6011 ('d', 'date', '', _('tipmost revision matching date'), _('DATE')),
6012 ('r', 'rev', '', _('revision'), _('REV'))
6012 ('r', 'rev', '', _('revision'), _('REV'))
6013 ] + mergetoolopts,
6013 ] + mergetoolopts,
6014 _('[-C|-c|-m] [-d DATE] [[-r] REV]'),
6014 _('[-C|-c|-m] [-d DATE] [[-r] REV]'),
6015 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
6015 helpcategory=command.CATEGORY_WORKING_DIRECTORY,
6016 helpbasic=True)
6016 helpbasic=True)
6017 def update(ui, repo, node=None, **opts):
6017 def update(ui, repo, node=None, **opts):
6018 """update working directory (or switch revisions)
6018 """update working directory (or switch revisions)
6019
6019
6020 Update the repository's working directory to the specified
6020 Update the repository's working directory to the specified
6021 changeset. If no changeset is specified, update to the tip of the
6021 changeset. If no changeset is specified, update to the tip of the
6022 current named branch and move the active bookmark (see :hg:`help
6022 current named branch and move the active bookmark (see :hg:`help
6023 bookmarks`).
6023 bookmarks`).
6024
6024
6025 Update sets the working directory's parent revision to the specified
6025 Update sets the working directory's parent revision to the specified
6026 changeset (see :hg:`help parents`).
6026 changeset (see :hg:`help parents`).
6027
6027
6028 If the changeset is not a descendant or ancestor of the working
6028 If the changeset is not a descendant or ancestor of the working
6029 directory's parent and there are uncommitted changes, the update is
6029 directory's parent and there are uncommitted changes, the update is
6030 aborted. With the -c/--check option, the working directory is checked
6030 aborted. With the -c/--check option, the working directory is checked
6031 for uncommitted changes; if none are found, the working directory is
6031 for uncommitted changes; if none are found, the working directory is
6032 updated to the specified changeset.
6032 updated to the specified changeset.
6033
6033
6034 .. container:: verbose
6034 .. container:: verbose
6035
6035
6036 The -C/--clean, -c/--check, and -m/--merge options control what
6036 The -C/--clean, -c/--check, and -m/--merge options control what
6037 happens if the working directory contains uncommitted changes.
6037 happens if the working directory contains uncommitted changes.
6038 At most of one of them can be specified.
6038 At most of one of them can be specified.
6039
6039
6040 1. If no option is specified, and if
6040 1. If no option is specified, and if
6041 the requested changeset is an ancestor or descendant of
6041 the requested changeset is an ancestor or descendant of
6042 the working directory's parent, the uncommitted changes
6042 the working directory's parent, the uncommitted changes
6043 are merged into the requested changeset and the merged
6043 are merged into the requested changeset and the merged
6044 result is left uncommitted. If the requested changeset is
6044 result is left uncommitted. If the requested changeset is
6045 not an ancestor or descendant (that is, it is on another
6045 not an ancestor or descendant (that is, it is on another
6046 branch), the update is aborted and the uncommitted changes
6046 branch), the update is aborted and the uncommitted changes
6047 are preserved.
6047 are preserved.
6048
6048
6049 2. With the -m/--merge option, the update is allowed even if the
6049 2. With the -m/--merge option, the update is allowed even if the
6050 requested changeset is not an ancestor or descendant of
6050 requested changeset is not an ancestor or descendant of
6051 the working directory's parent.
6051 the working directory's parent.
6052
6052
6053 3. With the -c/--check option, the update is aborted and the
6053 3. With the -c/--check option, the update is aborted and the
6054 uncommitted changes are preserved.
6054 uncommitted changes are preserved.
6055
6055
6056 4. With the -C/--clean option, uncommitted changes are discarded and
6056 4. With the -C/--clean option, uncommitted changes are discarded and
6057 the working directory is updated to the requested changeset.
6057 the working directory is updated to the requested changeset.
6058
6058
6059 To cancel an uncommitted merge (and lose your changes), use
6059 To cancel an uncommitted merge (and lose your changes), use
6060 :hg:`merge --abort`.
6060 :hg:`merge --abort`.
6061
6061
6062 Use null as the changeset to remove the working directory (like
6062 Use null as the changeset to remove the working directory (like
6063 :hg:`clone -U`).
6063 :hg:`clone -U`).
6064
6064
6065 If you want to revert just one file to an older revision, use
6065 If you want to revert just one file to an older revision, use
6066 :hg:`revert [-r REV] NAME`.
6066 :hg:`revert [-r REV] NAME`.
6067
6067
6068 See :hg:`help dates` for a list of formats valid for -d/--date.
6068 See :hg:`help dates` for a list of formats valid for -d/--date.
6069
6069
6070 Returns 0 on success, 1 if there are unresolved files.
6070 Returns 0 on success, 1 if there are unresolved files.
6071 """
6071 """
6072 rev = opts.get(r'rev')
6072 rev = opts.get(r'rev')
6073 date = opts.get(r'date')
6073 date = opts.get(r'date')
6074 clean = opts.get(r'clean')
6074 clean = opts.get(r'clean')
6075 check = opts.get(r'check')
6075 check = opts.get(r'check')
6076 merge = opts.get(r'merge')
6076 merge = opts.get(r'merge')
6077 if rev and node:
6077 if rev and node:
6078 raise error.Abort(_("please specify just one revision"))
6078 raise error.Abort(_("please specify just one revision"))
6079
6079
6080 if ui.configbool('commands', 'update.requiredest'):
6080 if ui.configbool('commands', 'update.requiredest'):
6081 if not node and not rev and not date:
6081 if not node and not rev and not date:
6082 raise error.Abort(_('you must specify a destination'),
6082 raise error.Abort(_('you must specify a destination'),
6083 hint=_('for example: hg update ".::"'))
6083 hint=_('for example: hg update ".::"'))
6084
6084
6085 if rev is None or rev == '':
6085 if rev is None or rev == '':
6086 rev = node
6086 rev = node
6087
6087
6088 if date and rev is not None:
6088 if date and rev is not None:
6089 raise error.Abort(_("you can't specify a revision and a date"))
6089 raise error.Abort(_("you can't specify a revision and a date"))
6090
6090
6091 if len([x for x in (clean, check, merge) if x]) > 1:
6091 if len([x for x in (clean, check, merge) if x]) > 1:
6092 raise error.Abort(_("can only specify one of -C/--clean, -c/--check, "
6092 raise error.Abort(_("can only specify one of -C/--clean, -c/--check, "
6093 "or -m/--merge"))
6093 "or -m/--merge"))
6094
6094
6095 updatecheck = None
6095 updatecheck = None
6096 if check:
6096 if check:
6097 updatecheck = 'abort'
6097 updatecheck = 'abort'
6098 elif merge:
6098 elif merge:
6099 updatecheck = 'none'
6099 updatecheck = 'none'
6100
6100
6101 with repo.wlock():
6101 with repo.wlock():
6102 cmdutil.clearunfinished(repo)
6102 cmdutil.clearunfinished(repo)
6103
6103
6104 if date:
6104 if date:
6105 rev = cmdutil.finddate(ui, repo, date)
6105 rev = cmdutil.finddate(ui, repo, date)
6106
6106
6107 # if we defined a bookmark, we have to remember the original name
6107 # if we defined a bookmark, we have to remember the original name
6108 brev = rev
6108 brev = rev
6109 if rev:
6109 if rev:
6110 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
6110 repo = scmutil.unhidehashlikerevs(repo, [rev], 'nowarn')
6111 ctx = scmutil.revsingle(repo, rev, default=None)
6111 ctx = scmutil.revsingle(repo, rev, default=None)
6112 rev = ctx.rev()
6112 rev = ctx.rev()
6113 hidden = ctx.hidden()
6113 hidden = ctx.hidden()
6114 overrides = {('ui', 'forcemerge'): opts.get(r'tool', '')}
6114 overrides = {('ui', 'forcemerge'): opts.get(r'tool', '')}
6115 with ui.configoverride(overrides, 'update'):
6115 with ui.configoverride(overrides, 'update'):
6116 ret = hg.updatetotally(ui, repo, rev, brev, clean=clean,
6116 ret = hg.updatetotally(ui, repo, rev, brev, clean=clean,
6117 updatecheck=updatecheck)
6117 updatecheck=updatecheck)
6118 if hidden:
6118 if hidden:
6119 ctxstr = ctx.hex()[:12]
6119 ctxstr = ctx.hex()[:12]
6120 ui.warn(_("updated to hidden changeset %s\n") % ctxstr)
6120 ui.warn(_("updated to hidden changeset %s\n") % ctxstr)
6121
6121
6122 if ctx.obsolete():
6122 if ctx.obsolete():
6123 obsfatemsg = obsutil._getfilteredreason(repo, ctxstr, ctx)
6123 obsfatemsg = obsutil._getfilteredreason(repo, ctxstr, ctx)
6124 ui.warn("(%s)\n" % obsfatemsg)
6124 ui.warn("(%s)\n" % obsfatemsg)
6125 return ret
6125 return ret
6126
6126
6127 @command('verify', [], helpcategory=command.CATEGORY_MAINTENANCE)
6127 @command('verify', [], helpcategory=command.CATEGORY_MAINTENANCE)
6128 def verify(ui, repo):
6128 def verify(ui, repo):
6129 """verify the integrity of the repository
6129 """verify the integrity of the repository
6130
6130
6131 Verify the integrity of the current repository.
6131 Verify the integrity of the current repository.
6132
6132
6133 This will perform an extensive check of the repository's
6133 This will perform an extensive check of the repository's
6134 integrity, validating the hashes and checksums of each entry in
6134 integrity, validating the hashes and checksums of each entry in
6135 the changelog, manifest, and tracked files, as well as the
6135 the changelog, manifest, and tracked files, as well as the
6136 integrity of their crosslinks and indices.
6136 integrity of their crosslinks and indices.
6137
6137
6138 Please see https://mercurial-scm.org/wiki/RepositoryCorruption
6138 Please see https://mercurial-scm.org/wiki/RepositoryCorruption
6139 for more information about recovery from corruption of the
6139 for more information about recovery from corruption of the
6140 repository.
6140 repository.
6141
6141
6142 Returns 0 on success, 1 if errors are encountered.
6142 Returns 0 on success, 1 if errors are encountered.
6143 """
6143 """
6144 return hg.verify(repo)
6144 return hg.verify(repo)
6145
6145
6146 @command(
6146 @command(
6147 'version', [] + formatteropts, helpcategory=command.CATEGORY_HELP,
6147 'version', [] + formatteropts, helpcategory=command.CATEGORY_HELP,
6148 norepo=True, intents={INTENT_READONLY})
6148 norepo=True, intents={INTENT_READONLY})
6149 def version_(ui, **opts):
6149 def version_(ui, **opts):
6150 """output version and copyright information
6150 """output version and copyright information
6151
6151
6152 .. container:: verbose
6152 .. container:: verbose
6153
6153
6154 Template:
6154 Template:
6155
6155
6156 The following keywords are supported. See also :hg:`help templates`.
6156 The following keywords are supported. See also :hg:`help templates`.
6157
6157
6158 :extensions: List of extensions.
6158 :extensions: List of extensions.
6159 :ver: String. Version number.
6159 :ver: String. Version number.
6160
6160
6161 And each entry of ``{extensions}`` provides the following sub-keywords
6161 And each entry of ``{extensions}`` provides the following sub-keywords
6162 in addition to ``{ver}``.
6162 in addition to ``{ver}``.
6163
6163
6164 :bundled: Boolean. True if included in the release.
6164 :bundled: Boolean. True if included in the release.
6165 :name: String. Extension name.
6165 :name: String. Extension name.
6166 """
6166 """
6167 opts = pycompat.byteskwargs(opts)
6167 opts = pycompat.byteskwargs(opts)
6168 if ui.verbose:
6168 if ui.verbose:
6169 ui.pager('version')
6169 ui.pager('version')
6170 fm = ui.formatter("version", opts)
6170 fm = ui.formatter("version", opts)
6171 fm.startitem()
6171 fm.startitem()
6172 fm.write("ver", _("Mercurial Distributed SCM (version %s)\n"),
6172 fm.write("ver", _("Mercurial Distributed SCM (version %s)\n"),
6173 util.version())
6173 util.version())
6174 license = _(
6174 license = _(
6175 "(see https://mercurial-scm.org for more information)\n"
6175 "(see https://mercurial-scm.org for more information)\n"
6176 "\nCopyright (C) 2005-2018 Matt Mackall and others\n"
6176 "\nCopyright (C) 2005-2019 Matt Mackall and others\n"
6177 "This is free software; see the source for copying conditions. "
6177 "This is free software; see the source for copying conditions. "
6178 "There is NO\nwarranty; "
6178 "There is NO\nwarranty; "
6179 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
6179 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
6180 )
6180 )
6181 if not ui.quiet:
6181 if not ui.quiet:
6182 fm.plain(license)
6182 fm.plain(license)
6183
6183
6184 if ui.verbose:
6184 if ui.verbose:
6185 fm.plain(_("\nEnabled extensions:\n\n"))
6185 fm.plain(_("\nEnabled extensions:\n\n"))
6186 # format names and versions into columns
6186 # format names and versions into columns
6187 names = []
6187 names = []
6188 vers = []
6188 vers = []
6189 isinternals = []
6189 isinternals = []
6190 for name, module in extensions.extensions():
6190 for name, module in extensions.extensions():
6191 names.append(name)
6191 names.append(name)
6192 vers.append(extensions.moduleversion(module) or None)
6192 vers.append(extensions.moduleversion(module) or None)
6193 isinternals.append(extensions.ismoduleinternal(module))
6193 isinternals.append(extensions.ismoduleinternal(module))
6194 fn = fm.nested("extensions", tmpl='{name}\n')
6194 fn = fm.nested("extensions", tmpl='{name}\n')
6195 if names:
6195 if names:
6196 namefmt = " %%-%ds " % max(len(n) for n in names)
6196 namefmt = " %%-%ds " % max(len(n) for n in names)
6197 places = [_("external"), _("internal")]
6197 places = [_("external"), _("internal")]
6198 for n, v, p in zip(names, vers, isinternals):
6198 for n, v, p in zip(names, vers, isinternals):
6199 fn.startitem()
6199 fn.startitem()
6200 fn.condwrite(ui.verbose, "name", namefmt, n)
6200 fn.condwrite(ui.verbose, "name", namefmt, n)
6201 if ui.verbose:
6201 if ui.verbose:
6202 fn.plain("%s " % places[p])
6202 fn.plain("%s " % places[p])
6203 fn.data(bundled=p)
6203 fn.data(bundled=p)
6204 fn.condwrite(ui.verbose and v, "ver", "%s", v)
6204 fn.condwrite(ui.verbose and v, "ver", "%s", v)
6205 if ui.verbose:
6205 if ui.verbose:
6206 fn.plain("\n")
6206 fn.plain("\n")
6207 fn.end()
6207 fn.end()
6208 fm.end()
6208 fm.end()
6209
6209
6210 def loadcmdtable(ui, name, cmdtable):
6210 def loadcmdtable(ui, name, cmdtable):
6211 """Load command functions from specified cmdtable
6211 """Load command functions from specified cmdtable
6212 """
6212 """
6213 cmdtable = cmdtable.copy()
6213 cmdtable = cmdtable.copy()
6214 for cmd in list(cmdtable):
6214 for cmd in list(cmdtable):
6215 if not cmd.startswith('^'):
6215 if not cmd.startswith('^'):
6216 continue
6216 continue
6217 ui.deprecwarn("old-style command registration '%s' in extension '%s'"
6217 ui.deprecwarn("old-style command registration '%s' in extension '%s'"
6218 % (cmd, name), '4.8')
6218 % (cmd, name), '4.8')
6219 entry = cmdtable.pop(cmd)
6219 entry = cmdtable.pop(cmd)
6220 entry[0].helpbasic = True
6220 entry[0].helpbasic = True
6221 cmdtable[cmd[1:]] = entry
6221 cmdtable[cmd[1:]] = entry
6222
6222
6223 overrides = [cmd for cmd in cmdtable if cmd in table]
6223 overrides = [cmd for cmd in cmdtable if cmd in table]
6224 if overrides:
6224 if overrides:
6225 ui.warn(_("extension '%s' overrides commands: %s\n")
6225 ui.warn(_("extension '%s' overrides commands: %s\n")
6226 % (name, " ".join(overrides)))
6226 % (name, " ".join(overrides)))
6227 table.update(cmdtable)
6227 table.update(cmdtable)
@@ -1,2769 +1,2779 b''
1 The Mercurial system uses a set of configuration files to control
1 The Mercurial system uses a set of configuration files to control
2 aspects of its behavior.
2 aspects of its behavior.
3
3
4 Troubleshooting
4 Troubleshooting
5 ===============
5 ===============
6
6
7 If you're having problems with your configuration,
7 If you're having problems with your configuration,
8 :hg:`config --debug` can help you understand what is introducing
8 :hg:`config --debug` can help you understand what is introducing
9 a setting into your environment.
9 a setting into your environment.
10
10
11 See :hg:`help config.syntax` and :hg:`help config.files`
11 See :hg:`help config.syntax` and :hg:`help config.files`
12 for information about how and where to override things.
12 for information about how and where to override things.
13
13
14 Structure
14 Structure
15 =========
15 =========
16
16
17 The configuration files use a simple ini-file format. A configuration
17 The configuration files use a simple ini-file format. A configuration
18 file consists of sections, led by a ``[section]`` header and followed
18 file consists of sections, led by a ``[section]`` header and followed
19 by ``name = value`` entries::
19 by ``name = value`` entries::
20
20
21 [ui]
21 [ui]
22 username = Firstname Lastname <firstname.lastname@example.net>
22 username = Firstname Lastname <firstname.lastname@example.net>
23 verbose = True
23 verbose = True
24
24
25 The above entries will be referred to as ``ui.username`` and
25 The above entries will be referred to as ``ui.username`` and
26 ``ui.verbose``, respectively. See :hg:`help config.syntax`.
26 ``ui.verbose``, respectively. See :hg:`help config.syntax`.
27
27
28 Files
28 Files
29 =====
29 =====
30
30
31 Mercurial reads configuration data from several files, if they exist.
31 Mercurial reads configuration data from several files, if they exist.
32 These files do not exist by default and you will have to create the
32 These files do not exist by default and you will have to create the
33 appropriate configuration files yourself:
33 appropriate configuration files yourself:
34
34
35 Local configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
35 Local configuration is put into the per-repository ``<repo>/.hg/hgrc`` file.
36
36
37 Global configuration like the username setting is typically put into:
37 Global configuration like the username setting is typically put into:
38
38
39 .. container:: windows
39 .. container:: windows
40
40
41 - ``%USERPROFILE%\mercurial.ini`` (on Windows)
41 - ``%USERPROFILE%\mercurial.ini`` (on Windows)
42
42
43 .. container:: unix.plan9
43 .. container:: unix.plan9
44
44
45 - ``$HOME/.hgrc`` (on Unix, Plan9)
45 - ``$HOME/.hgrc`` (on Unix, Plan9)
46
46
47 The names of these files depend on the system on which Mercurial is
47 The names of these files depend on the system on which Mercurial is
48 installed. ``*.rc`` files from a single directory are read in
48 installed. ``*.rc`` files from a single directory are read in
49 alphabetical order, later ones overriding earlier ones. Where multiple
49 alphabetical order, later ones overriding earlier ones. Where multiple
50 paths are given below, settings from earlier paths override later
50 paths are given below, settings from earlier paths override later
51 ones.
51 ones.
52
52
53 .. container:: verbose.unix
53 .. container:: verbose.unix
54
54
55 On Unix, the following files are consulted:
55 On Unix, the following files are consulted:
56
56
57 - ``<repo>/.hg/hgrc`` (per-repository)
57 - ``<repo>/.hg/hgrc`` (per-repository)
58 - ``$HOME/.hgrc`` (per-user)
58 - ``$HOME/.hgrc`` (per-user)
59 - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
59 - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
60 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
60 - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
61 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
61 - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)
62 - ``/etc/mercurial/hgrc`` (per-system)
62 - ``/etc/mercurial/hgrc`` (per-system)
63 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
63 - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)
64 - ``<internal>/default.d/*.rc`` (defaults)
64 - ``<internal>/default.d/*.rc`` (defaults)
65
65
66 .. container:: verbose.windows
66 .. container:: verbose.windows
67
67
68 On Windows, the following files are consulted:
68 On Windows, the following files are consulted:
69
69
70 - ``<repo>/.hg/hgrc`` (per-repository)
70 - ``<repo>/.hg/hgrc`` (per-repository)
71 - ``%USERPROFILE%\.hgrc`` (per-user)
71 - ``%USERPROFILE%\.hgrc`` (per-user)
72 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
72 - ``%USERPROFILE%\Mercurial.ini`` (per-user)
73 - ``%HOME%\.hgrc`` (per-user)
73 - ``%HOME%\.hgrc`` (per-user)
74 - ``%HOME%\Mercurial.ini`` (per-user)
74 - ``%HOME%\Mercurial.ini`` (per-user)
75 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-installation)
75 - ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`` (per-installation)
76 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
76 - ``<install-dir>\hgrc.d\*.rc`` (per-installation)
77 - ``<install-dir>\Mercurial.ini`` (per-installation)
77 - ``<install-dir>\Mercurial.ini`` (per-installation)
78 - ``<internal>/default.d/*.rc`` (defaults)
78 - ``<internal>/default.d/*.rc`` (defaults)
79
79
80 .. note::
80 .. note::
81
81
82 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
82 The registry key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mercurial``
83 is used when running 32-bit Python on 64-bit Windows.
83 is used when running 32-bit Python on 64-bit Windows.
84
84
85 .. container:: windows
85 .. container:: windows
86
86
87 On Windows 9x, ``%HOME%`` is replaced by ``%APPDATA%``.
87 On Windows 9x, ``%HOME%`` is replaced by ``%APPDATA%``.
88
88
89 .. container:: verbose.plan9
89 .. container:: verbose.plan9
90
90
91 On Plan9, the following files are consulted:
91 On Plan9, the following files are consulted:
92
92
93 - ``<repo>/.hg/hgrc`` (per-repository)
93 - ``<repo>/.hg/hgrc`` (per-repository)
94 - ``$home/lib/hgrc`` (per-user)
94 - ``$home/lib/hgrc`` (per-user)
95 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
95 - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
96 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
96 - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)
97 - ``/lib/mercurial/hgrc`` (per-system)
97 - ``/lib/mercurial/hgrc`` (per-system)
98 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
98 - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)
99 - ``<internal>/default.d/*.rc`` (defaults)
99 - ``<internal>/default.d/*.rc`` (defaults)
100
100
101 Per-repository configuration options only apply in a
101 Per-repository configuration options only apply in a
102 particular repository. This file is not version-controlled, and
102 particular repository. This file is not version-controlled, and
103 will not get transferred during a "clone" operation. Options in
103 will not get transferred during a "clone" operation. Options in
104 this file override options in all other configuration files.
104 this file override options in all other configuration files.
105
105
106 .. container:: unix.plan9
106 .. container:: unix.plan9
107
107
108 On Plan 9 and Unix, most of this file will be ignored if it doesn't
108 On Plan 9 and Unix, most of this file will be ignored if it doesn't
109 belong to a trusted user or to a trusted group. See
109 belong to a trusted user or to a trusted group. See
110 :hg:`help config.trusted` for more details.
110 :hg:`help config.trusted` for more details.
111
111
112 Per-user configuration file(s) are for the user running Mercurial. Options
112 Per-user configuration file(s) are for the user running Mercurial. Options
113 in these files apply to all Mercurial commands executed by this user in any
113 in these files apply to all Mercurial commands executed by this user in any
114 directory. Options in these files override per-system and per-installation
114 directory. Options in these files override per-system and per-installation
115 options.
115 options.
116
116
117 Per-installation configuration files are searched for in the
117 Per-installation configuration files are searched for in the
118 directory where Mercurial is installed. ``<install-root>`` is the
118 directory where Mercurial is installed. ``<install-root>`` is the
119 parent directory of the **hg** executable (or symlink) being run.
119 parent directory of the **hg** executable (or symlink) being run.
120
120
121 .. container:: unix.plan9
121 .. container:: unix.plan9
122
122
123 For example, if installed in ``/shared/tools/bin/hg``, Mercurial
123 For example, if installed in ``/shared/tools/bin/hg``, Mercurial
124 will look in ``/shared/tools/etc/mercurial/hgrc``. Options in these
124 will look in ``/shared/tools/etc/mercurial/hgrc``. Options in these
125 files apply to all Mercurial commands executed by any user in any
125 files apply to all Mercurial commands executed by any user in any
126 directory.
126 directory.
127
127
128 Per-installation configuration files are for the system on
128 Per-installation configuration files are for the system on
129 which Mercurial is running. Options in these files apply to all
129 which Mercurial is running. Options in these files apply to all
130 Mercurial commands executed by any user in any directory. Registry
130 Mercurial commands executed by any user in any directory. Registry
131 keys contain PATH-like strings, every part of which must reference
131 keys contain PATH-like strings, every part of which must reference
132 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
132 a ``Mercurial.ini`` file or be a directory where ``*.rc`` files will
133 be read. Mercurial checks each of these locations in the specified
133 be read. Mercurial checks each of these locations in the specified
134 order until one or more configuration files are detected.
134 order until one or more configuration files are detected.
135
135
136 Per-system configuration files are for the system on which Mercurial
136 Per-system configuration files are for the system on which Mercurial
137 is running. Options in these files apply to all Mercurial commands
137 is running. Options in these files apply to all Mercurial commands
138 executed by any user in any directory. Options in these files
138 executed by any user in any directory. Options in these files
139 override per-installation options.
139 override per-installation options.
140
140
141 Mercurial comes with some default configuration. The default configuration
141 Mercurial comes with some default configuration. The default configuration
142 files are installed with Mercurial and will be overwritten on upgrades. Default
142 files are installed with Mercurial and will be overwritten on upgrades. Default
143 configuration files should never be edited by users or administrators but can
143 configuration files should never be edited by users or administrators but can
144 be overridden in other configuration files. So far the directory only contains
144 be overridden in other configuration files. So far the directory only contains
145 merge tool configuration but packagers can also put other default configuration
145 merge tool configuration but packagers can also put other default configuration
146 there.
146 there.
147
147
148 Syntax
148 Syntax
149 ======
149 ======
150
150
151 A configuration file consists of sections, led by a ``[section]`` header
151 A configuration file consists of sections, led by a ``[section]`` header
152 and followed by ``name = value`` entries (sometimes called
152 and followed by ``name = value`` entries (sometimes called
153 ``configuration keys``)::
153 ``configuration keys``)::
154
154
155 [spam]
155 [spam]
156 eggs=ham
156 eggs=ham
157 green=
157 green=
158 eggs
158 eggs
159
159
160 Each line contains one entry. If the lines that follow are indented,
160 Each line contains one entry. If the lines that follow are indented,
161 they are treated as continuations of that entry. Leading whitespace is
161 they are treated as continuations of that entry. Leading whitespace is
162 removed from values. Empty lines are skipped. Lines beginning with
162 removed from values. Empty lines are skipped. Lines beginning with
163 ``#`` or ``;`` are ignored and may be used to provide comments.
163 ``#`` or ``;`` are ignored and may be used to provide comments.
164
164
165 Configuration keys can be set multiple times, in which case Mercurial
165 Configuration keys can be set multiple times, in which case Mercurial
166 will use the value that was configured last. As an example::
166 will use the value that was configured last. As an example::
167
167
168 [spam]
168 [spam]
169 eggs=large
169 eggs=large
170 ham=serrano
170 ham=serrano
171 eggs=small
171 eggs=small
172
172
173 This would set the configuration key named ``eggs`` to ``small``.
173 This would set the configuration key named ``eggs`` to ``small``.
174
174
175 It is also possible to define a section multiple times. A section can
175 It is also possible to define a section multiple times. A section can
176 be redefined on the same and/or on different configuration files. For
176 be redefined on the same and/or on different configuration files. For
177 example::
177 example::
178
178
179 [foo]
179 [foo]
180 eggs=large
180 eggs=large
181 ham=serrano
181 ham=serrano
182 eggs=small
182 eggs=small
183
183
184 [bar]
184 [bar]
185 eggs=ham
185 eggs=ham
186 green=
186 green=
187 eggs
187 eggs
188
188
189 [foo]
189 [foo]
190 ham=prosciutto
190 ham=prosciutto
191 eggs=medium
191 eggs=medium
192 bread=toasted
192 bread=toasted
193
193
194 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
194 This would set the ``eggs``, ``ham``, and ``bread`` configuration keys
195 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
195 of the ``foo`` section to ``medium``, ``prosciutto``, and ``toasted``,
196 respectively. As you can see there only thing that matters is the last
196 respectively. As you can see there only thing that matters is the last
197 value that was set for each of the configuration keys.
197 value that was set for each of the configuration keys.
198
198
199 If a configuration key is set multiple times in different
199 If a configuration key is set multiple times in different
200 configuration files the final value will depend on the order in which
200 configuration files the final value will depend on the order in which
201 the different configuration files are read, with settings from earlier
201 the different configuration files are read, with settings from earlier
202 paths overriding later ones as described on the ``Files`` section
202 paths overriding later ones as described on the ``Files`` section
203 above.
203 above.
204
204
205 A line of the form ``%include file`` will include ``file`` into the
205 A line of the form ``%include file`` will include ``file`` into the
206 current configuration file. The inclusion is recursive, which means
206 current configuration file. The inclusion is recursive, which means
207 that included files can include other files. Filenames are relative to
207 that included files can include other files. Filenames are relative to
208 the configuration file in which the ``%include`` directive is found.
208 the configuration file in which the ``%include`` directive is found.
209 Environment variables and ``~user`` constructs are expanded in
209 Environment variables and ``~user`` constructs are expanded in
210 ``file``. This lets you do something like::
210 ``file``. This lets you do something like::
211
211
212 %include ~/.hgrc.d/$HOST.rc
212 %include ~/.hgrc.d/$HOST.rc
213
213
214 to include a different configuration file on each computer you use.
214 to include a different configuration file on each computer you use.
215
215
216 A line with ``%unset name`` will remove ``name`` from the current
216 A line with ``%unset name`` will remove ``name`` from the current
217 section, if it has been set previously.
217 section, if it has been set previously.
218
218
219 The values are either free-form text strings, lists of text strings,
219 The values are either free-form text strings, lists of text strings,
220 or Boolean values. Boolean values can be set to true using any of "1",
220 or Boolean values. Boolean values can be set to true using any of "1",
221 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
221 "yes", "true", or "on" and to false using "0", "no", "false", or "off"
222 (all case insensitive).
222 (all case insensitive).
223
223
224 List values are separated by whitespace or comma, except when values are
224 List values are separated by whitespace or comma, except when values are
225 placed in double quotation marks::
225 placed in double quotation marks::
226
226
227 allow_read = "John Doe, PhD", brian, betty
227 allow_read = "John Doe, PhD", brian, betty
228
228
229 Quotation marks can be escaped by prefixing them with a backslash. Only
229 Quotation marks can be escaped by prefixing them with a backslash. Only
230 quotation marks at the beginning of a word is counted as a quotation
230 quotation marks at the beginning of a word is counted as a quotation
231 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
231 (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
232
232
233 Sections
233 Sections
234 ========
234 ========
235
235
236 This section describes the different sections that may appear in a
236 This section describes the different sections that may appear in a
237 Mercurial configuration file, the purpose of each section, its possible
237 Mercurial configuration file, the purpose of each section, its possible
238 keys, and their possible values.
238 keys, and their possible values.
239
239
240 ``alias``
240 ``alias``
241 ---------
241 ---------
242
242
243 Defines command aliases.
243 Defines command aliases.
244
244
245 Aliases allow you to define your own commands in terms of other
245 Aliases allow you to define your own commands in terms of other
246 commands (or aliases), optionally including arguments. Positional
246 commands (or aliases), optionally including arguments. Positional
247 arguments in the form of ``$1``, ``$2``, etc. in the alias definition
247 arguments in the form of ``$1``, ``$2``, etc. in the alias definition
248 are expanded by Mercurial before execution. Positional arguments not
248 are expanded by Mercurial before execution. Positional arguments not
249 already used by ``$N`` in the definition are put at the end of the
249 already used by ``$N`` in the definition are put at the end of the
250 command to be executed.
250 command to be executed.
251
251
252 Alias definitions consist of lines of the form::
252 Alias definitions consist of lines of the form::
253
253
254 <alias> = <command> [<argument>]...
254 <alias> = <command> [<argument>]...
255
255
256 For example, this definition::
256 For example, this definition::
257
257
258 latest = log --limit 5
258 latest = log --limit 5
259
259
260 creates a new command ``latest`` that shows only the five most recent
260 creates a new command ``latest`` that shows only the five most recent
261 changesets. You can define subsequent aliases using earlier ones::
261 changesets. You can define subsequent aliases using earlier ones::
262
262
263 stable5 = latest -b stable
263 stable5 = latest -b stable
264
264
265 .. note::
265 .. note::
266
266
267 It is possible to create aliases with the same names as
267 It is possible to create aliases with the same names as
268 existing commands, which will then override the original
268 existing commands, which will then override the original
269 definitions. This is almost always a bad idea!
269 definitions. This is almost always a bad idea!
270
270
271 An alias can start with an exclamation point (``!``) to make it a
271 An alias can start with an exclamation point (``!``) to make it a
272 shell alias. A shell alias is executed with the shell and will let you
272 shell alias. A shell alias is executed with the shell and will let you
273 run arbitrary commands. As an example, ::
273 run arbitrary commands. As an example, ::
274
274
275 echo = !echo $@
275 echo = !echo $@
276
276
277 will let you do ``hg echo foo`` to have ``foo`` printed in your
277 will let you do ``hg echo foo`` to have ``foo`` printed in your
278 terminal. A better example might be::
278 terminal. A better example might be::
279
279
280 purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm -f
280 purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm -f
281
281
282 which will make ``hg purge`` delete all unknown files in the
282 which will make ``hg purge`` delete all unknown files in the
283 repository in the same manner as the purge extension.
283 repository in the same manner as the purge extension.
284
284
285 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
285 Positional arguments like ``$1``, ``$2``, etc. in the alias definition
286 expand to the command arguments. Unmatched arguments are
286 expand to the command arguments. Unmatched arguments are
287 removed. ``$0`` expands to the alias name and ``$@`` expands to all
287 removed. ``$0`` expands to the alias name and ``$@`` expands to all
288 arguments separated by a space. ``"$@"`` (with quotes) expands to all
288 arguments separated by a space. ``"$@"`` (with quotes) expands to all
289 arguments quoted individually and separated by a space. These expansions
289 arguments quoted individually and separated by a space. These expansions
290 happen before the command is passed to the shell.
290 happen before the command is passed to the shell.
291
291
292 Shell aliases are executed in an environment where ``$HG`` expands to
292 Shell aliases are executed in an environment where ``$HG`` expands to
293 the path of the Mercurial that was used to execute the alias. This is
293 the path of the Mercurial that was used to execute the alias. This is
294 useful when you want to call further Mercurial commands in a shell
294 useful when you want to call further Mercurial commands in a shell
295 alias, as was done above for the purge alias. In addition,
295 alias, as was done above for the purge alias. In addition,
296 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
296 ``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
297 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
297 echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
298
298
299 .. note::
299 .. note::
300
300
301 Some global configuration options such as ``-R`` are
301 Some global configuration options such as ``-R`` are
302 processed before shell aliases and will thus not be passed to
302 processed before shell aliases and will thus not be passed to
303 aliases.
303 aliases.
304
304
305
305
306 ``annotate``
306 ``annotate``
307 ------------
307 ------------
308
308
309 Settings used when displaying file annotations. All values are
309 Settings used when displaying file annotations. All values are
310 Booleans and default to False. See :hg:`help config.diff` for
310 Booleans and default to False. See :hg:`help config.diff` for
311 related options for the diff command.
311 related options for the diff command.
312
312
313 ``ignorews``
313 ``ignorews``
314 Ignore white space when comparing lines.
314 Ignore white space when comparing lines.
315
315
316 ``ignorewseol``
316 ``ignorewseol``
317 Ignore white space at the end of a line when comparing lines.
317 Ignore white space at the end of a line when comparing lines.
318
318
319 ``ignorewsamount``
319 ``ignorewsamount``
320 Ignore changes in the amount of white space.
320 Ignore changes in the amount of white space.
321
321
322 ``ignoreblanklines``
322 ``ignoreblanklines``
323 Ignore changes whose lines are all blank.
323 Ignore changes whose lines are all blank.
324
324
325
325
326 ``auth``
326 ``auth``
327 --------
327 --------
328
328
329 Authentication credentials and other authentication-like configuration
329 Authentication credentials and other authentication-like configuration
330 for HTTP connections. This section allows you to store usernames and
330 for HTTP connections. This section allows you to store usernames and
331 passwords for use when logging *into* HTTP servers. See
331 passwords for use when logging *into* HTTP servers. See
332 :hg:`help config.web` if you want to configure *who* can login to
332 :hg:`help config.web` if you want to configure *who* can login to
333 your HTTP server.
333 your HTTP server.
334
334
335 The following options apply to all hosts.
335 The following options apply to all hosts.
336
336
337 ``cookiefile``
337 ``cookiefile``
338 Path to a file containing HTTP cookie lines. Cookies matching a
338 Path to a file containing HTTP cookie lines. Cookies matching a
339 host will be sent automatically.
339 host will be sent automatically.
340
340
341 The file format uses the Mozilla cookies.txt format, which defines cookies
341 The file format uses the Mozilla cookies.txt format, which defines cookies
342 on their own lines. Each line contains 7 fields delimited by the tab
342 on their own lines. Each line contains 7 fields delimited by the tab
343 character (domain, is_domain_cookie, path, is_secure, expires, name,
343 character (domain, is_domain_cookie, path, is_secure, expires, name,
344 value). For more info, do an Internet search for "Netscape cookies.txt
344 value). For more info, do an Internet search for "Netscape cookies.txt
345 format."
345 format."
346
346
347 Note: the cookies parser does not handle port numbers on domains. You
347 Note: the cookies parser does not handle port numbers on domains. You
348 will need to remove ports from the domain for the cookie to be recognized.
348 will need to remove ports from the domain for the cookie to be recognized.
349 This could result in a cookie being disclosed to an unwanted server.
349 This could result in a cookie being disclosed to an unwanted server.
350
350
351 The cookies file is read-only.
351 The cookies file is read-only.
352
352
353 Other options in this section are grouped by name and have the following
353 Other options in this section are grouped by name and have the following
354 format::
354 format::
355
355
356 <name>.<argument> = <value>
356 <name>.<argument> = <value>
357
357
358 where ``<name>`` is used to group arguments into authentication
358 where ``<name>`` is used to group arguments into authentication
359 entries. Example::
359 entries. Example::
360
360
361 foo.prefix = hg.intevation.de/mercurial
361 foo.prefix = hg.intevation.de/mercurial
362 foo.username = foo
362 foo.username = foo
363 foo.password = bar
363 foo.password = bar
364 foo.schemes = http https
364 foo.schemes = http https
365
365
366 bar.prefix = secure.example.org
366 bar.prefix = secure.example.org
367 bar.key = path/to/file.key
367 bar.key = path/to/file.key
368 bar.cert = path/to/file.cert
368 bar.cert = path/to/file.cert
369 bar.schemes = https
369 bar.schemes = https
370
370
371 Supported arguments:
371 Supported arguments:
372
372
373 ``prefix``
373 ``prefix``
374 Either ``*`` or a URI prefix with or without the scheme part.
374 Either ``*`` or a URI prefix with or without the scheme part.
375 The authentication entry with the longest matching prefix is used
375 The authentication entry with the longest matching prefix is used
376 (where ``*`` matches everything and counts as a match of length
376 (where ``*`` matches everything and counts as a match of length
377 1). If the prefix doesn't include a scheme, the match is performed
377 1). If the prefix doesn't include a scheme, the match is performed
378 against the URI with its scheme stripped as well, and the schemes
378 against the URI with its scheme stripped as well, and the schemes
379 argument, q.v., is then subsequently consulted.
379 argument, q.v., is then subsequently consulted.
380
380
381 ``username``
381 ``username``
382 Optional. Username to authenticate with. If not given, and the
382 Optional. Username to authenticate with. If not given, and the
383 remote site requires basic or digest authentication, the user will
383 remote site requires basic or digest authentication, the user will
384 be prompted for it. Environment variables are expanded in the
384 be prompted for it. Environment variables are expanded in the
385 username letting you do ``foo.username = $USER``. If the URI
385 username letting you do ``foo.username = $USER``. If the URI
386 includes a username, only ``[auth]`` entries with a matching
386 includes a username, only ``[auth]`` entries with a matching
387 username or without a username will be considered.
387 username or without a username will be considered.
388
388
389 ``password``
389 ``password``
390 Optional. Password to authenticate with. If not given, and the
390 Optional. Password to authenticate with. If not given, and the
391 remote site requires basic or digest authentication, the user
391 remote site requires basic or digest authentication, the user
392 will be prompted for it.
392 will be prompted for it.
393
393
394 ``key``
394 ``key``
395 Optional. PEM encoded client certificate key file. Environment
395 Optional. PEM encoded client certificate key file. Environment
396 variables are expanded in the filename.
396 variables are expanded in the filename.
397
397
398 ``cert``
398 ``cert``
399 Optional. PEM encoded client certificate chain file. Environment
399 Optional. PEM encoded client certificate chain file. Environment
400 variables are expanded in the filename.
400 variables are expanded in the filename.
401
401
402 ``schemes``
402 ``schemes``
403 Optional. Space separated list of URI schemes to use this
403 Optional. Space separated list of URI schemes to use this
404 authentication entry with. Only used if the prefix doesn't include
404 authentication entry with. Only used if the prefix doesn't include
405 a scheme. Supported schemes are http and https. They will match
405 a scheme. Supported schemes are http and https. They will match
406 static-http and static-https respectively, as well.
406 static-http and static-https respectively, as well.
407 (default: https)
407 (default: https)
408
408
409 If no suitable authentication entry is found, the user is prompted
409 If no suitable authentication entry is found, the user is prompted
410 for credentials as usual if required by the remote.
410 for credentials as usual if required by the remote.
411
411
412 ``color``
412 ``color``
413 ---------
413 ---------
414
414
415 Configure the Mercurial color mode. For details about how to define your custom
415 Configure the Mercurial color mode. For details about how to define your custom
416 effect and style see :hg:`help color`.
416 effect and style see :hg:`help color`.
417
417
418 ``mode``
418 ``mode``
419 String: control the method used to output color. One of ``auto``, ``ansi``,
419 String: control the method used to output color. One of ``auto``, ``ansi``,
420 ``win32``, ``terminfo`` or ``debug``. In auto mode, Mercurial will
420 ``win32``, ``terminfo`` or ``debug``. In auto mode, Mercurial will
421 use ANSI mode by default (or win32 mode prior to Windows 10) if it detects a
421 use ANSI mode by default (or win32 mode prior to Windows 10) if it detects a
422 terminal. Any invalid value will disable color.
422 terminal. Any invalid value will disable color.
423
423
424 ``pagermode``
424 ``pagermode``
425 String: optional override of ``color.mode`` used with pager.
425 String: optional override of ``color.mode`` used with pager.
426
426
427 On some systems, terminfo mode may cause problems when using
427 On some systems, terminfo mode may cause problems when using
428 color with ``less -R`` as a pager program. less with the -R option
428 color with ``less -R`` as a pager program. less with the -R option
429 will only display ECMA-48 color codes, and terminfo mode may sometimes
429 will only display ECMA-48 color codes, and terminfo mode may sometimes
430 emit codes that less doesn't understand. You can work around this by
430 emit codes that less doesn't understand. You can work around this by
431 either using ansi mode (or auto mode), or by using less -r (which will
431 either using ansi mode (or auto mode), or by using less -r (which will
432 pass through all terminal control codes, not just color control
432 pass through all terminal control codes, not just color control
433 codes).
433 codes).
434
434
435 On some systems (such as MSYS in Windows), the terminal may support
435 On some systems (such as MSYS in Windows), the terminal may support
436 a different color mode than the pager program.
436 a different color mode than the pager program.
437
437
438 ``commands``
438 ``commands``
439 ------------
439 ------------
440
440
441 ``resolve.confirm``
441 ``resolve.confirm``
442 Confirm before performing action if no filename is passed.
442 Confirm before performing action if no filename is passed.
443 (default: False)
443 (default: False)
444
444
445 ``resolve.explicit-re-merge``
445 ``resolve.explicit-re-merge``
446 Require uses of ``hg resolve`` to specify which action it should perform,
446 Require uses of ``hg resolve`` to specify which action it should perform,
447 instead of re-merging files by default.
447 instead of re-merging files by default.
448 (default: False)
448 (default: False)
449
449
450 ``resolve.mark-check``
450 ``resolve.mark-check``
451 Determines what level of checking :hg:`resolve --mark` will perform before
451 Determines what level of checking :hg:`resolve --mark` will perform before
452 marking files as resolved. Valid values are ``none`, ``warn``, and
452 marking files as resolved. Valid values are ``none`, ``warn``, and
453 ``abort``. ``warn`` will output a warning listing the file(s) that still
453 ``abort``. ``warn`` will output a warning listing the file(s) that still
454 have conflict markers in them, but will still mark everything resolved.
454 have conflict markers in them, but will still mark everything resolved.
455 ``abort`` will output the same warning but will not mark things as resolved.
455 ``abort`` will output the same warning but will not mark things as resolved.
456 If --all is passed and this is set to ``abort``, only a warning will be
456 If --all is passed and this is set to ``abort``, only a warning will be
457 shown (an error will not be raised).
457 shown (an error will not be raised).
458 (default: ``none``)
458 (default: ``none``)
459
459
460 ``status.relative``
460 ``status.relative``
461 Make paths in :hg:`status` output relative to the current directory.
461 Make paths in :hg:`status` output relative to the current directory.
462 (default: False)
462 (default: False)
463
463
464 ``status.terse``
464 ``status.terse``
465 Default value for the --terse flag, which condenses status output.
465 Default value for the --terse flag, which condenses status output.
466 (default: empty)
466 (default: empty)
467
467
468 ``update.check``
468 ``update.check``
469 Determines what level of checking :hg:`update` will perform before moving
469 Determines what level of checking :hg:`update` will perform before moving
470 to a destination revision. Valid values are ``abort``, ``none``,
470 to a destination revision. Valid values are ``abort``, ``none``,
471 ``linear``, and ``noconflict``. ``abort`` always fails if the working
471 ``linear``, and ``noconflict``. ``abort`` always fails if the working
472 directory has uncommitted changes. ``none`` performs no checking, and may
472 directory has uncommitted changes. ``none`` performs no checking, and may
473 result in a merge with uncommitted changes. ``linear`` allows any update
473 result in a merge with uncommitted changes. ``linear`` allows any update
474 as long as it follows a straight line in the revision history, and may
474 as long as it follows a straight line in the revision history, and may
475 trigger a merge with uncommitted changes. ``noconflict`` will allow any
475 trigger a merge with uncommitted changes. ``noconflict`` will allow any
476 update which would not trigger a merge with uncommitted changes, if any
476 update which would not trigger a merge with uncommitted changes, if any
477 are present.
477 are present.
478 (default: ``linear``)
478 (default: ``linear``)
479
479
480 ``update.requiredest``
480 ``update.requiredest``
481 Require that the user pass a destination when running :hg:`update`.
481 Require that the user pass a destination when running :hg:`update`.
482 For example, :hg:`update .::` will be allowed, but a plain :hg:`update`
482 For example, :hg:`update .::` will be allowed, but a plain :hg:`update`
483 will be disallowed.
483 will be disallowed.
484 (default: False)
484 (default: False)
485
485
486 ``committemplate``
486 ``committemplate``
487 ------------------
487 ------------------
488
488
489 ``changeset``
489 ``changeset``
490 String: configuration in this section is used as the template to
490 String: configuration in this section is used as the template to
491 customize the text shown in the editor when committing.
491 customize the text shown in the editor when committing.
492
492
493 In addition to pre-defined template keywords, commit log specific one
493 In addition to pre-defined template keywords, commit log specific one
494 below can be used for customization:
494 below can be used for customization:
495
495
496 ``extramsg``
496 ``extramsg``
497 String: Extra message (typically 'Leave message empty to abort
497 String: Extra message (typically 'Leave message empty to abort
498 commit.'). This may be changed by some commands or extensions.
498 commit.'). This may be changed by some commands or extensions.
499
499
500 For example, the template configuration below shows as same text as
500 For example, the template configuration below shows as same text as
501 one shown by default::
501 one shown by default::
502
502
503 [committemplate]
503 [committemplate]
504 changeset = {desc}\n\n
504 changeset = {desc}\n\n
505 HG: Enter commit message. Lines beginning with 'HG:' are removed.
505 HG: Enter commit message. Lines beginning with 'HG:' are removed.
506 HG: {extramsg}
506 HG: {extramsg}
507 HG: --
507 HG: --
508 HG: user: {author}\n{ifeq(p2rev, "-1", "",
508 HG: user: {author}\n{ifeq(p2rev, "-1", "",
509 "HG: branch merge\n")
509 "HG: branch merge\n")
510 }HG: branch '{branch}'\n{if(activebookmark,
510 }HG: branch '{branch}'\n{if(activebookmark,
511 "HG: bookmark '{activebookmark}'\n") }{subrepos %
511 "HG: bookmark '{activebookmark}'\n") }{subrepos %
512 "HG: subrepo {subrepo}\n" }{file_adds %
512 "HG: subrepo {subrepo}\n" }{file_adds %
513 "HG: added {file}\n" }{file_mods %
513 "HG: added {file}\n" }{file_mods %
514 "HG: changed {file}\n" }{file_dels %
514 "HG: changed {file}\n" }{file_dels %
515 "HG: removed {file}\n" }{if(files, "",
515 "HG: removed {file}\n" }{if(files, "",
516 "HG: no files changed\n")}
516 "HG: no files changed\n")}
517
517
518 ``diff()``
518 ``diff()``
519 String: show the diff (see :hg:`help templates` for detail)
519 String: show the diff (see :hg:`help templates` for detail)
520
520
521 Sometimes it is helpful to show the diff of the changeset in the editor without
521 Sometimes it is helpful to show the diff of the changeset in the editor without
522 having to prefix 'HG: ' to each line so that highlighting works correctly. For
522 having to prefix 'HG: ' to each line so that highlighting works correctly. For
523 this, Mercurial provides a special string which will ignore everything below
523 this, Mercurial provides a special string which will ignore everything below
524 it::
524 it::
525
525
526 HG: ------------------------ >8 ------------------------
526 HG: ------------------------ >8 ------------------------
527
527
528 For example, the template configuration below will show the diff below the
528 For example, the template configuration below will show the diff below the
529 extra message::
529 extra message::
530
530
531 [committemplate]
531 [committemplate]
532 changeset = {desc}\n\n
532 changeset = {desc}\n\n
533 HG: Enter commit message. Lines beginning with 'HG:' are removed.
533 HG: Enter commit message. Lines beginning with 'HG:' are removed.
534 HG: {extramsg}
534 HG: {extramsg}
535 HG: ------------------------ >8 ------------------------
535 HG: ------------------------ >8 ------------------------
536 HG: Do not touch the line above.
536 HG: Do not touch the line above.
537 HG: Everything below will be removed.
537 HG: Everything below will be removed.
538 {diff()}
538 {diff()}
539
539
540 .. note::
540 .. note::
541
541
542 For some problematic encodings (see :hg:`help win32mbcs` for
542 For some problematic encodings (see :hg:`help win32mbcs` for
543 detail), this customization should be configured carefully, to
543 detail), this customization should be configured carefully, to
544 avoid showing broken characters.
544 avoid showing broken characters.
545
545
546 For example, if a multibyte character ending with backslash (0x5c) is
546 For example, if a multibyte character ending with backslash (0x5c) is
547 followed by the ASCII character 'n' in the customized template,
547 followed by the ASCII character 'n' in the customized template,
548 the sequence of backslash and 'n' is treated as line-feed unexpectedly
548 the sequence of backslash and 'n' is treated as line-feed unexpectedly
549 (and the multibyte character is broken, too).
549 (and the multibyte character is broken, too).
550
550
551 Customized template is used for commands below (``--edit`` may be
551 Customized template is used for commands below (``--edit`` may be
552 required):
552 required):
553
553
554 - :hg:`backout`
554 - :hg:`backout`
555 - :hg:`commit`
555 - :hg:`commit`
556 - :hg:`fetch` (for merge commit only)
556 - :hg:`fetch` (for merge commit only)
557 - :hg:`graft`
557 - :hg:`graft`
558 - :hg:`histedit`
558 - :hg:`histedit`
559 - :hg:`import`
559 - :hg:`import`
560 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
560 - :hg:`qfold`, :hg:`qnew` and :hg:`qrefresh`
561 - :hg:`rebase`
561 - :hg:`rebase`
562 - :hg:`shelve`
562 - :hg:`shelve`
563 - :hg:`sign`
563 - :hg:`sign`
564 - :hg:`tag`
564 - :hg:`tag`
565 - :hg:`transplant`
565 - :hg:`transplant`
566
566
567 Configuring items below instead of ``changeset`` allows showing
567 Configuring items below instead of ``changeset`` allows showing
568 customized message only for specific actions, or showing different
568 customized message only for specific actions, or showing different
569 messages for each action.
569 messages for each action.
570
570
571 - ``changeset.backout`` for :hg:`backout`
571 - ``changeset.backout`` for :hg:`backout`
572 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
572 - ``changeset.commit.amend.merge`` for :hg:`commit --amend` on merges
573 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
573 - ``changeset.commit.amend.normal`` for :hg:`commit --amend` on other
574 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
574 - ``changeset.commit.normal.merge`` for :hg:`commit` on merges
575 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
575 - ``changeset.commit.normal.normal`` for :hg:`commit` on other
576 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
576 - ``changeset.fetch`` for :hg:`fetch` (impling merge commit)
577 - ``changeset.gpg.sign`` for :hg:`sign`
577 - ``changeset.gpg.sign`` for :hg:`sign`
578 - ``changeset.graft`` for :hg:`graft`
578 - ``changeset.graft`` for :hg:`graft`
579 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
579 - ``changeset.histedit.edit`` for ``edit`` of :hg:`histedit`
580 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
580 - ``changeset.histedit.fold`` for ``fold`` of :hg:`histedit`
581 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
581 - ``changeset.histedit.mess`` for ``mess`` of :hg:`histedit`
582 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
582 - ``changeset.histedit.pick`` for ``pick`` of :hg:`histedit`
583 - ``changeset.import.bypass`` for :hg:`import --bypass`
583 - ``changeset.import.bypass`` for :hg:`import --bypass`
584 - ``changeset.import.normal.merge`` for :hg:`import` on merges
584 - ``changeset.import.normal.merge`` for :hg:`import` on merges
585 - ``changeset.import.normal.normal`` for :hg:`import` on other
585 - ``changeset.import.normal.normal`` for :hg:`import` on other
586 - ``changeset.mq.qnew`` for :hg:`qnew`
586 - ``changeset.mq.qnew`` for :hg:`qnew`
587 - ``changeset.mq.qfold`` for :hg:`qfold`
587 - ``changeset.mq.qfold`` for :hg:`qfold`
588 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
588 - ``changeset.mq.qrefresh`` for :hg:`qrefresh`
589 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
589 - ``changeset.rebase.collapse`` for :hg:`rebase --collapse`
590 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
590 - ``changeset.rebase.merge`` for :hg:`rebase` on merges
591 - ``changeset.rebase.normal`` for :hg:`rebase` on other
591 - ``changeset.rebase.normal`` for :hg:`rebase` on other
592 - ``changeset.shelve.shelve`` for :hg:`shelve`
592 - ``changeset.shelve.shelve`` for :hg:`shelve`
593 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
593 - ``changeset.tag.add`` for :hg:`tag` without ``--remove``
594 - ``changeset.tag.remove`` for :hg:`tag --remove`
594 - ``changeset.tag.remove`` for :hg:`tag --remove`
595 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
595 - ``changeset.transplant.merge`` for :hg:`transplant` on merges
596 - ``changeset.transplant.normal`` for :hg:`transplant` on other
596 - ``changeset.transplant.normal`` for :hg:`transplant` on other
597
597
598 These dot-separated lists of names are treated as hierarchical ones.
598 These dot-separated lists of names are treated as hierarchical ones.
599 For example, ``changeset.tag.remove`` customizes the commit message
599 For example, ``changeset.tag.remove`` customizes the commit message
600 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
600 only for :hg:`tag --remove`, but ``changeset.tag`` customizes the
601 commit message for :hg:`tag` regardless of ``--remove`` option.
601 commit message for :hg:`tag` regardless of ``--remove`` option.
602
602
603 When the external editor is invoked for a commit, the corresponding
603 When the external editor is invoked for a commit, the corresponding
604 dot-separated list of names without the ``changeset.`` prefix
604 dot-separated list of names without the ``changeset.`` prefix
605 (e.g. ``commit.normal.normal``) is in the ``HGEDITFORM`` environment
605 (e.g. ``commit.normal.normal``) is in the ``HGEDITFORM`` environment
606 variable.
606 variable.
607
607
608 In this section, items other than ``changeset`` can be referred from
608 In this section, items other than ``changeset`` can be referred from
609 others. For example, the configuration to list committed files up
609 others. For example, the configuration to list committed files up
610 below can be referred as ``{listupfiles}``::
610 below can be referred as ``{listupfiles}``::
611
611
612 [committemplate]
612 [committemplate]
613 listupfiles = {file_adds %
613 listupfiles = {file_adds %
614 "HG: added {file}\n" }{file_mods %
614 "HG: added {file}\n" }{file_mods %
615 "HG: changed {file}\n" }{file_dels %
615 "HG: changed {file}\n" }{file_dels %
616 "HG: removed {file}\n" }{if(files, "",
616 "HG: removed {file}\n" }{if(files, "",
617 "HG: no files changed\n")}
617 "HG: no files changed\n")}
618
618
619 ``decode/encode``
619 ``decode/encode``
620 -----------------
620 -----------------
621
621
622 Filters for transforming files on checkout/checkin. This would
622 Filters for transforming files on checkout/checkin. This would
623 typically be used for newline processing or other
623 typically be used for newline processing or other
624 localization/canonicalization of files.
624 localization/canonicalization of files.
625
625
626 Filters consist of a filter pattern followed by a filter command.
626 Filters consist of a filter pattern followed by a filter command.
627 Filter patterns are globs by default, rooted at the repository root.
627 Filter patterns are globs by default, rooted at the repository root.
628 For example, to match any file ending in ``.txt`` in the root
628 For example, to match any file ending in ``.txt`` in the root
629 directory only, use the pattern ``*.txt``. To match any file ending
629 directory only, use the pattern ``*.txt``. To match any file ending
630 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
630 in ``.c`` anywhere in the repository, use the pattern ``**.c``.
631 For each file only the first matching filter applies.
631 For each file only the first matching filter applies.
632
632
633 The filter command can start with a specifier, either ``pipe:`` or
633 The filter command can start with a specifier, either ``pipe:`` or
634 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
634 ``tempfile:``. If no specifier is given, ``pipe:`` is used by default.
635
635
636 A ``pipe:`` command must accept data on stdin and return the transformed
636 A ``pipe:`` command must accept data on stdin and return the transformed
637 data on stdout.
637 data on stdout.
638
638
639 Pipe example::
639 Pipe example::
640
640
641 [encode]
641 [encode]
642 # uncompress gzip files on checkin to improve delta compression
642 # uncompress gzip files on checkin to improve delta compression
643 # note: not necessarily a good idea, just an example
643 # note: not necessarily a good idea, just an example
644 *.gz = pipe: gunzip
644 *.gz = pipe: gunzip
645
645
646 [decode]
646 [decode]
647 # recompress gzip files when writing them to the working dir (we
647 # recompress gzip files when writing them to the working dir (we
648 # can safely omit "pipe:", because it's the default)
648 # can safely omit "pipe:", because it's the default)
649 *.gz = gzip
649 *.gz = gzip
650
650
651 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
651 A ``tempfile:`` command is a template. The string ``INFILE`` is replaced
652 with the name of a temporary file that contains the data to be
652 with the name of a temporary file that contains the data to be
653 filtered by the command. The string ``OUTFILE`` is replaced with the name
653 filtered by the command. The string ``OUTFILE`` is replaced with the name
654 of an empty temporary file, where the filtered data must be written by
654 of an empty temporary file, where the filtered data must be written by
655 the command.
655 the command.
656
656
657 .. container:: windows
657 .. container:: windows
658
658
659 .. note::
659 .. note::
660
660
661 The tempfile mechanism is recommended for Windows systems,
661 The tempfile mechanism is recommended for Windows systems,
662 where the standard shell I/O redirection operators often have
662 where the standard shell I/O redirection operators often have
663 strange effects and may corrupt the contents of your files.
663 strange effects and may corrupt the contents of your files.
664
664
665 This filter mechanism is used internally by the ``eol`` extension to
665 This filter mechanism is used internally by the ``eol`` extension to
666 translate line ending characters between Windows (CRLF) and Unix (LF)
666 translate line ending characters between Windows (CRLF) and Unix (LF)
667 format. We suggest you use the ``eol`` extension for convenience.
667 format. We suggest you use the ``eol`` extension for convenience.
668
668
669
669
670 ``defaults``
670 ``defaults``
671 ------------
671 ------------
672
672
673 (defaults are deprecated. Don't use them. Use aliases instead.)
673 (defaults are deprecated. Don't use them. Use aliases instead.)
674
674
675 Use the ``[defaults]`` section to define command defaults, i.e. the
675 Use the ``[defaults]`` section to define command defaults, i.e. the
676 default options/arguments to pass to the specified commands.
676 default options/arguments to pass to the specified commands.
677
677
678 The following example makes :hg:`log` run in verbose mode, and
678 The following example makes :hg:`log` run in verbose mode, and
679 :hg:`status` show only the modified files, by default::
679 :hg:`status` show only the modified files, by default::
680
680
681 [defaults]
681 [defaults]
682 log = -v
682 log = -v
683 status = -m
683 status = -m
684
684
685 The actual commands, instead of their aliases, must be used when
685 The actual commands, instead of their aliases, must be used when
686 defining command defaults. The command defaults will also be applied
686 defining command defaults. The command defaults will also be applied
687 to the aliases of the commands defined.
687 to the aliases of the commands defined.
688
688
689
689
690 ``diff``
690 ``diff``
691 --------
691 --------
692
692
693 Settings used when displaying diffs. Everything except for ``unified``
693 Settings used when displaying diffs. Everything except for ``unified``
694 is a Boolean and defaults to False. See :hg:`help config.annotate`
694 is a Boolean and defaults to False. See :hg:`help config.annotate`
695 for related options for the annotate command.
695 for related options for the annotate command.
696
696
697 ``git``
697 ``git``
698 Use git extended diff format.
698 Use git extended diff format.
699
699
700 ``nobinary``
700 ``nobinary``
701 Omit git binary patches.
701 Omit git binary patches.
702
702
703 ``nodates``
703 ``nodates``
704 Don't include dates in diff headers.
704 Don't include dates in diff headers.
705
705
706 ``noprefix``
706 ``noprefix``
707 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
707 Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode.
708
708
709 ``showfunc``
709 ``showfunc``
710 Show which function each change is in.
710 Show which function each change is in.
711
711
712 ``ignorews``
712 ``ignorews``
713 Ignore white space when comparing lines.
713 Ignore white space when comparing lines.
714
714
715 ``ignorewsamount``
715 ``ignorewsamount``
716 Ignore changes in the amount of white space.
716 Ignore changes in the amount of white space.
717
717
718 ``ignoreblanklines``
718 ``ignoreblanklines``
719 Ignore changes whose lines are all blank.
719 Ignore changes whose lines are all blank.
720
720
721 ``unified``
721 ``unified``
722 Number of lines of context to show.
722 Number of lines of context to show.
723
723
724 ``word-diff``
724 ``word-diff``
725 Highlight changed words.
725 Highlight changed words.
726
726
727 ``email``
727 ``email``
728 ---------
728 ---------
729
729
730 Settings for extensions that send email messages.
730 Settings for extensions that send email messages.
731
731
732 ``from``
732 ``from``
733 Optional. Email address to use in "From" header and SMTP envelope
733 Optional. Email address to use in "From" header and SMTP envelope
734 of outgoing messages.
734 of outgoing messages.
735
735
736 ``to``
736 ``to``
737 Optional. Comma-separated list of recipients' email addresses.
737 Optional. Comma-separated list of recipients' email addresses.
738
738
739 ``cc``
739 ``cc``
740 Optional. Comma-separated list of carbon copy recipients'
740 Optional. Comma-separated list of carbon copy recipients'
741 email addresses.
741 email addresses.
742
742
743 ``bcc``
743 ``bcc``
744 Optional. Comma-separated list of blind carbon copy recipients'
744 Optional. Comma-separated list of blind carbon copy recipients'
745 email addresses.
745 email addresses.
746
746
747 ``method``
747 ``method``
748 Optional. Method to use to send email messages. If value is ``smtp``
748 Optional. Method to use to send email messages. If value is ``smtp``
749 (default), use SMTP (see the ``[smtp]`` section for configuration).
749 (default), use SMTP (see the ``[smtp]`` section for configuration).
750 Otherwise, use as name of program to run that acts like sendmail
750 Otherwise, use as name of program to run that acts like sendmail
751 (takes ``-f`` option for sender, list of recipients on command line,
751 (takes ``-f`` option for sender, list of recipients on command line,
752 message on stdin). Normally, setting this to ``sendmail`` or
752 message on stdin). Normally, setting this to ``sendmail`` or
753 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
753 ``/usr/sbin/sendmail`` is enough to use sendmail to send messages.
754
754
755 ``charsets``
755 ``charsets``
756 Optional. Comma-separated list of character sets considered
756 Optional. Comma-separated list of character sets considered
757 convenient for recipients. Addresses, headers, and parts not
757 convenient for recipients. Addresses, headers, and parts not
758 containing patches of outgoing messages will be encoded in the
758 containing patches of outgoing messages will be encoded in the
759 first character set to which conversion from local encoding
759 first character set to which conversion from local encoding
760 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
760 (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
761 conversion fails, the text in question is sent as is.
761 conversion fails, the text in question is sent as is.
762 (default: '')
762 (default: '')
763
763
764 Order of outgoing email character sets:
764 Order of outgoing email character sets:
765
765
766 1. ``us-ascii``: always first, regardless of settings
766 1. ``us-ascii``: always first, regardless of settings
767 2. ``email.charsets``: in order given by user
767 2. ``email.charsets``: in order given by user
768 3. ``ui.fallbackencoding``: if not in email.charsets
768 3. ``ui.fallbackencoding``: if not in email.charsets
769 4. ``$HGENCODING``: if not in email.charsets
769 4. ``$HGENCODING``: if not in email.charsets
770 5. ``utf-8``: always last, regardless of settings
770 5. ``utf-8``: always last, regardless of settings
771
771
772 Email example::
772 Email example::
773
773
774 [email]
774 [email]
775 from = Joseph User <joe.user@example.com>
775 from = Joseph User <joe.user@example.com>
776 method = /usr/sbin/sendmail
776 method = /usr/sbin/sendmail
777 # charsets for western Europeans
777 # charsets for western Europeans
778 # us-ascii, utf-8 omitted, as they are tried first and last
778 # us-ascii, utf-8 omitted, as they are tried first and last
779 charsets = iso-8859-1, iso-8859-15, windows-1252
779 charsets = iso-8859-1, iso-8859-15, windows-1252
780
780
781
781
782 ``extensions``
782 ``extensions``
783 --------------
783 --------------
784
784
785 Mercurial has an extension mechanism for adding new features. To
785 Mercurial has an extension mechanism for adding new features. To
786 enable an extension, create an entry for it in this section.
786 enable an extension, create an entry for it in this section.
787
787
788 If you know that the extension is already in Python's search path,
788 If you know that the extension is already in Python's search path,
789 you can give the name of the module, followed by ``=``, with nothing
789 you can give the name of the module, followed by ``=``, with nothing
790 after the ``=``.
790 after the ``=``.
791
791
792 Otherwise, give a name that you choose, followed by ``=``, followed by
792 Otherwise, give a name that you choose, followed by ``=``, followed by
793 the path to the ``.py`` file (including the file name extension) that
793 the path to the ``.py`` file (including the file name extension) that
794 defines the extension.
794 defines the extension.
795
795
796 To explicitly disable an extension that is enabled in an hgrc of
796 To explicitly disable an extension that is enabled in an hgrc of
797 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
797 broader scope, prepend its path with ``!``, as in ``foo = !/ext/path``
798 or ``foo = !`` when path is not supplied.
798 or ``foo = !`` when path is not supplied.
799
799
800 Example for ``~/.hgrc``::
800 Example for ``~/.hgrc``::
801
801
802 [extensions]
802 [extensions]
803 # (the churn extension will get loaded from Mercurial's path)
803 # (the churn extension will get loaded from Mercurial's path)
804 churn =
804 churn =
805 # (this extension will get loaded from the file specified)
805 # (this extension will get loaded from the file specified)
806 myfeature = ~/.hgext/myfeature.py
806 myfeature = ~/.hgext/myfeature.py
807
807
808
808
809 ``format``
809 ``format``
810 ----------
810 ----------
811
811
812 Configuration that controls the repository format. Newer format options are more
812 Configuration that controls the repository format. Newer format options are more
813 powerful but incompatible with some older versions of Mercurial. Format options
813 powerful but incompatible with some older versions of Mercurial. Format options
814 are considered at repository initialization only. You need to make a new clone
814 are considered at repository initialization only. You need to make a new clone
815 for config change to be taken into account.
815 for config change to be taken into account.
816
816
817 For more details about repository format and version compatibility, see
817 For more details about repository format and version compatibility, see
818 https://www.mercurial-scm.org/wiki/MissingRequirement
818 https://www.mercurial-scm.org/wiki/MissingRequirement
819
819
820 ``usegeneraldelta``
820 ``usegeneraldelta``
821 Enable or disable the "generaldelta" repository format which improves
821 Enable or disable the "generaldelta" repository format which improves
822 repository compression by allowing "revlog" to store delta against arbitrary
822 repository compression by allowing "revlog" to store delta against arbitrary
823 revision instead of the previous stored one. This provides significant
823 revision instead of the previous stored one. This provides significant
824 improvement for repositories with branches.
824 improvement for repositories with branches.
825
825
826 Repositories with this on-disk format require Mercurial version 1.9.
826 Repositories with this on-disk format require Mercurial version 1.9.
827
827
828 Enabled by default.
828 Enabled by default.
829
829
830 ``dotencode``
830 ``dotencode``
831 Enable or disable the "dotencode" repository format which enhances
831 Enable or disable the "dotencode" repository format which enhances
832 the "fncache" repository format (which has to be enabled to use
832 the "fncache" repository format (which has to be enabled to use
833 dotencode) to avoid issues with filenames starting with ._ on
833 dotencode) to avoid issues with filenames starting with ._ on
834 Mac OS X and spaces on Windows.
834 Mac OS X and spaces on Windows.
835
835
836 Repositories with this on-disk format require Mercurial version 1.7.
836 Repositories with this on-disk format require Mercurial version 1.7.
837
837
838 Enabled by default.
838 Enabled by default.
839
839
840 ``usefncache``
840 ``usefncache``
841 Enable or disable the "fncache" repository format which enhances
841 Enable or disable the "fncache" repository format which enhances
842 the "store" repository format (which has to be enabled to use
842 the "store" repository format (which has to be enabled to use
843 fncache) to allow longer filenames and avoids using Windows
843 fncache) to allow longer filenames and avoids using Windows
844 reserved names, e.g. "nul".
844 reserved names, e.g. "nul".
845
845
846 Repositories with this on-disk format require Mercurial version 1.1.
846 Repositories with this on-disk format require Mercurial version 1.1.
847
847
848 Enabled by default.
848 Enabled by default.
849
849
850 ``usestore``
850 ``usestore``
851 Enable or disable the "store" repository format which improves
851 Enable or disable the "store" repository format which improves
852 compatibility with systems that fold case or otherwise mangle
852 compatibility with systems that fold case or otherwise mangle
853 filenames. Disabling this option will allow you to store longer filenames
853 filenames. Disabling this option will allow you to store longer filenames
854 in some situations at the expense of compatibility.
854 in some situations at the expense of compatibility.
855
855
856 Repositories with this on-disk format require Mercurial version 0.9.4.
856 Repositories with this on-disk format require Mercurial version 0.9.4.
857
857
858 Enabled by default.
858 Enabled by default.
859
859
860 ``sparse-revlog``
861 Enable or disable the ``sparse-revlog`` delta strategy. This format improves
862 delta re-use inside revlog. For very branchy repositories, it results in a
863 smaller store. For repositories with many revisions, it also helps
864 performance (by using shortened delta chains.)
865
866 Repositories with this on-disk format require Mercurial version 4.7
867
868 Enabled by default.
869
860 ``graph``
870 ``graph``
861 ---------
871 ---------
862
872
863 Web graph view configuration. This section let you change graph
873 Web graph view configuration. This section let you change graph
864 elements display properties by branches, for instance to make the
874 elements display properties by branches, for instance to make the
865 ``default`` branch stand out.
875 ``default`` branch stand out.
866
876
867 Each line has the following format::
877 Each line has the following format::
868
878
869 <branch>.<argument> = <value>
879 <branch>.<argument> = <value>
870
880
871 where ``<branch>`` is the name of the branch being
881 where ``<branch>`` is the name of the branch being
872 customized. Example::
882 customized. Example::
873
883
874 [graph]
884 [graph]
875 # 2px width
885 # 2px width
876 default.width = 2
886 default.width = 2
877 # red color
887 # red color
878 default.color = FF0000
888 default.color = FF0000
879
889
880 Supported arguments:
890 Supported arguments:
881
891
882 ``width``
892 ``width``
883 Set branch edges width in pixels.
893 Set branch edges width in pixels.
884
894
885 ``color``
895 ``color``
886 Set branch edges color in hexadecimal RGB notation.
896 Set branch edges color in hexadecimal RGB notation.
887
897
888 ``hooks``
898 ``hooks``
889 ---------
899 ---------
890
900
891 Commands or Python functions that get automatically executed by
901 Commands or Python functions that get automatically executed by
892 various actions such as starting or finishing a commit. Multiple
902 various actions such as starting or finishing a commit. Multiple
893 hooks can be run for the same action by appending a suffix to the
903 hooks can be run for the same action by appending a suffix to the
894 action. Overriding a site-wide hook can be done by changing its
904 action. Overriding a site-wide hook can be done by changing its
895 value or setting it to an empty string. Hooks can be prioritized
905 value or setting it to an empty string. Hooks can be prioritized
896 by adding a prefix of ``priority.`` to the hook name on a new line
906 by adding a prefix of ``priority.`` to the hook name on a new line
897 and setting the priority. The default priority is 0.
907 and setting the priority. The default priority is 0.
898
908
899 Example ``.hg/hgrc``::
909 Example ``.hg/hgrc``::
900
910
901 [hooks]
911 [hooks]
902 # update working directory after adding changesets
912 # update working directory after adding changesets
903 changegroup.update = hg update
913 changegroup.update = hg update
904 # do not use the site-wide hook
914 # do not use the site-wide hook
905 incoming =
915 incoming =
906 incoming.email = /my/email/hook
916 incoming.email = /my/email/hook
907 incoming.autobuild = /my/build/hook
917 incoming.autobuild = /my/build/hook
908 # force autobuild hook to run before other incoming hooks
918 # force autobuild hook to run before other incoming hooks
909 priority.incoming.autobuild = 1
919 priority.incoming.autobuild = 1
910
920
911 Most hooks are run with environment variables set that give useful
921 Most hooks are run with environment variables set that give useful
912 additional information. For each hook below, the environment variables
922 additional information. For each hook below, the environment variables
913 it is passed are listed with names in the form ``$HG_foo``. The
923 it is passed are listed with names in the form ``$HG_foo``. The
914 ``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
924 ``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
915 They contain the type of hook which triggered the run and the full name
925 They contain the type of hook which triggered the run and the full name
916 of the hook in the config, respectively. In the example above, this will
926 of the hook in the config, respectively. In the example above, this will
917 be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
927 be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
918
928
919 .. container:: windows
929 .. container:: windows
920
930
921 Some basic Unix syntax can be enabled for portability, including ``$VAR``
931 Some basic Unix syntax can be enabled for portability, including ``$VAR``
922 and ``${VAR}`` style variables. A ``~`` followed by ``\`` or ``/`` will
932 and ``${VAR}`` style variables. A ``~`` followed by ``\`` or ``/`` will
923 be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
933 be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
924 on Unix. To use a literal ``$`` or ``~``, it must be escaped with a back
934 on Unix. To use a literal ``$`` or ``~``, it must be escaped with a back
925 slash or inside of a strong quote. Strong quotes will be replaced by
935 slash or inside of a strong quote. Strong quotes will be replaced by
926 double quotes after processing.
936 double quotes after processing.
927
937
928 This feature is enabled by adding a prefix of ``tonative.`` to the hook
938 This feature is enabled by adding a prefix of ``tonative.`` to the hook
929 name on a new line, and setting it to ``True``. For example::
939 name on a new line, and setting it to ``True``. For example::
930
940
931 [hooks]
941 [hooks]
932 incoming.autobuild = /my/build/hook
942 incoming.autobuild = /my/build/hook
933 # enable translation to cmd.exe syntax for autobuild hook
943 # enable translation to cmd.exe syntax for autobuild hook
934 tonative.incoming.autobuild = True
944 tonative.incoming.autobuild = True
935
945
936 ``changegroup``
946 ``changegroup``
937 Run after a changegroup has been added via push, pull or unbundle. The ID of
947 Run after a changegroup has been added via push, pull or unbundle. The ID of
938 the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
948 the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
939 The URL from which changes came is in ``$HG_URL``.
949 The URL from which changes came is in ``$HG_URL``.
940
950
941 ``commit``
951 ``commit``
942 Run after a changeset has been created in the local repository. The ID
952 Run after a changeset has been created in the local repository. The ID
943 of the newly created changeset is in ``$HG_NODE``. Parent changeset
953 of the newly created changeset is in ``$HG_NODE``. Parent changeset
944 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
954 IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
945
955
946 ``incoming``
956 ``incoming``
947 Run after a changeset has been pulled, pushed, or unbundled into
957 Run after a changeset has been pulled, pushed, or unbundled into
948 the local repository. The ID of the newly arrived changeset is in
958 the local repository. The ID of the newly arrived changeset is in
949 ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
959 ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
950
960
951 ``outgoing``
961 ``outgoing``
952 Run after sending changes from the local repository to another. The ID of
962 Run after sending changes from the local repository to another. The ID of
953 first changeset sent is in ``$HG_NODE``. The source of operation is in
963 first changeset sent is in ``$HG_NODE``. The source of operation is in
954 ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
964 ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
955
965
956 ``post-<command>``
966 ``post-<command>``
957 Run after successful invocations of the associated command. The
967 Run after successful invocations of the associated command. The
958 contents of the command line are passed as ``$HG_ARGS`` and the result
968 contents of the command line are passed as ``$HG_ARGS`` and the result
959 code in ``$HG_RESULT``. Parsed command line arguments are passed as
969 code in ``$HG_RESULT``. Parsed command line arguments are passed as
960 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
970 ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
961 the python data internally passed to <command>. ``$HG_OPTS`` is a
971 the python data internally passed to <command>. ``$HG_OPTS`` is a
962 dictionary of options (with unspecified options set to their defaults).
972 dictionary of options (with unspecified options set to their defaults).
963 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
973 ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
964
974
965 ``fail-<command>``
975 ``fail-<command>``
966 Run after a failed invocation of an associated command. The contents
976 Run after a failed invocation of an associated command. The contents
967 of the command line are passed as ``$HG_ARGS``. Parsed command line
977 of the command line are passed as ``$HG_ARGS``. Parsed command line
968 arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
978 arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
969 string representations of the python data internally passed to
979 string representations of the python data internally passed to
970 <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
980 <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
971 options set to their defaults). ``$HG_PATS`` is a list of arguments.
981 options set to their defaults). ``$HG_PATS`` is a list of arguments.
972 Hook failure is ignored.
982 Hook failure is ignored.
973
983
974 ``pre-<command>``
984 ``pre-<command>``
975 Run before executing the associated command. The contents of the
985 Run before executing the associated command. The contents of the
976 command line are passed as ``$HG_ARGS``. Parsed command line arguments
986 command line are passed as ``$HG_ARGS``. Parsed command line arguments
977 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
987 are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
978 representations of the data internally passed to <command>. ``$HG_OPTS``
988 representations of the data internally passed to <command>. ``$HG_OPTS``
979 is a dictionary of options (with unspecified options set to their
989 is a dictionary of options (with unspecified options set to their
980 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
990 defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
981 failure, the command doesn't execute and Mercurial returns the failure
991 failure, the command doesn't execute and Mercurial returns the failure
982 code.
992 code.
983
993
984 ``prechangegroup``
994 ``prechangegroup``
985 Run before a changegroup is added via push, pull or unbundle. Exit
995 Run before a changegroup is added via push, pull or unbundle. Exit
986 status 0 allows the changegroup to proceed. A non-zero status will
996 status 0 allows the changegroup to proceed. A non-zero status will
987 cause the push, pull or unbundle to fail. The URL from which changes
997 cause the push, pull or unbundle to fail. The URL from which changes
988 will come is in ``$HG_URL``.
998 will come is in ``$HG_URL``.
989
999
990 ``precommit``
1000 ``precommit``
991 Run before starting a local commit. Exit status 0 allows the
1001 Run before starting a local commit. Exit status 0 allows the
992 commit to proceed. A non-zero status will cause the commit to fail.
1002 commit to proceed. A non-zero status will cause the commit to fail.
993 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1003 Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
994
1004
995 ``prelistkeys``
1005 ``prelistkeys``
996 Run before listing pushkeys (like bookmarks) in the
1006 Run before listing pushkeys (like bookmarks) in the
997 repository. A non-zero status will cause failure. The key namespace is
1007 repository. A non-zero status will cause failure. The key namespace is
998 in ``$HG_NAMESPACE``.
1008 in ``$HG_NAMESPACE``.
999
1009
1000 ``preoutgoing``
1010 ``preoutgoing``
1001 Run before collecting changes to send from the local repository to
1011 Run before collecting changes to send from the local repository to
1002 another. A non-zero status will cause failure. This lets you prevent
1012 another. A non-zero status will cause failure. This lets you prevent
1003 pull over HTTP or SSH. It can also prevent propagating commits (via
1013 pull over HTTP or SSH. It can also prevent propagating commits (via
1004 local pull, push (outbound) or bundle commands), but not completely,
1014 local pull, push (outbound) or bundle commands), but not completely,
1005 since you can just copy files instead. The source of operation is in
1015 since you can just copy files instead. The source of operation is in
1006 ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
1016 ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
1007 SSH or HTTP repository. If "push", "pull" or "bundle", the operation
1017 SSH or HTTP repository. If "push", "pull" or "bundle", the operation
1008 is happening on behalf of a repository on same system.
1018 is happening on behalf of a repository on same system.
1009
1019
1010 ``prepushkey``
1020 ``prepushkey``
1011 Run before a pushkey (like a bookmark) is added to the
1021 Run before a pushkey (like a bookmark) is added to the
1012 repository. A non-zero status will cause the key to be rejected. The
1022 repository. A non-zero status will cause the key to be rejected. The
1013 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
1023 key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
1014 the old value (if any) is in ``$HG_OLD``, and the new value is in
1024 the old value (if any) is in ``$HG_OLD``, and the new value is in
1015 ``$HG_NEW``.
1025 ``$HG_NEW``.
1016
1026
1017 ``pretag``
1027 ``pretag``
1018 Run before creating a tag. Exit status 0 allows the tag to be
1028 Run before creating a tag. Exit status 0 allows the tag to be
1019 created. A non-zero status will cause the tag to fail. The ID of the
1029 created. A non-zero status will cause the tag to fail. The ID of the
1020 changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
1030 changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
1021 tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
1031 tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
1022
1032
1023 ``pretxnopen``
1033 ``pretxnopen``
1024 Run before any new repository transaction is open. The reason for the
1034 Run before any new repository transaction is open. The reason for the
1025 transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
1035 transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
1026 transaction will be in ``HG_TXNID``. A non-zero status will prevent the
1036 transaction will be in ``HG_TXNID``. A non-zero status will prevent the
1027 transaction from being opened.
1037 transaction from being opened.
1028
1038
1029 ``pretxnclose``
1039 ``pretxnclose``
1030 Run right before the transaction is actually finalized. Any repository change
1040 Run right before the transaction is actually finalized. Any repository change
1031 will be visible to the hook program. This lets you validate the transaction
1041 will be visible to the hook program. This lets you validate the transaction
1032 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1042 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1033 status will cause the transaction to be rolled back. The reason for the
1043 status will cause the transaction to be rolled back. The reason for the
1034 transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
1044 transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
1035 the transaction will be in ``HG_TXNID``. The rest of the available data will
1045 the transaction will be in ``HG_TXNID``. The rest of the available data will
1036 vary according the transaction type. New changesets will add ``$HG_NODE``
1046 vary according the transaction type. New changesets will add ``$HG_NODE``
1037 (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
1047 (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
1038 added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables. Bookmark and
1048 added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables. Bookmark and
1039 phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
1049 phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
1040 respectively, etc.
1050 respectively, etc.
1041
1051
1042 ``pretxnclose-bookmark``
1052 ``pretxnclose-bookmark``
1043 Run right before a bookmark change is actually finalized. Any repository
1053 Run right before a bookmark change is actually finalized. Any repository
1044 change will be visible to the hook program. This lets you validate the
1054 change will be visible to the hook program. This lets you validate the
1045 transaction content or change it. Exit status 0 allows the commit to
1055 transaction content or change it. Exit status 0 allows the commit to
1046 proceed. A non-zero status will cause the transaction to be rolled back.
1056 proceed. A non-zero status will cause the transaction to be rolled back.
1047 The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
1057 The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
1048 bookmark location will be available in ``$HG_NODE`` while the previous
1058 bookmark location will be available in ``$HG_NODE`` while the previous
1049 location will be available in ``$HG_OLDNODE``. In case of a bookmark
1059 location will be available in ``$HG_OLDNODE``. In case of a bookmark
1050 creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
1060 creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
1051 will be empty.
1061 will be empty.
1052 In addition, the reason for the transaction opening will be in
1062 In addition, the reason for the transaction opening will be in
1053 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1063 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1054 ``HG_TXNID``.
1064 ``HG_TXNID``.
1055
1065
1056 ``pretxnclose-phase``
1066 ``pretxnclose-phase``
1057 Run right before a phase change is actually finalized. Any repository change
1067 Run right before a phase change is actually finalized. Any repository change
1058 will be visible to the hook program. This lets you validate the transaction
1068 will be visible to the hook program. This lets you validate the transaction
1059 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1069 content or change it. Exit status 0 allows the commit to proceed. A non-zero
1060 status will cause the transaction to be rolled back. The hook is called
1070 status will cause the transaction to be rolled back. The hook is called
1061 multiple times, once for each revision affected by a phase change.
1071 multiple times, once for each revision affected by a phase change.
1062 The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
1072 The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
1063 while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
1073 while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
1064 will be empty. In addition, the reason for the transaction opening will be in
1074 will be empty. In addition, the reason for the transaction opening will be in
1065 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1075 ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
1066 ``HG_TXNID``. The hook is also run for newly added revisions. In this case
1076 ``HG_TXNID``. The hook is also run for newly added revisions. In this case
1067 the ``$HG_OLDPHASE`` entry will be empty.
1077 the ``$HG_OLDPHASE`` entry will be empty.
1068
1078
1069 ``txnclose``
1079 ``txnclose``
1070 Run after any repository transaction has been committed. At this
1080 Run after any repository transaction has been committed. At this
1071 point, the transaction can no longer be rolled back. The hook will run
1081 point, the transaction can no longer be rolled back. The hook will run
1072 after the lock is released. See :hg:`help config.hooks.pretxnclose` for
1082 after the lock is released. See :hg:`help config.hooks.pretxnclose` for
1073 details about available variables.
1083 details about available variables.
1074
1084
1075 ``txnclose-bookmark``
1085 ``txnclose-bookmark``
1076 Run after any bookmark change has been committed. At this point, the
1086 Run after any bookmark change has been committed. At this point, the
1077 transaction can no longer be rolled back. The hook will run after the lock
1087 transaction can no longer be rolled back. The hook will run after the lock
1078 is released. See :hg:`help config.hooks.pretxnclose-bookmark` for details
1088 is released. See :hg:`help config.hooks.pretxnclose-bookmark` for details
1079 about available variables.
1089 about available variables.
1080
1090
1081 ``txnclose-phase``
1091 ``txnclose-phase``
1082 Run after any phase change has been committed. At this point, the
1092 Run after any phase change has been committed. At this point, the
1083 transaction can no longer be rolled back. The hook will run after the lock
1093 transaction can no longer be rolled back. The hook will run after the lock
1084 is released. See :hg:`help config.hooks.pretxnclose-phase` for details about
1094 is released. See :hg:`help config.hooks.pretxnclose-phase` for details about
1085 available variables.
1095 available variables.
1086
1096
1087 ``txnabort``
1097 ``txnabort``
1088 Run when a transaction is aborted. See :hg:`help config.hooks.pretxnclose`
1098 Run when a transaction is aborted. See :hg:`help config.hooks.pretxnclose`
1089 for details about available variables.
1099 for details about available variables.
1090
1100
1091 ``pretxnchangegroup``
1101 ``pretxnchangegroup``
1092 Run after a changegroup has been added via push, pull or unbundle, but before
1102 Run after a changegroup has been added via push, pull or unbundle, but before
1093 the transaction has been committed. The changegroup is visible to the hook
1103 the transaction has been committed. The changegroup is visible to the hook
1094 program. This allows validation of incoming changes before accepting them.
1104 program. This allows validation of incoming changes before accepting them.
1095 The ID of the first new changeset is in ``$HG_NODE`` and last is in
1105 The ID of the first new changeset is in ``$HG_NODE`` and last is in
1096 ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
1106 ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
1097 status will cause the transaction to be rolled back, and the push, pull or
1107 status will cause the transaction to be rolled back, and the push, pull or
1098 unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
1108 unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
1099
1109
1100 ``pretxncommit``
1110 ``pretxncommit``
1101 Run after a changeset has been created, but before the transaction is
1111 Run after a changeset has been created, but before the transaction is
1102 committed. The changeset is visible to the hook program. This allows
1112 committed. The changeset is visible to the hook program. This allows
1103 validation of the commit message and changes. Exit status 0 allows the
1113 validation of the commit message and changes. Exit status 0 allows the
1104 commit to proceed. A non-zero status will cause the transaction to
1114 commit to proceed. A non-zero status will cause the transaction to
1105 be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
1115 be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
1106 changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1116 changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
1107
1117
1108 ``preupdate``
1118 ``preupdate``
1109 Run before updating the working directory. Exit status 0 allows
1119 Run before updating the working directory. Exit status 0 allows
1110 the update to proceed. A non-zero status will prevent the update.
1120 the update to proceed. A non-zero status will prevent the update.
1111 The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
1121 The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
1112 merge, the ID of second new parent is in ``$HG_PARENT2``.
1122 merge, the ID of second new parent is in ``$HG_PARENT2``.
1113
1123
1114 ``listkeys``
1124 ``listkeys``
1115 Run after listing pushkeys (like bookmarks) in the repository. The
1125 Run after listing pushkeys (like bookmarks) in the repository. The
1116 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
1126 key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
1117 dictionary containing the keys and values.
1127 dictionary containing the keys and values.
1118
1128
1119 ``pushkey``
1129 ``pushkey``
1120 Run after a pushkey (like a bookmark) is added to the
1130 Run after a pushkey (like a bookmark) is added to the
1121 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
1131 repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
1122 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
1132 ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
1123 value is in ``$HG_NEW``.
1133 value is in ``$HG_NEW``.
1124
1134
1125 ``tag``
1135 ``tag``
1126 Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
1136 Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
1127 The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
1137 The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
1128 the repository if ``$HG_LOCAL=0``.
1138 the repository if ``$HG_LOCAL=0``.
1129
1139
1130 ``update``
1140 ``update``
1131 Run after updating the working directory. The changeset ID of first
1141 Run after updating the working directory. The changeset ID of first
1132 new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
1142 new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
1133 parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
1143 parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
1134 update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
1144 update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
1135
1145
1136 .. note::
1146 .. note::
1137
1147
1138 It is generally better to use standard hooks rather than the
1148 It is generally better to use standard hooks rather than the
1139 generic pre- and post- command hooks, as they are guaranteed to be
1149 generic pre- and post- command hooks, as they are guaranteed to be
1140 called in the appropriate contexts for influencing transactions.
1150 called in the appropriate contexts for influencing transactions.
1141 Also, hooks like "commit" will be called in all contexts that
1151 Also, hooks like "commit" will be called in all contexts that
1142 generate a commit (e.g. tag) and not just the commit command.
1152 generate a commit (e.g. tag) and not just the commit command.
1143
1153
1144 .. note::
1154 .. note::
1145
1155
1146 Environment variables with empty values may not be passed to
1156 Environment variables with empty values may not be passed to
1147 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
1157 hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
1148 will have an empty value under Unix-like platforms for non-merge
1158 will have an empty value under Unix-like platforms for non-merge
1149 changesets, while it will not be available at all under Windows.
1159 changesets, while it will not be available at all under Windows.
1150
1160
1151 The syntax for Python hooks is as follows::
1161 The syntax for Python hooks is as follows::
1152
1162
1153 hookname = python:modulename.submodule.callable
1163 hookname = python:modulename.submodule.callable
1154 hookname = python:/path/to/python/module.py:callable
1164 hookname = python:/path/to/python/module.py:callable
1155
1165
1156 Python hooks are run within the Mercurial process. Each hook is
1166 Python hooks are run within the Mercurial process. Each hook is
1157 called with at least three keyword arguments: a ui object (keyword
1167 called with at least three keyword arguments: a ui object (keyword
1158 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
1168 ``ui``), a repository object (keyword ``repo``), and a ``hooktype``
1159 keyword that tells what kind of hook is used. Arguments listed as
1169 keyword that tells what kind of hook is used. Arguments listed as
1160 environment variables above are passed as keyword arguments, with no
1170 environment variables above are passed as keyword arguments, with no
1161 ``HG_`` prefix, and names in lower case.
1171 ``HG_`` prefix, and names in lower case.
1162
1172
1163 If a Python hook returns a "true" value or raises an exception, this
1173 If a Python hook returns a "true" value or raises an exception, this
1164 is treated as a failure.
1174 is treated as a failure.
1165
1175
1166
1176
1167 ``hostfingerprints``
1177 ``hostfingerprints``
1168 --------------------
1178 --------------------
1169
1179
1170 (Deprecated. Use ``[hostsecurity]``'s ``fingerprints`` options instead.)
1180 (Deprecated. Use ``[hostsecurity]``'s ``fingerprints`` options instead.)
1171
1181
1172 Fingerprints of the certificates of known HTTPS servers.
1182 Fingerprints of the certificates of known HTTPS servers.
1173
1183
1174 A HTTPS connection to a server with a fingerprint configured here will
1184 A HTTPS connection to a server with a fingerprint configured here will
1175 only succeed if the servers certificate matches the fingerprint.
1185 only succeed if the servers certificate matches the fingerprint.
1176 This is very similar to how ssh known hosts works.
1186 This is very similar to how ssh known hosts works.
1177
1187
1178 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
1188 The fingerprint is the SHA-1 hash value of the DER encoded certificate.
1179 Multiple values can be specified (separated by spaces or commas). This can
1189 Multiple values can be specified (separated by spaces or commas). This can
1180 be used to define both old and new fingerprints while a host transitions
1190 be used to define both old and new fingerprints while a host transitions
1181 to a new certificate.
1191 to a new certificate.
1182
1192
1183 The CA chain and web.cacerts is not used for servers with a fingerprint.
1193 The CA chain and web.cacerts is not used for servers with a fingerprint.
1184
1194
1185 For example::
1195 For example::
1186
1196
1187 [hostfingerprints]
1197 [hostfingerprints]
1188 hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1198 hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1189 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1199 hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1190
1200
1191 ``hostsecurity``
1201 ``hostsecurity``
1192 ----------------
1202 ----------------
1193
1203
1194 Used to specify global and per-host security settings for connecting to
1204 Used to specify global and per-host security settings for connecting to
1195 other machines.
1205 other machines.
1196
1206
1197 The following options control default behavior for all hosts.
1207 The following options control default behavior for all hosts.
1198
1208
1199 ``ciphers``
1209 ``ciphers``
1200 Defines the cryptographic ciphers to use for connections.
1210 Defines the cryptographic ciphers to use for connections.
1201
1211
1202 Value must be a valid OpenSSL Cipher List Format as documented at
1212 Value must be a valid OpenSSL Cipher List Format as documented at
1203 https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT.
1213 https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-LIST-FORMAT.
1204
1214
1205 This setting is for advanced users only. Setting to incorrect values
1215 This setting is for advanced users only. Setting to incorrect values
1206 can significantly lower connection security or decrease performance.
1216 can significantly lower connection security or decrease performance.
1207 You have been warned.
1217 You have been warned.
1208
1218
1209 This option requires Python 2.7.
1219 This option requires Python 2.7.
1210
1220
1211 ``minimumprotocol``
1221 ``minimumprotocol``
1212 Defines the minimum channel encryption protocol to use.
1222 Defines the minimum channel encryption protocol to use.
1213
1223
1214 By default, the highest version of TLS supported by both client and server
1224 By default, the highest version of TLS supported by both client and server
1215 is used.
1225 is used.
1216
1226
1217 Allowed values are: ``tls1.0``, ``tls1.1``, ``tls1.2``.
1227 Allowed values are: ``tls1.0``, ``tls1.1``, ``tls1.2``.
1218
1228
1219 When running on an old Python version, only ``tls1.0`` is allowed since
1229 When running on an old Python version, only ``tls1.0`` is allowed since
1220 old versions of Python only support up to TLS 1.0.
1230 old versions of Python only support up to TLS 1.0.
1221
1231
1222 When running a Python that supports modern TLS versions, the default is
1232 When running a Python that supports modern TLS versions, the default is
1223 ``tls1.1``. ``tls1.0`` can still be used to allow TLS 1.0. However, this
1233 ``tls1.1``. ``tls1.0`` can still be used to allow TLS 1.0. However, this
1224 weakens security and should only be used as a feature of last resort if
1234 weakens security and should only be used as a feature of last resort if
1225 a server does not support TLS 1.1+.
1235 a server does not support TLS 1.1+.
1226
1236
1227 Options in the ``[hostsecurity]`` section can have the form
1237 Options in the ``[hostsecurity]`` section can have the form
1228 ``hostname``:``setting``. This allows multiple settings to be defined on a
1238 ``hostname``:``setting``. This allows multiple settings to be defined on a
1229 per-host basis.
1239 per-host basis.
1230
1240
1231 The following per-host settings can be defined.
1241 The following per-host settings can be defined.
1232
1242
1233 ``ciphers``
1243 ``ciphers``
1234 This behaves like ``ciphers`` as described above except it only applies
1244 This behaves like ``ciphers`` as described above except it only applies
1235 to the host on which it is defined.
1245 to the host on which it is defined.
1236
1246
1237 ``fingerprints``
1247 ``fingerprints``
1238 A list of hashes of the DER encoded peer/remote certificate. Values have
1248 A list of hashes of the DER encoded peer/remote certificate. Values have
1239 the form ``algorithm``:``fingerprint``. e.g.
1249 the form ``algorithm``:``fingerprint``. e.g.
1240 ``sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2``.
1250 ``sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2``.
1241 In addition, colons (``:``) can appear in the fingerprint part.
1251 In addition, colons (``:``) can appear in the fingerprint part.
1242
1252
1243 The following algorithms/prefixes are supported: ``sha1``, ``sha256``,
1253 The following algorithms/prefixes are supported: ``sha1``, ``sha256``,
1244 ``sha512``.
1254 ``sha512``.
1245
1255
1246 Use of ``sha256`` or ``sha512`` is preferred.
1256 Use of ``sha256`` or ``sha512`` is preferred.
1247
1257
1248 If a fingerprint is specified, the CA chain is not validated for this
1258 If a fingerprint is specified, the CA chain is not validated for this
1249 host and Mercurial will require the remote certificate to match one
1259 host and Mercurial will require the remote certificate to match one
1250 of the fingerprints specified. This means if the server updates its
1260 of the fingerprints specified. This means if the server updates its
1251 certificate, Mercurial will abort until a new fingerprint is defined.
1261 certificate, Mercurial will abort until a new fingerprint is defined.
1252 This can provide stronger security than traditional CA-based validation
1262 This can provide stronger security than traditional CA-based validation
1253 at the expense of convenience.
1263 at the expense of convenience.
1254
1264
1255 This option takes precedence over ``verifycertsfile``.
1265 This option takes precedence over ``verifycertsfile``.
1256
1266
1257 ``minimumprotocol``
1267 ``minimumprotocol``
1258 This behaves like ``minimumprotocol`` as described above except it
1268 This behaves like ``minimumprotocol`` as described above except it
1259 only applies to the host on which it is defined.
1269 only applies to the host on which it is defined.
1260
1270
1261 ``verifycertsfile``
1271 ``verifycertsfile``
1262 Path to file a containing a list of PEM encoded certificates used to
1272 Path to file a containing a list of PEM encoded certificates used to
1263 verify the server certificate. Environment variables and ``~user``
1273 verify the server certificate. Environment variables and ``~user``
1264 constructs are expanded in the filename.
1274 constructs are expanded in the filename.
1265
1275
1266 The server certificate or the certificate's certificate authority (CA)
1276 The server certificate or the certificate's certificate authority (CA)
1267 must match a certificate from this file or certificate verification
1277 must match a certificate from this file or certificate verification
1268 will fail and connections to the server will be refused.
1278 will fail and connections to the server will be refused.
1269
1279
1270 If defined, only certificates provided by this file will be used:
1280 If defined, only certificates provided by this file will be used:
1271 ``web.cacerts`` and any system/default certificates will not be
1281 ``web.cacerts`` and any system/default certificates will not be
1272 used.
1282 used.
1273
1283
1274 This option has no effect if the per-host ``fingerprints`` option
1284 This option has no effect if the per-host ``fingerprints`` option
1275 is set.
1285 is set.
1276
1286
1277 The format of the file is as follows::
1287 The format of the file is as follows::
1278
1288
1279 -----BEGIN CERTIFICATE-----
1289 -----BEGIN CERTIFICATE-----
1280 ... (certificate in base64 PEM encoding) ...
1290 ... (certificate in base64 PEM encoding) ...
1281 -----END CERTIFICATE-----
1291 -----END CERTIFICATE-----
1282 -----BEGIN CERTIFICATE-----
1292 -----BEGIN CERTIFICATE-----
1283 ... (certificate in base64 PEM encoding) ...
1293 ... (certificate in base64 PEM encoding) ...
1284 -----END CERTIFICATE-----
1294 -----END CERTIFICATE-----
1285
1295
1286 For example::
1296 For example::
1287
1297
1288 [hostsecurity]
1298 [hostsecurity]
1289 hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
1299 hg.example.com:fingerprints = sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2
1290 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1300 hg2.example.com:fingerprints = sha1:914f1aff87249c09b6859b88b1906d30756491ca, sha1:fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33
1291 hg3.example.com:fingerprints = sha256:9a:b0:dc:e2:75:ad:8a:b7:84:58:e5:1f:07:32:f1:87:e6:bd:24:22:af:b7:ce:8e:9c:b4:10:cf:b9:f4:0e:d2
1301 hg3.example.com:fingerprints = sha256:9a:b0:dc:e2:75:ad:8a:b7:84:58:e5:1f:07:32:f1:87:e6:bd:24:22:af:b7:ce:8e:9c:b4:10:cf:b9:f4:0e:d2
1292 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
1302 foo.example.com:verifycertsfile = /etc/ssl/trusted-ca-certs.pem
1293
1303
1294 To change the default minimum protocol version to TLS 1.2 but to allow TLS 1.1
1304 To change the default minimum protocol version to TLS 1.2 but to allow TLS 1.1
1295 when connecting to ``hg.example.com``::
1305 when connecting to ``hg.example.com``::
1296
1306
1297 [hostsecurity]
1307 [hostsecurity]
1298 minimumprotocol = tls1.2
1308 minimumprotocol = tls1.2
1299 hg.example.com:minimumprotocol = tls1.1
1309 hg.example.com:minimumprotocol = tls1.1
1300
1310
1301 ``http_proxy``
1311 ``http_proxy``
1302 --------------
1312 --------------
1303
1313
1304 Used to access web-based Mercurial repositories through a HTTP
1314 Used to access web-based Mercurial repositories through a HTTP
1305 proxy.
1315 proxy.
1306
1316
1307 ``host``
1317 ``host``
1308 Host name and (optional) port of the proxy server, for example
1318 Host name and (optional) port of the proxy server, for example
1309 "myproxy:8000".
1319 "myproxy:8000".
1310
1320
1311 ``no``
1321 ``no``
1312 Optional. Comma-separated list of host names that should bypass
1322 Optional. Comma-separated list of host names that should bypass
1313 the proxy.
1323 the proxy.
1314
1324
1315 ``passwd``
1325 ``passwd``
1316 Optional. Password to authenticate with at the proxy server.
1326 Optional. Password to authenticate with at the proxy server.
1317
1327
1318 ``user``
1328 ``user``
1319 Optional. User name to authenticate with at the proxy server.
1329 Optional. User name to authenticate with at the proxy server.
1320
1330
1321 ``always``
1331 ``always``
1322 Optional. Always use the proxy, even for localhost and any entries
1332 Optional. Always use the proxy, even for localhost and any entries
1323 in ``http_proxy.no``. (default: False)
1333 in ``http_proxy.no``. (default: False)
1324
1334
1325 ``http``
1335 ``http``
1326 ----------
1336 ----------
1327
1337
1328 Used to configure access to Mercurial repositories via HTTP.
1338 Used to configure access to Mercurial repositories via HTTP.
1329
1339
1330 ``timeout``
1340 ``timeout``
1331 If set, blocking operations will timeout after that many seconds.
1341 If set, blocking operations will timeout after that many seconds.
1332 (default: None)
1342 (default: None)
1333
1343
1334 ``merge``
1344 ``merge``
1335 ---------
1345 ---------
1336
1346
1337 This section specifies behavior during merges and updates.
1347 This section specifies behavior during merges and updates.
1338
1348
1339 ``checkignored``
1349 ``checkignored``
1340 Controls behavior when an ignored file on disk has the same name as a tracked
1350 Controls behavior when an ignored file on disk has the same name as a tracked
1341 file in the changeset being merged or updated to, and has different
1351 file in the changeset being merged or updated to, and has different
1342 contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,
1352 contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,
1343 abort on such files. With ``warn``, warn on such files and back them up as
1353 abort on such files. With ``warn``, warn on such files and back them up as
1344 ``.orig``. With ``ignore``, don't print a warning and back them up as
1354 ``.orig``. With ``ignore``, don't print a warning and back them up as
1345 ``.orig``. (default: ``abort``)
1355 ``.orig``. (default: ``abort``)
1346
1356
1347 ``checkunknown``
1357 ``checkunknown``
1348 Controls behavior when an unknown file that isn't ignored has the same name
1358 Controls behavior when an unknown file that isn't ignored has the same name
1349 as a tracked file in the changeset being merged or updated to, and has
1359 as a tracked file in the changeset being merged or updated to, and has
1350 different contents. Similar to ``merge.checkignored``, except for files that
1360 different contents. Similar to ``merge.checkignored``, except for files that
1351 are not ignored. (default: ``abort``)
1361 are not ignored. (default: ``abort``)
1352
1362
1353 ``on-failure``
1363 ``on-failure``
1354 When set to ``continue`` (the default), the merge process attempts to
1364 When set to ``continue`` (the default), the merge process attempts to
1355 merge all unresolved files using the merge chosen tool, regardless of
1365 merge all unresolved files using the merge chosen tool, regardless of
1356 whether previous file merge attempts during the process succeeded or not.
1366 whether previous file merge attempts during the process succeeded or not.
1357 Setting this to ``prompt`` will prompt after any merge failure continue
1367 Setting this to ``prompt`` will prompt after any merge failure continue
1358 or halt the merge process. Setting this to ``halt`` will automatically
1368 or halt the merge process. Setting this to ``halt`` will automatically
1359 halt the merge process on any merge tool failure. The merge process
1369 halt the merge process on any merge tool failure. The merge process
1360 can be restarted by using the ``resolve`` command. When a merge is
1370 can be restarted by using the ``resolve`` command. When a merge is
1361 halted, the repository is left in a normal ``unresolved`` merge state.
1371 halted, the repository is left in a normal ``unresolved`` merge state.
1362 (default: ``continue``)
1372 (default: ``continue``)
1363
1373
1364 ``strict-capability-check``
1374 ``strict-capability-check``
1365 Whether capabilities of internal merge tools are checked strictly
1375 Whether capabilities of internal merge tools are checked strictly
1366 or not, while examining rules to decide merge tool to be used.
1376 or not, while examining rules to decide merge tool to be used.
1367 (default: False)
1377 (default: False)
1368
1378
1369 ``merge-patterns``
1379 ``merge-patterns``
1370 ------------------
1380 ------------------
1371
1381
1372 This section specifies merge tools to associate with particular file
1382 This section specifies merge tools to associate with particular file
1373 patterns. Tools matched here will take precedence over the default
1383 patterns. Tools matched here will take precedence over the default
1374 merge tool. Patterns are globs by default, rooted at the repository
1384 merge tool. Patterns are globs by default, rooted at the repository
1375 root.
1385 root.
1376
1386
1377 Example::
1387 Example::
1378
1388
1379 [merge-patterns]
1389 [merge-patterns]
1380 **.c = kdiff3
1390 **.c = kdiff3
1381 **.jpg = myimgmerge
1391 **.jpg = myimgmerge
1382
1392
1383 ``merge-tools``
1393 ``merge-tools``
1384 ---------------
1394 ---------------
1385
1395
1386 This section configures external merge tools to use for file-level
1396 This section configures external merge tools to use for file-level
1387 merges. This section has likely been preconfigured at install time.
1397 merges. This section has likely been preconfigured at install time.
1388 Use :hg:`config merge-tools` to check the existing configuration.
1398 Use :hg:`config merge-tools` to check the existing configuration.
1389 Also see :hg:`help merge-tools` for more details.
1399 Also see :hg:`help merge-tools` for more details.
1390
1400
1391 Example ``~/.hgrc``::
1401 Example ``~/.hgrc``::
1392
1402
1393 [merge-tools]
1403 [merge-tools]
1394 # Override stock tool location
1404 # Override stock tool location
1395 kdiff3.executable = ~/bin/kdiff3
1405 kdiff3.executable = ~/bin/kdiff3
1396 # Specify command line
1406 # Specify command line
1397 kdiff3.args = $base $local $other -o $output
1407 kdiff3.args = $base $local $other -o $output
1398 # Give higher priority
1408 # Give higher priority
1399 kdiff3.priority = 1
1409 kdiff3.priority = 1
1400
1410
1401 # Changing the priority of preconfigured tool
1411 # Changing the priority of preconfigured tool
1402 meld.priority = 0
1412 meld.priority = 0
1403
1413
1404 # Disable a preconfigured tool
1414 # Disable a preconfigured tool
1405 vimdiff.disabled = yes
1415 vimdiff.disabled = yes
1406
1416
1407 # Define new tool
1417 # Define new tool
1408 myHtmlTool.args = -m $local $other $base $output
1418 myHtmlTool.args = -m $local $other $base $output
1409 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
1419 myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
1410 myHtmlTool.priority = 1
1420 myHtmlTool.priority = 1
1411
1421
1412 Supported arguments:
1422 Supported arguments:
1413
1423
1414 ``priority``
1424 ``priority``
1415 The priority in which to evaluate this tool.
1425 The priority in which to evaluate this tool.
1416 (default: 0)
1426 (default: 0)
1417
1427
1418 ``executable``
1428 ``executable``
1419 Either just the name of the executable or its pathname.
1429 Either just the name of the executable or its pathname.
1420
1430
1421 .. container:: windows
1431 .. container:: windows
1422
1432
1423 On Windows, the path can use environment variables with ${ProgramFiles}
1433 On Windows, the path can use environment variables with ${ProgramFiles}
1424 syntax.
1434 syntax.
1425
1435
1426 (default: the tool name)
1436 (default: the tool name)
1427
1437
1428 ``args``
1438 ``args``
1429 The arguments to pass to the tool executable. You can refer to the
1439 The arguments to pass to the tool executable. You can refer to the
1430 files being merged as well as the output file through these
1440 files being merged as well as the output file through these
1431 variables: ``$base``, ``$local``, ``$other``, ``$output``.
1441 variables: ``$base``, ``$local``, ``$other``, ``$output``.
1432
1442
1433 The meaning of ``$local`` and ``$other`` can vary depending on which action is
1443 The meaning of ``$local`` and ``$other`` can vary depending on which action is
1434 being performed. During an update or merge, ``$local`` represents the original
1444 being performed. During an update or merge, ``$local`` represents the original
1435 state of the file, while ``$other`` represents the commit you are updating to or
1445 state of the file, while ``$other`` represents the commit you are updating to or
1436 the commit you are merging with. During a rebase, ``$local`` represents the
1446 the commit you are merging with. During a rebase, ``$local`` represents the
1437 destination of the rebase, and ``$other`` represents the commit being rebased.
1447 destination of the rebase, and ``$other`` represents the commit being rebased.
1438
1448
1439 Some operations define custom labels to assist with identifying the revisions,
1449 Some operations define custom labels to assist with identifying the revisions,
1440 accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
1450 accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
1441 labels are not available, these will be ``local``, ``other``, and ``base``,
1451 labels are not available, these will be ``local``, ``other``, and ``base``,
1442 respectively.
1452 respectively.
1443 (default: ``$local $base $other``)
1453 (default: ``$local $base $other``)
1444
1454
1445 ``premerge``
1455 ``premerge``
1446 Attempt to run internal non-interactive 3-way merge tool before
1456 Attempt to run internal non-interactive 3-way merge tool before
1447 launching external tool. Options are ``true``, ``false``, ``keep`` or
1457 launching external tool. Options are ``true``, ``false``, ``keep`` or
1448 ``keep-merge3``. The ``keep`` option will leave markers in the file if the
1458 ``keep-merge3``. The ``keep`` option will leave markers in the file if the
1449 premerge fails. The ``keep-merge3`` will do the same but include information
1459 premerge fails. The ``keep-merge3`` will do the same but include information
1450 about the base of the merge in the marker (see internal :merge3 in
1460 about the base of the merge in the marker (see internal :merge3 in
1451 :hg:`help merge-tools`).
1461 :hg:`help merge-tools`).
1452 (default: True)
1462 (default: True)
1453
1463
1454 ``binary``
1464 ``binary``
1455 This tool can merge binary files. (default: False, unless tool
1465 This tool can merge binary files. (default: False, unless tool
1456 was selected by file pattern match)
1466 was selected by file pattern match)
1457
1467
1458 ``symlink``
1468 ``symlink``
1459 This tool can merge symlinks. (default: False)
1469 This tool can merge symlinks. (default: False)
1460
1470
1461 ``check``
1471 ``check``
1462 A list of merge success-checking options:
1472 A list of merge success-checking options:
1463
1473
1464 ``changed``
1474 ``changed``
1465 Ask whether merge was successful when the merged file shows no changes.
1475 Ask whether merge was successful when the merged file shows no changes.
1466 ``conflicts``
1476 ``conflicts``
1467 Check whether there are conflicts even though the tool reported success.
1477 Check whether there are conflicts even though the tool reported success.
1468 ``prompt``
1478 ``prompt``
1469 Always prompt for merge success, regardless of success reported by tool.
1479 Always prompt for merge success, regardless of success reported by tool.
1470
1480
1471 ``fixeol``
1481 ``fixeol``
1472 Attempt to fix up EOL changes caused by the merge tool.
1482 Attempt to fix up EOL changes caused by the merge tool.
1473 (default: False)
1483 (default: False)
1474
1484
1475 ``gui``
1485 ``gui``
1476 This tool requires a graphical interface to run. (default: False)
1486 This tool requires a graphical interface to run. (default: False)
1477
1487
1478 ``mergemarkers``
1488 ``mergemarkers``
1479 Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
1489 Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
1480 ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
1490 ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
1481 ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
1491 ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
1482 markers generated during premerge will be ``detailed`` if either this option or
1492 markers generated during premerge will be ``detailed`` if either this option or
1483 the corresponding option in the ``[ui]`` section is ``detailed``.
1493 the corresponding option in the ``[ui]`` section is ``detailed``.
1484 (default: ``basic``)
1494 (default: ``basic``)
1485
1495
1486 ``mergemarkertemplate``
1496 ``mergemarkertemplate``
1487 This setting can be used to override ``mergemarkertemplate`` from the ``[ui]``
1497 This setting can be used to override ``mergemarkertemplate`` from the ``[ui]``
1488 section on a per-tool basis; this applies to the ``$label``-prefixed variables
1498 section on a per-tool basis; this applies to the ``$label``-prefixed variables
1489 and to the conflict markers that are generated if ``premerge`` is ``keep` or
1499 and to the conflict markers that are generated if ``premerge`` is ``keep` or
1490 ``keep-merge3``. See the corresponding variable in ``[ui]`` for more
1500 ``keep-merge3``. See the corresponding variable in ``[ui]`` for more
1491 information.
1501 information.
1492
1502
1493 .. container:: windows
1503 .. container:: windows
1494
1504
1495 ``regkey``
1505 ``regkey``
1496 Windows registry key which describes install location of this
1506 Windows registry key which describes install location of this
1497 tool. Mercurial will search for this key first under
1507 tool. Mercurial will search for this key first under
1498 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1508 ``HKEY_CURRENT_USER`` and then under ``HKEY_LOCAL_MACHINE``.
1499 (default: None)
1509 (default: None)
1500
1510
1501 ``regkeyalt``
1511 ``regkeyalt``
1502 An alternate Windows registry key to try if the first key is not
1512 An alternate Windows registry key to try if the first key is not
1503 found. The alternate key uses the same ``regname`` and ``regappend``
1513 found. The alternate key uses the same ``regname`` and ``regappend``
1504 semantics of the primary key. The most common use for this key
1514 semantics of the primary key. The most common use for this key
1505 is to search for 32bit applications on 64bit operating systems.
1515 is to search for 32bit applications on 64bit operating systems.
1506 (default: None)
1516 (default: None)
1507
1517
1508 ``regname``
1518 ``regname``
1509 Name of value to read from specified registry key.
1519 Name of value to read from specified registry key.
1510 (default: the unnamed (default) value)
1520 (default: the unnamed (default) value)
1511
1521
1512 ``regappend``
1522 ``regappend``
1513 String to append to the value read from the registry, typically
1523 String to append to the value read from the registry, typically
1514 the executable name of the tool.
1524 the executable name of the tool.
1515 (default: None)
1525 (default: None)
1516
1526
1517 ``pager``
1527 ``pager``
1518 ---------
1528 ---------
1519
1529
1520 Setting used to control when to paginate and with what external tool. See
1530 Setting used to control when to paginate and with what external tool. See
1521 :hg:`help pager` for details.
1531 :hg:`help pager` for details.
1522
1532
1523 ``pager``
1533 ``pager``
1524 Define the external tool used as pager.
1534 Define the external tool used as pager.
1525
1535
1526 If no pager is set, Mercurial uses the environment variable $PAGER.
1536 If no pager is set, Mercurial uses the environment variable $PAGER.
1527 If neither pager.pager, nor $PAGER is set, a default pager will be
1537 If neither pager.pager, nor $PAGER is set, a default pager will be
1528 used, typically `less` on Unix and `more` on Windows. Example::
1538 used, typically `less` on Unix and `more` on Windows. Example::
1529
1539
1530 [pager]
1540 [pager]
1531 pager = less -FRX
1541 pager = less -FRX
1532
1542
1533 ``ignore``
1543 ``ignore``
1534 List of commands to disable the pager for. Example::
1544 List of commands to disable the pager for. Example::
1535
1545
1536 [pager]
1546 [pager]
1537 ignore = version, help, update
1547 ignore = version, help, update
1538
1548
1539 ``patch``
1549 ``patch``
1540 ---------
1550 ---------
1541
1551
1542 Settings used when applying patches, for instance through the 'import'
1552 Settings used when applying patches, for instance through the 'import'
1543 command or with Mercurial Queues extension.
1553 command or with Mercurial Queues extension.
1544
1554
1545 ``eol``
1555 ``eol``
1546 When set to 'strict' patch content and patched files end of lines
1556 When set to 'strict' patch content and patched files end of lines
1547 are preserved. When set to ``lf`` or ``crlf``, both files end of
1557 are preserved. When set to ``lf`` or ``crlf``, both files end of
1548 lines are ignored when patching and the result line endings are
1558 lines are ignored when patching and the result line endings are
1549 normalized to either LF (Unix) or CRLF (Windows). When set to
1559 normalized to either LF (Unix) or CRLF (Windows). When set to
1550 ``auto``, end of lines are again ignored while patching but line
1560 ``auto``, end of lines are again ignored while patching but line
1551 endings in patched files are normalized to their original setting
1561 endings in patched files are normalized to their original setting
1552 on a per-file basis. If target file does not exist or has no end
1562 on a per-file basis. If target file does not exist or has no end
1553 of line, patch line endings are preserved.
1563 of line, patch line endings are preserved.
1554 (default: strict)
1564 (default: strict)
1555
1565
1556 ``fuzz``
1566 ``fuzz``
1557 The number of lines of 'fuzz' to allow when applying patches. This
1567 The number of lines of 'fuzz' to allow when applying patches. This
1558 controls how much context the patcher is allowed to ignore when
1568 controls how much context the patcher is allowed to ignore when
1559 trying to apply a patch.
1569 trying to apply a patch.
1560 (default: 2)
1570 (default: 2)
1561
1571
1562 ``paths``
1572 ``paths``
1563 ---------
1573 ---------
1564
1574
1565 Assigns symbolic names and behavior to repositories.
1575 Assigns symbolic names and behavior to repositories.
1566
1576
1567 Options are symbolic names defining the URL or directory that is the
1577 Options are symbolic names defining the URL or directory that is the
1568 location of the repository. Example::
1578 location of the repository. Example::
1569
1579
1570 [paths]
1580 [paths]
1571 my_server = https://example.com/my_repo
1581 my_server = https://example.com/my_repo
1572 local_path = /home/me/repo
1582 local_path = /home/me/repo
1573
1583
1574 These symbolic names can be used from the command line. To pull
1584 These symbolic names can be used from the command line. To pull
1575 from ``my_server``: :hg:`pull my_server`. To push to ``local_path``:
1585 from ``my_server``: :hg:`pull my_server`. To push to ``local_path``:
1576 :hg:`push local_path`.
1586 :hg:`push local_path`.
1577
1587
1578 Options containing colons (``:``) denote sub-options that can influence
1588 Options containing colons (``:``) denote sub-options that can influence
1579 behavior for that specific path. Example::
1589 behavior for that specific path. Example::
1580
1590
1581 [paths]
1591 [paths]
1582 my_server = https://example.com/my_path
1592 my_server = https://example.com/my_path
1583 my_server:pushurl = ssh://example.com/my_path
1593 my_server:pushurl = ssh://example.com/my_path
1584
1594
1585 The following sub-options can be defined:
1595 The following sub-options can be defined:
1586
1596
1587 ``pushurl``
1597 ``pushurl``
1588 The URL to use for push operations. If not defined, the location
1598 The URL to use for push operations. If not defined, the location
1589 defined by the path's main entry is used.
1599 defined by the path's main entry is used.
1590
1600
1591 ``pushrev``
1601 ``pushrev``
1592 A revset defining which revisions to push by default.
1602 A revset defining which revisions to push by default.
1593
1603
1594 When :hg:`push` is executed without a ``-r`` argument, the revset
1604 When :hg:`push` is executed without a ``-r`` argument, the revset
1595 defined by this sub-option is evaluated to determine what to push.
1605 defined by this sub-option is evaluated to determine what to push.
1596
1606
1597 For example, a value of ``.`` will push the working directory's
1607 For example, a value of ``.`` will push the working directory's
1598 revision by default.
1608 revision by default.
1599
1609
1600 Revsets specifying bookmarks will not result in the bookmark being
1610 Revsets specifying bookmarks will not result in the bookmark being
1601 pushed.
1611 pushed.
1602
1612
1603 The following special named paths exist:
1613 The following special named paths exist:
1604
1614
1605 ``default``
1615 ``default``
1606 The URL or directory to use when no source or remote is specified.
1616 The URL or directory to use when no source or remote is specified.
1607
1617
1608 :hg:`clone` will automatically define this path to the location the
1618 :hg:`clone` will automatically define this path to the location the
1609 repository was cloned from.
1619 repository was cloned from.
1610
1620
1611 ``default-push``
1621 ``default-push``
1612 (deprecated) The URL or directory for the default :hg:`push` location.
1622 (deprecated) The URL or directory for the default :hg:`push` location.
1613 ``default:pushurl`` should be used instead.
1623 ``default:pushurl`` should be used instead.
1614
1624
1615 ``phases``
1625 ``phases``
1616 ----------
1626 ----------
1617
1627
1618 Specifies default handling of phases. See :hg:`help phases` for more
1628 Specifies default handling of phases. See :hg:`help phases` for more
1619 information about working with phases.
1629 information about working with phases.
1620
1630
1621 ``publish``
1631 ``publish``
1622 Controls draft phase behavior when working as a server. When true,
1632 Controls draft phase behavior when working as a server. When true,
1623 pushed changesets are set to public in both client and server and
1633 pushed changesets are set to public in both client and server and
1624 pulled or cloned changesets are set to public in the client.
1634 pulled or cloned changesets are set to public in the client.
1625 (default: True)
1635 (default: True)
1626
1636
1627 ``new-commit``
1637 ``new-commit``
1628 Phase of newly-created commits.
1638 Phase of newly-created commits.
1629 (default: draft)
1639 (default: draft)
1630
1640
1631 ``checksubrepos``
1641 ``checksubrepos``
1632 Check the phase of the current revision of each subrepository. Allowed
1642 Check the phase of the current revision of each subrepository. Allowed
1633 values are "ignore", "follow" and "abort". For settings other than
1643 values are "ignore", "follow" and "abort". For settings other than
1634 "ignore", the phase of the current revision of each subrepository is
1644 "ignore", the phase of the current revision of each subrepository is
1635 checked before committing the parent repository. If any of those phases is
1645 checked before committing the parent repository. If any of those phases is
1636 greater than the phase of the parent repository (e.g. if a subrepo is in a
1646 greater than the phase of the parent repository (e.g. if a subrepo is in a
1637 "secret" phase while the parent repo is in "draft" phase), the commit is
1647 "secret" phase while the parent repo is in "draft" phase), the commit is
1638 either aborted (if checksubrepos is set to "abort") or the higher phase is
1648 either aborted (if checksubrepos is set to "abort") or the higher phase is
1639 used for the parent repository commit (if set to "follow").
1649 used for the parent repository commit (if set to "follow").
1640 (default: follow)
1650 (default: follow)
1641
1651
1642
1652
1643 ``profiling``
1653 ``profiling``
1644 -------------
1654 -------------
1645
1655
1646 Specifies profiling type, format, and file output. Two profilers are
1656 Specifies profiling type, format, and file output. Two profilers are
1647 supported: an instrumenting profiler (named ``ls``), and a sampling
1657 supported: an instrumenting profiler (named ``ls``), and a sampling
1648 profiler (named ``stat``).
1658 profiler (named ``stat``).
1649
1659
1650 In this section description, 'profiling data' stands for the raw data
1660 In this section description, 'profiling data' stands for the raw data
1651 collected during profiling, while 'profiling report' stands for a
1661 collected during profiling, while 'profiling report' stands for a
1652 statistical text report generated from the profiling data.
1662 statistical text report generated from the profiling data.
1653
1663
1654 ``enabled``
1664 ``enabled``
1655 Enable the profiler.
1665 Enable the profiler.
1656 (default: false)
1666 (default: false)
1657
1667
1658 This is equivalent to passing ``--profile`` on the command line.
1668 This is equivalent to passing ``--profile`` on the command line.
1659
1669
1660 ``type``
1670 ``type``
1661 The type of profiler to use.
1671 The type of profiler to use.
1662 (default: stat)
1672 (default: stat)
1663
1673
1664 ``ls``
1674 ``ls``
1665 Use Python's built-in instrumenting profiler. This profiler
1675 Use Python's built-in instrumenting profiler. This profiler
1666 works on all platforms, but each line number it reports is the
1676 works on all platforms, but each line number it reports is the
1667 first line of a function. This restriction makes it difficult to
1677 first line of a function. This restriction makes it difficult to
1668 identify the expensive parts of a non-trivial function.
1678 identify the expensive parts of a non-trivial function.
1669 ``stat``
1679 ``stat``
1670 Use a statistical profiler, statprof. This profiler is most
1680 Use a statistical profiler, statprof. This profiler is most
1671 useful for profiling commands that run for longer than about 0.1
1681 useful for profiling commands that run for longer than about 0.1
1672 seconds.
1682 seconds.
1673
1683
1674 ``format``
1684 ``format``
1675 Profiling format. Specific to the ``ls`` instrumenting profiler.
1685 Profiling format. Specific to the ``ls`` instrumenting profiler.
1676 (default: text)
1686 (default: text)
1677
1687
1678 ``text``
1688 ``text``
1679 Generate a profiling report. When saving to a file, it should be
1689 Generate a profiling report. When saving to a file, it should be
1680 noted that only the report is saved, and the profiling data is
1690 noted that only the report is saved, and the profiling data is
1681 not kept.
1691 not kept.
1682 ``kcachegrind``
1692 ``kcachegrind``
1683 Format profiling data for kcachegrind use: when saving to a
1693 Format profiling data for kcachegrind use: when saving to a
1684 file, the generated file can directly be loaded into
1694 file, the generated file can directly be loaded into
1685 kcachegrind.
1695 kcachegrind.
1686
1696
1687 ``statformat``
1697 ``statformat``
1688 Profiling format for the ``stat`` profiler.
1698 Profiling format for the ``stat`` profiler.
1689 (default: hotpath)
1699 (default: hotpath)
1690
1700
1691 ``hotpath``
1701 ``hotpath``
1692 Show a tree-based display containing the hot path of execution (where
1702 Show a tree-based display containing the hot path of execution (where
1693 most time was spent).
1703 most time was spent).
1694 ``bymethod``
1704 ``bymethod``
1695 Show a table of methods ordered by how frequently they are active.
1705 Show a table of methods ordered by how frequently they are active.
1696 ``byline``
1706 ``byline``
1697 Show a table of lines in files ordered by how frequently they are active.
1707 Show a table of lines in files ordered by how frequently they are active.
1698 ``json``
1708 ``json``
1699 Render profiling data as JSON.
1709 Render profiling data as JSON.
1700
1710
1701 ``frequency``
1711 ``frequency``
1702 Sampling frequency. Specific to the ``stat`` sampling profiler.
1712 Sampling frequency. Specific to the ``stat`` sampling profiler.
1703 (default: 1000)
1713 (default: 1000)
1704
1714
1705 ``output``
1715 ``output``
1706 File path where profiling data or report should be saved. If the
1716 File path where profiling data or report should be saved. If the
1707 file exists, it is replaced. (default: None, data is printed on
1717 file exists, it is replaced. (default: None, data is printed on
1708 stderr)
1718 stderr)
1709
1719
1710 ``sort``
1720 ``sort``
1711 Sort field. Specific to the ``ls`` instrumenting profiler.
1721 Sort field. Specific to the ``ls`` instrumenting profiler.
1712 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1722 One of ``callcount``, ``reccallcount``, ``totaltime`` and
1713 ``inlinetime``.
1723 ``inlinetime``.
1714 (default: inlinetime)
1724 (default: inlinetime)
1715
1725
1716 ``time-track``
1726 ``time-track``
1717 Control if the stat profiler track ``cpu`` or ``real`` time.
1727 Control if the stat profiler track ``cpu`` or ``real`` time.
1718 (default: ``cpu`` on Windows, otherwise ``real``)
1728 (default: ``cpu`` on Windows, otherwise ``real``)
1719
1729
1720 ``limit``
1730 ``limit``
1721 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1731 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1722 (default: 30)
1732 (default: 30)
1723
1733
1724 ``nested``
1734 ``nested``
1725 Show at most this number of lines of drill-down info after each main entry.
1735 Show at most this number of lines of drill-down info after each main entry.
1726 This can help explain the difference between Total and Inline.
1736 This can help explain the difference between Total and Inline.
1727 Specific to the ``ls`` instrumenting profiler.
1737 Specific to the ``ls`` instrumenting profiler.
1728 (default: 0)
1738 (default: 0)
1729
1739
1730 ``showmin``
1740 ``showmin``
1731 Minimum fraction of samples an entry must have for it to be displayed.
1741 Minimum fraction of samples an entry must have for it to be displayed.
1732 Can be specified as a float between ``0.0`` and ``1.0`` or can have a
1742 Can be specified as a float between ``0.0`` and ``1.0`` or can have a
1733 ``%`` afterwards to allow values up to ``100``. e.g. ``5%``.
1743 ``%`` afterwards to allow values up to ``100``. e.g. ``5%``.
1734
1744
1735 Only used by the ``stat`` profiler.
1745 Only used by the ``stat`` profiler.
1736
1746
1737 For the ``hotpath`` format, default is ``0.05``.
1747 For the ``hotpath`` format, default is ``0.05``.
1738 For the ``chrome`` format, default is ``0.005``.
1748 For the ``chrome`` format, default is ``0.005``.
1739
1749
1740 The option is unused on other formats.
1750 The option is unused on other formats.
1741
1751
1742 ``showmax``
1752 ``showmax``
1743 Maximum fraction of samples an entry can have before it is ignored in
1753 Maximum fraction of samples an entry can have before it is ignored in
1744 display. Values format is the same as ``showmin``.
1754 display. Values format is the same as ``showmin``.
1745
1755
1746 Only used by the ``stat`` profiler.
1756 Only used by the ``stat`` profiler.
1747
1757
1748 For the ``chrome`` format, default is ``0.999``.
1758 For the ``chrome`` format, default is ``0.999``.
1749
1759
1750 The option is unused on other formats.
1760 The option is unused on other formats.
1751
1761
1752 ``progress``
1762 ``progress``
1753 ------------
1763 ------------
1754
1764
1755 Mercurial commands can draw progress bars that are as informative as
1765 Mercurial commands can draw progress bars that are as informative as
1756 possible. Some progress bars only offer indeterminate information, while others
1766 possible. Some progress bars only offer indeterminate information, while others
1757 have a definite end point.
1767 have a definite end point.
1758
1768
1759 ``debug``
1769 ``debug``
1760 Whether to print debug info when updating the progress bar. (default: False)
1770 Whether to print debug info when updating the progress bar. (default: False)
1761
1771
1762 ``delay``
1772 ``delay``
1763 Number of seconds (float) before showing the progress bar. (default: 3)
1773 Number of seconds (float) before showing the progress bar. (default: 3)
1764
1774
1765 ``changedelay``
1775 ``changedelay``
1766 Minimum delay before showing a new topic. When set to less than 3 * refresh,
1776 Minimum delay before showing a new topic. When set to less than 3 * refresh,
1767 that value will be used instead. (default: 1)
1777 that value will be used instead. (default: 1)
1768
1778
1769 ``estimateinterval``
1779 ``estimateinterval``
1770 Maximum sampling interval in seconds for speed and estimated time
1780 Maximum sampling interval in seconds for speed and estimated time
1771 calculation. (default: 60)
1781 calculation. (default: 60)
1772
1782
1773 ``refresh``
1783 ``refresh``
1774 Time in seconds between refreshes of the progress bar. (default: 0.1)
1784 Time in seconds between refreshes of the progress bar. (default: 0.1)
1775
1785
1776 ``format``
1786 ``format``
1777 Format of the progress bar.
1787 Format of the progress bar.
1778
1788
1779 Valid entries for the format field are ``topic``, ``bar``, ``number``,
1789 Valid entries for the format field are ``topic``, ``bar``, ``number``,
1780 ``unit``, ``estimate``, ``speed``, and ``item``. ``item`` defaults to the
1790 ``unit``, ``estimate``, ``speed``, and ``item``. ``item`` defaults to the
1781 last 20 characters of the item, but this can be changed by adding either
1791 last 20 characters of the item, but this can be changed by adding either
1782 ``-<num>`` which would take the last num characters, or ``+<num>`` for the
1792 ``-<num>`` which would take the last num characters, or ``+<num>`` for the
1783 first num characters.
1793 first num characters.
1784
1794
1785 (default: topic bar number estimate)
1795 (default: topic bar number estimate)
1786
1796
1787 ``width``
1797 ``width``
1788 If set, the maximum width of the progress information (that is, min(width,
1798 If set, the maximum width of the progress information (that is, min(width,
1789 term width) will be used).
1799 term width) will be used).
1790
1800
1791 ``clear-complete``
1801 ``clear-complete``
1792 Clear the progress bar after it's done. (default: True)
1802 Clear the progress bar after it's done. (default: True)
1793
1803
1794 ``disable``
1804 ``disable``
1795 If true, don't show a progress bar.
1805 If true, don't show a progress bar.
1796
1806
1797 ``assume-tty``
1807 ``assume-tty``
1798 If true, ALWAYS show a progress bar, unless disable is given.
1808 If true, ALWAYS show a progress bar, unless disable is given.
1799
1809
1800 ``rebase``
1810 ``rebase``
1801 ----------
1811 ----------
1802
1812
1803 ``evolution.allowdivergence``
1813 ``evolution.allowdivergence``
1804 Default to False, when True allow creating divergence when performing
1814 Default to False, when True allow creating divergence when performing
1805 rebase of obsolete changesets.
1815 rebase of obsolete changesets.
1806
1816
1807 ``revsetalias``
1817 ``revsetalias``
1808 ---------------
1818 ---------------
1809
1819
1810 Alias definitions for revsets. See :hg:`help revsets` for details.
1820 Alias definitions for revsets. See :hg:`help revsets` for details.
1811
1821
1812 ``rewrite``
1822 ``rewrite``
1813 -----------
1823 -----------
1814
1824
1815 ``backup-bundle``
1825 ``backup-bundle``
1816 Whether to save stripped changesets to a bundle file. (default: True)
1826 Whether to save stripped changesets to a bundle file. (default: True)
1817
1827
1818 ``update-timestamp``
1828 ``update-timestamp``
1819 If true, updates the date and time of the changeset to current. It is only
1829 If true, updates the date and time of the changeset to current. It is only
1820 applicable for hg amend in current version.
1830 applicable for hg amend in current version.
1821
1831
1822 ``storage``
1832 ``storage``
1823 -----------
1833 -----------
1824
1834
1825 Control the strategy Mercurial uses internally to store history. Options in this
1835 Control the strategy Mercurial uses internally to store history. Options in this
1826 category impact performance and repository size.
1836 category impact performance and repository size.
1827
1837
1828 ``revlog.optimize-delta-parent-choice``
1838 ``revlog.optimize-delta-parent-choice``
1829 When storing a merge revision, both parents will be equally considered as
1839 When storing a merge revision, both parents will be equally considered as
1830 a possible delta base. This results in better delta selection and improved
1840 a possible delta base. This results in better delta selection and improved
1831 revlog compression. This option is enabled by default.
1841 revlog compression. This option is enabled by default.
1832
1842
1833 Turning this option off can result in large increase of repository size for
1843 Turning this option off can result in large increase of repository size for
1834 repository with many merges.
1844 repository with many merges.
1835
1845
1836 ``server``
1846 ``server``
1837 ----------
1847 ----------
1838
1848
1839 Controls generic server settings.
1849 Controls generic server settings.
1840
1850
1841 ``bookmarks-pushkey-compat``
1851 ``bookmarks-pushkey-compat``
1842 Trigger pushkey hook when being pushed bookmark updates. This config exist
1852 Trigger pushkey hook when being pushed bookmark updates. This config exist
1843 for compatibility purpose (default to True)
1853 for compatibility purpose (default to True)
1844
1854
1845 If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark
1855 If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark
1846 movement we recommend you migrate them to ``txnclose-bookmark`` and
1856 movement we recommend you migrate them to ``txnclose-bookmark`` and
1847 ``pretxnclose-bookmark``.
1857 ``pretxnclose-bookmark``.
1848
1858
1849 ``compressionengines``
1859 ``compressionengines``
1850 List of compression engines and their relative priority to advertise
1860 List of compression engines and their relative priority to advertise
1851 to clients.
1861 to clients.
1852
1862
1853 The order of compression engines determines their priority, the first
1863 The order of compression engines determines their priority, the first
1854 having the highest priority. If a compression engine is not listed
1864 having the highest priority. If a compression engine is not listed
1855 here, it won't be advertised to clients.
1865 here, it won't be advertised to clients.
1856
1866
1857 If not set (the default), built-in defaults are used. Run
1867 If not set (the default), built-in defaults are used. Run
1858 :hg:`debuginstall` to list available compression engines and their
1868 :hg:`debuginstall` to list available compression engines and their
1859 default wire protocol priority.
1869 default wire protocol priority.
1860
1870
1861 Older Mercurial clients only support zlib compression and this setting
1871 Older Mercurial clients only support zlib compression and this setting
1862 has no effect for legacy clients.
1872 has no effect for legacy clients.
1863
1873
1864 ``uncompressed``
1874 ``uncompressed``
1865 Whether to allow clients to clone a repository using the
1875 Whether to allow clients to clone a repository using the
1866 uncompressed streaming protocol. This transfers about 40% more
1876 uncompressed streaming protocol. This transfers about 40% more
1867 data than a regular clone, but uses less memory and CPU on both
1877 data than a regular clone, but uses less memory and CPU on both
1868 server and client. Over a LAN (100 Mbps or better) or a very fast
1878 server and client. Over a LAN (100 Mbps or better) or a very fast
1869 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
1879 WAN, an uncompressed streaming clone is a lot faster (~10x) than a
1870 regular clone. Over most WAN connections (anything slower than
1880 regular clone. Over most WAN connections (anything slower than
1871 about 6 Mbps), uncompressed streaming is slower, because of the
1881 about 6 Mbps), uncompressed streaming is slower, because of the
1872 extra data transfer overhead. This mode will also temporarily hold
1882 extra data transfer overhead. This mode will also temporarily hold
1873 the write lock while determining what data to transfer.
1883 the write lock while determining what data to transfer.
1874 (default: True)
1884 (default: True)
1875
1885
1876 ``uncompressedallowsecret``
1886 ``uncompressedallowsecret``
1877 Whether to allow stream clones when the repository contains secret
1887 Whether to allow stream clones when the repository contains secret
1878 changesets. (default: False)
1888 changesets. (default: False)
1879
1889
1880 ``preferuncompressed``
1890 ``preferuncompressed``
1881 When set, clients will try to use the uncompressed streaming
1891 When set, clients will try to use the uncompressed streaming
1882 protocol. (default: False)
1892 protocol. (default: False)
1883
1893
1884 ``disablefullbundle``
1894 ``disablefullbundle``
1885 When set, servers will refuse attempts to do pull-based clones.
1895 When set, servers will refuse attempts to do pull-based clones.
1886 If this option is set, ``preferuncompressed`` and/or clone bundles
1896 If this option is set, ``preferuncompressed`` and/or clone bundles
1887 are highly recommended. Partial clones will still be allowed.
1897 are highly recommended. Partial clones will still be allowed.
1888 (default: False)
1898 (default: False)
1889
1899
1890 ``streamunbundle``
1900 ``streamunbundle``
1891 When set, servers will apply data sent from the client directly,
1901 When set, servers will apply data sent from the client directly,
1892 otherwise it will be written to a temporary file first. This option
1902 otherwise it will be written to a temporary file first. This option
1893 effectively prevents concurrent pushes.
1903 effectively prevents concurrent pushes.
1894
1904
1895 ``pullbundle``
1905 ``pullbundle``
1896 When set, the server will check pullbundle.manifest for bundles
1906 When set, the server will check pullbundle.manifest for bundles
1897 covering the requested heads and common nodes. The first matching
1907 covering the requested heads and common nodes. The first matching
1898 entry will be streamed to the client.
1908 entry will be streamed to the client.
1899
1909
1900 For HTTP transport, the stream will still use zlib compression
1910 For HTTP transport, the stream will still use zlib compression
1901 for older clients.
1911 for older clients.
1902
1912
1903 ``concurrent-push-mode``
1913 ``concurrent-push-mode``
1904 Level of allowed race condition between two pushing clients.
1914 Level of allowed race condition between two pushing clients.
1905
1915
1906 - 'strict': push is abort if another client touched the repository
1916 - 'strict': push is abort if another client touched the repository
1907 while the push was preparing. (default)
1917 while the push was preparing. (default)
1908 - 'check-related': push is only aborted if it affects head that got also
1918 - 'check-related': push is only aborted if it affects head that got also
1909 affected while the push was preparing.
1919 affected while the push was preparing.
1910
1920
1911 This requires compatible client (version 4.3 and later). Old client will
1921 This requires compatible client (version 4.3 and later). Old client will
1912 use 'strict'.
1922 use 'strict'.
1913
1923
1914 ``validate``
1924 ``validate``
1915 Whether to validate the completeness of pushed changesets by
1925 Whether to validate the completeness of pushed changesets by
1916 checking that all new file revisions specified in manifests are
1926 checking that all new file revisions specified in manifests are
1917 present. (default: False)
1927 present. (default: False)
1918
1928
1919 ``maxhttpheaderlen``
1929 ``maxhttpheaderlen``
1920 Instruct HTTP clients not to send request headers longer than this
1930 Instruct HTTP clients not to send request headers longer than this
1921 many bytes. (default: 1024)
1931 many bytes. (default: 1024)
1922
1932
1923 ``bundle1``
1933 ``bundle1``
1924 Whether to allow clients to push and pull using the legacy bundle1
1934 Whether to allow clients to push and pull using the legacy bundle1
1925 exchange format. (default: True)
1935 exchange format. (default: True)
1926
1936
1927 ``bundle1gd``
1937 ``bundle1gd``
1928 Like ``bundle1`` but only used if the repository is using the
1938 Like ``bundle1`` but only used if the repository is using the
1929 *generaldelta* storage format. (default: True)
1939 *generaldelta* storage format. (default: True)
1930
1940
1931 ``bundle1.push``
1941 ``bundle1.push``
1932 Whether to allow clients to push using the legacy bundle1 exchange
1942 Whether to allow clients to push using the legacy bundle1 exchange
1933 format. (default: True)
1943 format. (default: True)
1934
1944
1935 ``bundle1gd.push``
1945 ``bundle1gd.push``
1936 Like ``bundle1.push`` but only used if the repository is using the
1946 Like ``bundle1.push`` but only used if the repository is using the
1937 *generaldelta* storage format. (default: True)
1947 *generaldelta* storage format. (default: True)
1938
1948
1939 ``bundle1.pull``
1949 ``bundle1.pull``
1940 Whether to allow clients to pull using the legacy bundle1 exchange
1950 Whether to allow clients to pull using the legacy bundle1 exchange
1941 format. (default: True)
1951 format. (default: True)
1942
1952
1943 ``bundle1gd.pull``
1953 ``bundle1gd.pull``
1944 Like ``bundle1.pull`` but only used if the repository is using the
1954 Like ``bundle1.pull`` but only used if the repository is using the
1945 *generaldelta* storage format. (default: True)
1955 *generaldelta* storage format. (default: True)
1946
1956
1947 Large repositories using the *generaldelta* storage format should
1957 Large repositories using the *generaldelta* storage format should
1948 consider setting this option because converting *generaldelta*
1958 consider setting this option because converting *generaldelta*
1949 repositories to the exchange format required by the bundle1 data
1959 repositories to the exchange format required by the bundle1 data
1950 format can consume a lot of CPU.
1960 format can consume a lot of CPU.
1951
1961
1952 ``bundle2.stream``
1962 ``bundle2.stream``
1953 Whether to allow clients to pull using the bundle2 streaming protocol.
1963 Whether to allow clients to pull using the bundle2 streaming protocol.
1954 (default: True)
1964 (default: True)
1955
1965
1956 ``zliblevel``
1966 ``zliblevel``
1957 Integer between ``-1`` and ``9`` that controls the zlib compression level
1967 Integer between ``-1`` and ``9`` that controls the zlib compression level
1958 for wire protocol commands that send zlib compressed output (notably the
1968 for wire protocol commands that send zlib compressed output (notably the
1959 commands that send repository history data).
1969 commands that send repository history data).
1960
1970
1961 The default (``-1``) uses the default zlib compression level, which is
1971 The default (``-1``) uses the default zlib compression level, which is
1962 likely equivalent to ``6``. ``0`` means no compression. ``9`` means
1972 likely equivalent to ``6``. ``0`` means no compression. ``9`` means
1963 maximum compression.
1973 maximum compression.
1964
1974
1965 Setting this option allows server operators to make trade-offs between
1975 Setting this option allows server operators to make trade-offs between
1966 bandwidth and CPU used. Lowering the compression lowers CPU utilization
1976 bandwidth and CPU used. Lowering the compression lowers CPU utilization
1967 but sends more bytes to clients.
1977 but sends more bytes to clients.
1968
1978
1969 This option only impacts the HTTP server.
1979 This option only impacts the HTTP server.
1970
1980
1971 ``zstdlevel``
1981 ``zstdlevel``
1972 Integer between ``1`` and ``22`` that controls the zstd compression level
1982 Integer between ``1`` and ``22`` that controls the zstd compression level
1973 for wire protocol commands. ``1`` is the minimal amount of compression and
1983 for wire protocol commands. ``1`` is the minimal amount of compression and
1974 ``22`` is the highest amount of compression.
1984 ``22`` is the highest amount of compression.
1975
1985
1976 The default (``3``) should be significantly faster than zlib while likely
1986 The default (``3``) should be significantly faster than zlib while likely
1977 delivering better compression ratios.
1987 delivering better compression ratios.
1978
1988
1979 This option only impacts the HTTP server.
1989 This option only impacts the HTTP server.
1980
1990
1981 See also ``server.zliblevel``.
1991 See also ``server.zliblevel``.
1982
1992
1983 ``smtp``
1993 ``smtp``
1984 --------
1994 --------
1985
1995
1986 Configuration for extensions that need to send email messages.
1996 Configuration for extensions that need to send email messages.
1987
1997
1988 ``host``
1998 ``host``
1989 Host name of mail server, e.g. "mail.example.com".
1999 Host name of mail server, e.g. "mail.example.com".
1990
2000
1991 ``port``
2001 ``port``
1992 Optional. Port to connect to on mail server. (default: 465 if
2002 Optional. Port to connect to on mail server. (default: 465 if
1993 ``tls`` is smtps; 25 otherwise)
2003 ``tls`` is smtps; 25 otherwise)
1994
2004
1995 ``tls``
2005 ``tls``
1996 Optional. Method to enable TLS when connecting to mail server: starttls,
2006 Optional. Method to enable TLS when connecting to mail server: starttls,
1997 smtps or none. (default: none)
2007 smtps or none. (default: none)
1998
2008
1999 ``username``
2009 ``username``
2000 Optional. User name for authenticating with the SMTP server.
2010 Optional. User name for authenticating with the SMTP server.
2001 (default: None)
2011 (default: None)
2002
2012
2003 ``password``
2013 ``password``
2004 Optional. Password for authenticating with the SMTP server. If not
2014 Optional. Password for authenticating with the SMTP server. If not
2005 specified, interactive sessions will prompt the user for a
2015 specified, interactive sessions will prompt the user for a
2006 password; non-interactive sessions will fail. (default: None)
2016 password; non-interactive sessions will fail. (default: None)
2007
2017
2008 ``local_hostname``
2018 ``local_hostname``
2009 Optional. The hostname that the sender can use to identify
2019 Optional. The hostname that the sender can use to identify
2010 itself to the MTA.
2020 itself to the MTA.
2011
2021
2012
2022
2013 ``subpaths``
2023 ``subpaths``
2014 ------------
2024 ------------
2015
2025
2016 Subrepository source URLs can go stale if a remote server changes name
2026 Subrepository source URLs can go stale if a remote server changes name
2017 or becomes temporarily unavailable. This section lets you define
2027 or becomes temporarily unavailable. This section lets you define
2018 rewrite rules of the form::
2028 rewrite rules of the form::
2019
2029
2020 <pattern> = <replacement>
2030 <pattern> = <replacement>
2021
2031
2022 where ``pattern`` is a regular expression matching a subrepository
2032 where ``pattern`` is a regular expression matching a subrepository
2023 source URL and ``replacement`` is the replacement string used to
2033 source URL and ``replacement`` is the replacement string used to
2024 rewrite it. Groups can be matched in ``pattern`` and referenced in
2034 rewrite it. Groups can be matched in ``pattern`` and referenced in
2025 ``replacements``. For instance::
2035 ``replacements``. For instance::
2026
2036
2027 http://server/(.*)-hg/ = http://hg.server/\1/
2037 http://server/(.*)-hg/ = http://hg.server/\1/
2028
2038
2029 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
2039 rewrites ``http://server/foo-hg/`` into ``http://hg.server/foo/``.
2030
2040
2031 Relative subrepository paths are first made absolute, and the
2041 Relative subrepository paths are first made absolute, and the
2032 rewrite rules are then applied on the full (absolute) path. If ``pattern``
2042 rewrite rules are then applied on the full (absolute) path. If ``pattern``
2033 doesn't match the full path, an attempt is made to apply it on the
2043 doesn't match the full path, an attempt is made to apply it on the
2034 relative path alone. The rules are applied in definition order.
2044 relative path alone. The rules are applied in definition order.
2035
2045
2036 ``subrepos``
2046 ``subrepos``
2037 ------------
2047 ------------
2038
2048
2039 This section contains options that control the behavior of the
2049 This section contains options that control the behavior of the
2040 subrepositories feature. See also :hg:`help subrepos`.
2050 subrepositories feature. See also :hg:`help subrepos`.
2041
2051
2042 Security note: auditing in Mercurial is known to be insufficient to
2052 Security note: auditing in Mercurial is known to be insufficient to
2043 prevent clone-time code execution with carefully constructed Git
2053 prevent clone-time code execution with carefully constructed Git
2044 subrepos. It is unknown if a similar detect is present in Subversion
2054 subrepos. It is unknown if a similar detect is present in Subversion
2045 subrepos. Both Git and Subversion subrepos are disabled by default
2055 subrepos. Both Git and Subversion subrepos are disabled by default
2046 out of security concerns. These subrepo types can be enabled using
2056 out of security concerns. These subrepo types can be enabled using
2047 the respective options below.
2057 the respective options below.
2048
2058
2049 ``allowed``
2059 ``allowed``
2050 Whether subrepositories are allowed in the working directory.
2060 Whether subrepositories are allowed in the working directory.
2051
2061
2052 When false, commands involving subrepositories (like :hg:`update`)
2062 When false, commands involving subrepositories (like :hg:`update`)
2053 will fail for all subrepository types.
2063 will fail for all subrepository types.
2054 (default: true)
2064 (default: true)
2055
2065
2056 ``hg:allowed``
2066 ``hg:allowed``
2057 Whether Mercurial subrepositories are allowed in the working
2067 Whether Mercurial subrepositories are allowed in the working
2058 directory. This option only has an effect if ``subrepos.allowed``
2068 directory. This option only has an effect if ``subrepos.allowed``
2059 is true.
2069 is true.
2060 (default: true)
2070 (default: true)
2061
2071
2062 ``git:allowed``
2072 ``git:allowed``
2063 Whether Git subrepositories are allowed in the working directory.
2073 Whether Git subrepositories are allowed in the working directory.
2064 This option only has an effect if ``subrepos.allowed`` is true.
2074 This option only has an effect if ``subrepos.allowed`` is true.
2065
2075
2066 See the security note above before enabling Git subrepos.
2076 See the security note above before enabling Git subrepos.
2067 (default: false)
2077 (default: false)
2068
2078
2069 ``svn:allowed``
2079 ``svn:allowed``
2070 Whether Subversion subrepositories are allowed in the working
2080 Whether Subversion subrepositories are allowed in the working
2071 directory. This option only has an effect if ``subrepos.allowed``
2081 directory. This option only has an effect if ``subrepos.allowed``
2072 is true.
2082 is true.
2073
2083
2074 See the security note above before enabling Subversion subrepos.
2084 See the security note above before enabling Subversion subrepos.
2075 (default: false)
2085 (default: false)
2076
2086
2077 ``templatealias``
2087 ``templatealias``
2078 -----------------
2088 -----------------
2079
2089
2080 Alias definitions for templates. See :hg:`help templates` for details.
2090 Alias definitions for templates. See :hg:`help templates` for details.
2081
2091
2082 ``templates``
2092 ``templates``
2083 -------------
2093 -------------
2084
2094
2085 Use the ``[templates]`` section to define template strings.
2095 Use the ``[templates]`` section to define template strings.
2086 See :hg:`help templates` for details.
2096 See :hg:`help templates` for details.
2087
2097
2088 ``trusted``
2098 ``trusted``
2089 -----------
2099 -----------
2090
2100
2091 Mercurial will not use the settings in the
2101 Mercurial will not use the settings in the
2092 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
2102 ``.hg/hgrc`` file from a repository if it doesn't belong to a trusted
2093 user or to a trusted group, as various hgrc features allow arbitrary
2103 user or to a trusted group, as various hgrc features allow arbitrary
2094 commands to be run. This issue is often encountered when configuring
2104 commands to be run. This issue is often encountered when configuring
2095 hooks or extensions for shared repositories or servers. However,
2105 hooks or extensions for shared repositories or servers. However,
2096 the web interface will use some safe settings from the ``[web]``
2106 the web interface will use some safe settings from the ``[web]``
2097 section.
2107 section.
2098
2108
2099 This section specifies what users and groups are trusted. The
2109 This section specifies what users and groups are trusted. The
2100 current user is always trusted. To trust everybody, list a user or a
2110 current user is always trusted. To trust everybody, list a user or a
2101 group with name ``*``. These settings must be placed in an
2111 group with name ``*``. These settings must be placed in an
2102 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
2112 *already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
2103 user or service running Mercurial.
2113 user or service running Mercurial.
2104
2114
2105 ``users``
2115 ``users``
2106 Comma-separated list of trusted users.
2116 Comma-separated list of trusted users.
2107
2117
2108 ``groups``
2118 ``groups``
2109 Comma-separated list of trusted groups.
2119 Comma-separated list of trusted groups.
2110
2120
2111
2121
2112 ``ui``
2122 ``ui``
2113 ------
2123 ------
2114
2124
2115 User interface controls.
2125 User interface controls.
2116
2126
2117 ``archivemeta``
2127 ``archivemeta``
2118 Whether to include the .hg_archival.txt file containing meta data
2128 Whether to include the .hg_archival.txt file containing meta data
2119 (hashes for the repository base and for tip) in archives created
2129 (hashes for the repository base and for tip) in archives created
2120 by the :hg:`archive` command or downloaded via hgweb.
2130 by the :hg:`archive` command or downloaded via hgweb.
2121 (default: True)
2131 (default: True)
2122
2132
2123 ``askusername``
2133 ``askusername``
2124 Whether to prompt for a username when committing. If True, and
2134 Whether to prompt for a username when committing. If True, and
2125 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
2135 neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
2126 be prompted to enter a username. If no username is entered, the
2136 be prompted to enter a username. If no username is entered, the
2127 default ``USER@HOST`` is used instead.
2137 default ``USER@HOST`` is used instead.
2128 (default: False)
2138 (default: False)
2129
2139
2130 ``clonebundles``
2140 ``clonebundles``
2131 Whether the "clone bundles" feature is enabled.
2141 Whether the "clone bundles" feature is enabled.
2132
2142
2133 When enabled, :hg:`clone` may download and apply a server-advertised
2143 When enabled, :hg:`clone` may download and apply a server-advertised
2134 bundle file from a URL instead of using the normal exchange mechanism.
2144 bundle file from a URL instead of using the normal exchange mechanism.
2135
2145
2136 This can likely result in faster and more reliable clones.
2146 This can likely result in faster and more reliable clones.
2137
2147
2138 (default: True)
2148 (default: True)
2139
2149
2140 ``clonebundlefallback``
2150 ``clonebundlefallback``
2141 Whether failure to apply an advertised "clone bundle" from a server
2151 Whether failure to apply an advertised "clone bundle" from a server
2142 should result in fallback to a regular clone.
2152 should result in fallback to a regular clone.
2143
2153
2144 This is disabled by default because servers advertising "clone
2154 This is disabled by default because servers advertising "clone
2145 bundles" often do so to reduce server load. If advertised bundles
2155 bundles" often do so to reduce server load. If advertised bundles
2146 start mass failing and clients automatically fall back to a regular
2156 start mass failing and clients automatically fall back to a regular
2147 clone, this would add significant and unexpected load to the server
2157 clone, this would add significant and unexpected load to the server
2148 since the server is expecting clone operations to be offloaded to
2158 since the server is expecting clone operations to be offloaded to
2149 pre-generated bundles. Failing fast (the default behavior) ensures
2159 pre-generated bundles. Failing fast (the default behavior) ensures
2150 clients don't overwhelm the server when "clone bundle" application
2160 clients don't overwhelm the server when "clone bundle" application
2151 fails.
2161 fails.
2152
2162
2153 (default: False)
2163 (default: False)
2154
2164
2155 ``clonebundleprefers``
2165 ``clonebundleprefers``
2156 Defines preferences for which "clone bundles" to use.
2166 Defines preferences for which "clone bundles" to use.
2157
2167
2158 Servers advertising "clone bundles" may advertise multiple available
2168 Servers advertising "clone bundles" may advertise multiple available
2159 bundles. Each bundle may have different attributes, such as the bundle
2169 bundles. Each bundle may have different attributes, such as the bundle
2160 type and compression format. This option is used to prefer a particular
2170 type and compression format. This option is used to prefer a particular
2161 bundle over another.
2171 bundle over another.
2162
2172
2163 The following keys are defined by Mercurial:
2173 The following keys are defined by Mercurial:
2164
2174
2165 BUNDLESPEC
2175 BUNDLESPEC
2166 A bundle type specifier. These are strings passed to :hg:`bundle -t`.
2176 A bundle type specifier. These are strings passed to :hg:`bundle -t`.
2167 e.g. ``gzip-v2`` or ``bzip2-v1``.
2177 e.g. ``gzip-v2`` or ``bzip2-v1``.
2168
2178
2169 COMPRESSION
2179 COMPRESSION
2170 The compression format of the bundle. e.g. ``gzip`` and ``bzip2``.
2180 The compression format of the bundle. e.g. ``gzip`` and ``bzip2``.
2171
2181
2172 Server operators may define custom keys.
2182 Server operators may define custom keys.
2173
2183
2174 Example values: ``COMPRESSION=bzip2``,
2184 Example values: ``COMPRESSION=bzip2``,
2175 ``BUNDLESPEC=gzip-v2, COMPRESSION=gzip``.
2185 ``BUNDLESPEC=gzip-v2, COMPRESSION=gzip``.
2176
2186
2177 By default, the first bundle advertised by the server is used.
2187 By default, the first bundle advertised by the server is used.
2178
2188
2179 ``color``
2189 ``color``
2180 When to colorize output. Possible value are Boolean ("yes" or "no"), or
2190 When to colorize output. Possible value are Boolean ("yes" or "no"), or
2181 "debug", or "always". (default: "yes"). "yes" will use color whenever it
2191 "debug", or "always". (default: "yes"). "yes" will use color whenever it
2182 seems possible. See :hg:`help color` for details.
2192 seems possible. See :hg:`help color` for details.
2183
2193
2184 ``commitsubrepos``
2194 ``commitsubrepos``
2185 Whether to commit modified subrepositories when committing the
2195 Whether to commit modified subrepositories when committing the
2186 parent repository. If False and one subrepository has uncommitted
2196 parent repository. If False and one subrepository has uncommitted
2187 changes, abort the commit.
2197 changes, abort the commit.
2188 (default: False)
2198 (default: False)
2189
2199
2190 ``debug``
2200 ``debug``
2191 Print debugging information. (default: False)
2201 Print debugging information. (default: False)
2192
2202
2193 ``editor``
2203 ``editor``
2194 The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
2204 The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
2195
2205
2196 ``fallbackencoding``
2206 ``fallbackencoding``
2197 Encoding to try if it's not possible to decode the changelog using
2207 Encoding to try if it's not possible to decode the changelog using
2198 UTF-8. (default: ISO-8859-1)
2208 UTF-8. (default: ISO-8859-1)
2199
2209
2200 ``graphnodetemplate``
2210 ``graphnodetemplate``
2201 The template used to print changeset nodes in an ASCII revision graph.
2211 The template used to print changeset nodes in an ASCII revision graph.
2202 (default: ``{graphnode}``)
2212 (default: ``{graphnode}``)
2203
2213
2204 ``ignore``
2214 ``ignore``
2205 A file to read per-user ignore patterns from. This file should be
2215 A file to read per-user ignore patterns from. This file should be
2206 in the same format as a repository-wide .hgignore file. Filenames
2216 in the same format as a repository-wide .hgignore file. Filenames
2207 are relative to the repository root. This option supports hook syntax,
2217 are relative to the repository root. This option supports hook syntax,
2208 so if you want to specify multiple ignore files, you can do so by
2218 so if you want to specify multiple ignore files, you can do so by
2209 setting something like ``ignore.other = ~/.hgignore2``. For details
2219 setting something like ``ignore.other = ~/.hgignore2``. For details
2210 of the ignore file format, see the ``hgignore(5)`` man page.
2220 of the ignore file format, see the ``hgignore(5)`` man page.
2211
2221
2212 ``interactive``
2222 ``interactive``
2213 Allow to prompt the user. (default: True)
2223 Allow to prompt the user. (default: True)
2214
2224
2215 ``interface``
2225 ``interface``
2216 Select the default interface for interactive features (default: text).
2226 Select the default interface for interactive features (default: text).
2217 Possible values are 'text' and 'curses'.
2227 Possible values are 'text' and 'curses'.
2218
2228
2219 ``interface.chunkselector``
2229 ``interface.chunkselector``
2220 Select the interface for change recording (e.g. :hg:`commit -i`).
2230 Select the interface for change recording (e.g. :hg:`commit -i`).
2221 Possible values are 'text' and 'curses'.
2231 Possible values are 'text' and 'curses'.
2222 This config overrides the interface specified by ui.interface.
2232 This config overrides the interface specified by ui.interface.
2223
2233
2224 ``large-file-limit``
2234 ``large-file-limit``
2225 Largest file size that gives no memory use warning.
2235 Largest file size that gives no memory use warning.
2226 Possible values are integers or 0 to disable the check.
2236 Possible values are integers or 0 to disable the check.
2227 (default: 10000000)
2237 (default: 10000000)
2228
2238
2229 ``logtemplate``
2239 ``logtemplate``
2230 Template string for commands that print changesets.
2240 Template string for commands that print changesets.
2231
2241
2232 ``merge``
2242 ``merge``
2233 The conflict resolution program to use during a manual merge.
2243 The conflict resolution program to use during a manual merge.
2234 For more information on merge tools see :hg:`help merge-tools`.
2244 For more information on merge tools see :hg:`help merge-tools`.
2235 For configuring merge tools see the ``[merge-tools]`` section.
2245 For configuring merge tools see the ``[merge-tools]`` section.
2236
2246
2237 ``mergemarkers``
2247 ``mergemarkers``
2238 Sets the merge conflict marker label styling. The ``detailed``
2248 Sets the merge conflict marker label styling. The ``detailed``
2239 style uses the ``mergemarkertemplate`` setting to style the labels.
2249 style uses the ``mergemarkertemplate`` setting to style the labels.
2240 The ``basic`` style just uses 'local' and 'other' as the marker label.
2250 The ``basic`` style just uses 'local' and 'other' as the marker label.
2241 One of ``basic`` or ``detailed``.
2251 One of ``basic`` or ``detailed``.
2242 (default: ``basic``)
2252 (default: ``basic``)
2243
2253
2244 ``mergemarkertemplate``
2254 ``mergemarkertemplate``
2245 The template used to print the commit description next to each conflict
2255 The template used to print the commit description next to each conflict
2246 marker during merge conflicts. See :hg:`help templates` for the template
2256 marker during merge conflicts. See :hg:`help templates` for the template
2247 format.
2257 format.
2248
2258
2249 Defaults to showing the hash, tags, branches, bookmarks, author, and
2259 Defaults to showing the hash, tags, branches, bookmarks, author, and
2250 the first line of the commit description.
2260 the first line of the commit description.
2251
2261
2252 If you use non-ASCII characters in names for tags, branches, bookmarks,
2262 If you use non-ASCII characters in names for tags, branches, bookmarks,
2253 authors, and/or commit descriptions, you must pay attention to encodings of
2263 authors, and/or commit descriptions, you must pay attention to encodings of
2254 managed files. At template expansion, non-ASCII characters use the encoding
2264 managed files. At template expansion, non-ASCII characters use the encoding
2255 specified by the ``--encoding`` global option, ``HGENCODING`` or other
2265 specified by the ``--encoding`` global option, ``HGENCODING`` or other
2256 environment variables that govern your locale. If the encoding of the merge
2266 environment variables that govern your locale. If the encoding of the merge
2257 markers is different from the encoding of the merged files,
2267 markers is different from the encoding of the merged files,
2258 serious problems may occur.
2268 serious problems may occur.
2259
2269
2260 Can be overridden per-merge-tool, see the ``[merge-tools]`` section.
2270 Can be overridden per-merge-tool, see the ``[merge-tools]`` section.
2261
2271
2262 ``message-output``
2272 ``message-output``
2263 Where to write status and error messages. (default: ``stdio``)
2273 Where to write status and error messages. (default: ``stdio``)
2264
2274
2265 ``stderr``
2275 ``stderr``
2266 Everything to stderr.
2276 Everything to stderr.
2267 ``stdio``
2277 ``stdio``
2268 Status to stdout, and error to stderr.
2278 Status to stdout, and error to stderr.
2269
2279
2270 ``origbackuppath``
2280 ``origbackuppath``
2271 The path to a directory used to store generated .orig files. If the path is
2281 The path to a directory used to store generated .orig files. If the path is
2272 not a directory, one will be created. If set, files stored in this
2282 not a directory, one will be created. If set, files stored in this
2273 directory have the same name as the original file and do not have a .orig
2283 directory have the same name as the original file and do not have a .orig
2274 suffix.
2284 suffix.
2275
2285
2276 ``paginate``
2286 ``paginate``
2277 Control the pagination of command output (default: True). See :hg:`help pager`
2287 Control the pagination of command output (default: True). See :hg:`help pager`
2278 for details.
2288 for details.
2279
2289
2280 ``patch``
2290 ``patch``
2281 An optional external tool that ``hg import`` and some extensions
2291 An optional external tool that ``hg import`` and some extensions
2282 will use for applying patches. By default Mercurial uses an
2292 will use for applying patches. By default Mercurial uses an
2283 internal patch utility. The external tool must work as the common
2293 internal patch utility. The external tool must work as the common
2284 Unix ``patch`` program. In particular, it must accept a ``-p``
2294 Unix ``patch`` program. In particular, it must accept a ``-p``
2285 argument to strip patch headers, a ``-d`` argument to specify the
2295 argument to strip patch headers, a ``-d`` argument to specify the
2286 current directory, a file name to patch, and a patch file to take
2296 current directory, a file name to patch, and a patch file to take
2287 from stdin.
2297 from stdin.
2288
2298
2289 It is possible to specify a patch tool together with extra
2299 It is possible to specify a patch tool together with extra
2290 arguments. For example, setting this option to ``patch --merge``
2300 arguments. For example, setting this option to ``patch --merge``
2291 will use the ``patch`` program with its 2-way merge option.
2301 will use the ``patch`` program with its 2-way merge option.
2292
2302
2293 ``portablefilenames``
2303 ``portablefilenames``
2294 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
2304 Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
2295 (default: ``warn``)
2305 (default: ``warn``)
2296
2306
2297 ``warn``
2307 ``warn``
2298 Print a warning message on POSIX platforms, if a file with a non-portable
2308 Print a warning message on POSIX platforms, if a file with a non-portable
2299 filename is added (e.g. a file with a name that can't be created on
2309 filename is added (e.g. a file with a name that can't be created on
2300 Windows because it contains reserved parts like ``AUX``, reserved
2310 Windows because it contains reserved parts like ``AUX``, reserved
2301 characters like ``:``, or would cause a case collision with an existing
2311 characters like ``:``, or would cause a case collision with an existing
2302 file).
2312 file).
2303
2313
2304 ``ignore``
2314 ``ignore``
2305 Don't print a warning.
2315 Don't print a warning.
2306
2316
2307 ``abort``
2317 ``abort``
2308 The command is aborted.
2318 The command is aborted.
2309
2319
2310 ``true``
2320 ``true``
2311 Alias for ``warn``.
2321 Alias for ``warn``.
2312
2322
2313 ``false``
2323 ``false``
2314 Alias for ``ignore``.
2324 Alias for ``ignore``.
2315
2325
2316 .. container:: windows
2326 .. container:: windows
2317
2327
2318 On Windows, this configuration option is ignored and the command aborted.
2328 On Windows, this configuration option is ignored and the command aborted.
2319
2329
2320 ``pre-merge-tool-output-template``
2330 ``pre-merge-tool-output-template``
2321 A template that is printed before executing an external merge tool. This can
2331 A template that is printed before executing an external merge tool. This can
2322 be used to print out additional context that might be useful to have during
2332 be used to print out additional context that might be useful to have during
2323 the conflict resolution, such as the description of the various commits
2333 the conflict resolution, such as the description of the various commits
2324 involved or bookmarks/tags.
2334 involved or bookmarks/tags.
2325
2335
2326 Additional information is available in the ``local`, ``base``, and ``other``
2336 Additional information is available in the ``local`, ``base``, and ``other``
2327 dicts. For example: ``{local.label}``, ``{base.name}``, or
2337 dicts. For example: ``{local.label}``, ``{base.name}``, or
2328 ``{other.islink}``.
2338 ``{other.islink}``.
2329
2339
2330 ``quiet``
2340 ``quiet``
2331 Reduce the amount of output printed.
2341 Reduce the amount of output printed.
2332 (default: False)
2342 (default: False)
2333
2343
2334 ``relative-paths``
2344 ``relative-paths``
2335 Prefer relative paths in the UI.
2345 Prefer relative paths in the UI.
2336
2346
2337 ``remotecmd``
2347 ``remotecmd``
2338 Remote command to use for clone/push/pull operations.
2348 Remote command to use for clone/push/pull operations.
2339 (default: ``hg``)
2349 (default: ``hg``)
2340
2350
2341 ``report_untrusted``
2351 ``report_untrusted``
2342 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
2352 Warn if a ``.hg/hgrc`` file is ignored due to not being owned by a
2343 trusted user or group.
2353 trusted user or group.
2344 (default: True)
2354 (default: True)
2345
2355
2346 ``slash``
2356 ``slash``
2347 (Deprecated. Use ``slashpath`` template filter instead.)
2357 (Deprecated. Use ``slashpath`` template filter instead.)
2348
2358
2349 Display paths using a slash (``/``) as the path separator. This
2359 Display paths using a slash (``/``) as the path separator. This
2350 only makes a difference on systems where the default path
2360 only makes a difference on systems where the default path
2351 separator is not the slash character (e.g. Windows uses the
2361 separator is not the slash character (e.g. Windows uses the
2352 backslash character (``\``)).
2362 backslash character (``\``)).
2353 (default: False)
2363 (default: False)
2354
2364
2355 ``statuscopies``
2365 ``statuscopies``
2356 Display copies in the status command.
2366 Display copies in the status command.
2357
2367
2358 ``ssh``
2368 ``ssh``
2359 Command to use for SSH connections. (default: ``ssh``)
2369 Command to use for SSH connections. (default: ``ssh``)
2360
2370
2361 ``ssherrorhint``
2371 ``ssherrorhint``
2362 A hint shown to the user in the case of SSH error (e.g.
2372 A hint shown to the user in the case of SSH error (e.g.
2363 ``Please see http://company/internalwiki/ssh.html``)
2373 ``Please see http://company/internalwiki/ssh.html``)
2364
2374
2365 ``strict``
2375 ``strict``
2366 Require exact command names, instead of allowing unambiguous
2376 Require exact command names, instead of allowing unambiguous
2367 abbreviations. (default: False)
2377 abbreviations. (default: False)
2368
2378
2369 ``style``
2379 ``style``
2370 Name of style to use for command output.
2380 Name of style to use for command output.
2371
2381
2372 ``supportcontact``
2382 ``supportcontact``
2373 A URL where users should report a Mercurial traceback. Use this if you are a
2383 A URL where users should report a Mercurial traceback. Use this if you are a
2374 large organisation with its own Mercurial deployment process and crash
2384 large organisation with its own Mercurial deployment process and crash
2375 reports should be addressed to your internal support.
2385 reports should be addressed to your internal support.
2376
2386
2377 ``textwidth``
2387 ``textwidth``
2378 Maximum width of help text. A longer line generated by ``hg help`` or
2388 Maximum width of help text. A longer line generated by ``hg help`` or
2379 ``hg subcommand --help`` will be broken after white space to get this
2389 ``hg subcommand --help`` will be broken after white space to get this
2380 width or the terminal width, whichever comes first.
2390 width or the terminal width, whichever comes first.
2381 A non-positive value will disable this and the terminal width will be
2391 A non-positive value will disable this and the terminal width will be
2382 used. (default: 78)
2392 used. (default: 78)
2383
2393
2384 ``timeout``
2394 ``timeout``
2385 The timeout used when a lock is held (in seconds), a negative value
2395 The timeout used when a lock is held (in seconds), a negative value
2386 means no timeout. (default: 600)
2396 means no timeout. (default: 600)
2387
2397
2388 ``timeout.warn``
2398 ``timeout.warn``
2389 Time (in seconds) before a warning is printed about held lock. A negative
2399 Time (in seconds) before a warning is printed about held lock. A negative
2390 value means no warning. (default: 0)
2400 value means no warning. (default: 0)
2391
2401
2392 ``traceback``
2402 ``traceback``
2393 Mercurial always prints a traceback when an unknown exception
2403 Mercurial always prints a traceback when an unknown exception
2394 occurs. Setting this to True will make Mercurial print a traceback
2404 occurs. Setting this to True will make Mercurial print a traceback
2395 on all exceptions, even those recognized by Mercurial (such as
2405 on all exceptions, even those recognized by Mercurial (such as
2396 IOError or MemoryError). (default: False)
2406 IOError or MemoryError). (default: False)
2397
2407
2398 ``tweakdefaults``
2408 ``tweakdefaults``
2399
2409
2400 By default Mercurial's behavior changes very little from release
2410 By default Mercurial's behavior changes very little from release
2401 to release, but over time the recommended config settings
2411 to release, but over time the recommended config settings
2402 shift. Enable this config to opt in to get automatic tweaks to
2412 shift. Enable this config to opt in to get automatic tweaks to
2403 Mercurial's behavior over time. This config setting will have no
2413 Mercurial's behavior over time. This config setting will have no
2404 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2414 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2405 not include ``tweakdefaults``. (default: False)
2415 not include ``tweakdefaults``. (default: False)
2406
2416
2407 It currently means::
2417 It currently means::
2408
2418
2409 .. tweakdefaultsmarker
2419 .. tweakdefaultsmarker
2410
2420
2411 ``username``
2421 ``username``
2412 The committer of a changeset created when running "commit".
2422 The committer of a changeset created when running "commit".
2413 Typically a person's name and email address, e.g. ``Fred Widget
2423 Typically a person's name and email address, e.g. ``Fred Widget
2414 <fred@example.com>``. Environment variables in the
2424 <fred@example.com>``. Environment variables in the
2415 username are expanded.
2425 username are expanded.
2416
2426
2417 (default: ``$EMAIL`` or ``username@hostname``. If the username in
2427 (default: ``$EMAIL`` or ``username@hostname``. If the username in
2418 hgrc is empty, e.g. if the system admin set ``username =`` in the
2428 hgrc is empty, e.g. if the system admin set ``username =`` in the
2419 system hgrc, it has to be specified manually or in a different
2429 system hgrc, it has to be specified manually or in a different
2420 hgrc file)
2430 hgrc file)
2421
2431
2422 ``verbose``
2432 ``verbose``
2423 Increase the amount of output printed. (default: False)
2433 Increase the amount of output printed. (default: False)
2424
2434
2425
2435
2426 ``web``
2436 ``web``
2427 -------
2437 -------
2428
2438
2429 Web interface configuration. The settings in this section apply to
2439 Web interface configuration. The settings in this section apply to
2430 both the builtin webserver (started by :hg:`serve`) and the script you
2440 both the builtin webserver (started by :hg:`serve`) and the script you
2431 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
2441 run through a webserver (``hgweb.cgi`` and the derivatives for FastCGI
2432 and WSGI).
2442 and WSGI).
2433
2443
2434 The Mercurial webserver does no authentication (it does not prompt for
2444 The Mercurial webserver does no authentication (it does not prompt for
2435 usernames and passwords to validate *who* users are), but it does do
2445 usernames and passwords to validate *who* users are), but it does do
2436 authorization (it grants or denies access for *authenticated users*
2446 authorization (it grants or denies access for *authenticated users*
2437 based on settings in this section). You must either configure your
2447 based on settings in this section). You must either configure your
2438 webserver to do authentication for you, or disable the authorization
2448 webserver to do authentication for you, or disable the authorization
2439 checks.
2449 checks.
2440
2450
2441 For a quick setup in a trusted environment, e.g., a private LAN, where
2451 For a quick setup in a trusted environment, e.g., a private LAN, where
2442 you want it to accept pushes from anybody, you can use the following
2452 you want it to accept pushes from anybody, you can use the following
2443 command line::
2453 command line::
2444
2454
2445 $ hg --config web.allow-push=* --config web.push_ssl=False serve
2455 $ hg --config web.allow-push=* --config web.push_ssl=False serve
2446
2456
2447 Note that this will allow anybody to push anything to the server and
2457 Note that this will allow anybody to push anything to the server and
2448 that this should not be used for public servers.
2458 that this should not be used for public servers.
2449
2459
2450 The full set of options is:
2460 The full set of options is:
2451
2461
2452 ``accesslog``
2462 ``accesslog``
2453 Where to output the access log. (default: stdout)
2463 Where to output the access log. (default: stdout)
2454
2464
2455 ``address``
2465 ``address``
2456 Interface address to bind to. (default: all)
2466 Interface address to bind to. (default: all)
2457
2467
2458 ``allow-archive``
2468 ``allow-archive``
2459 List of archive format (bz2, gz, zip) allowed for downloading.
2469 List of archive format (bz2, gz, zip) allowed for downloading.
2460 (default: empty)
2470 (default: empty)
2461
2471
2462 ``allowbz2``
2472 ``allowbz2``
2463 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
2473 (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
2464 revisions.
2474 revisions.
2465 (default: False)
2475 (default: False)
2466
2476
2467 ``allowgz``
2477 ``allowgz``
2468 (DEPRECATED) Whether to allow .tar.gz downloading of repository
2478 (DEPRECATED) Whether to allow .tar.gz downloading of repository
2469 revisions.
2479 revisions.
2470 (default: False)
2480 (default: False)
2471
2481
2472 ``allow-pull``
2482 ``allow-pull``
2473 Whether to allow pulling from the repository. (default: True)
2483 Whether to allow pulling from the repository. (default: True)
2474
2484
2475 ``allow-push``
2485 ``allow-push``
2476 Whether to allow pushing to the repository. If empty or not set,
2486 Whether to allow pushing to the repository. If empty or not set,
2477 pushing is not allowed. If the special value ``*``, any remote
2487 pushing is not allowed. If the special value ``*``, any remote
2478 user can push, including unauthenticated users. Otherwise, the
2488 user can push, including unauthenticated users. Otherwise, the
2479 remote user must have been authenticated, and the authenticated
2489 remote user must have been authenticated, and the authenticated
2480 user name must be present in this list. The contents of the
2490 user name must be present in this list. The contents of the
2481 allow-push list are examined after the deny_push list.
2491 allow-push list are examined after the deny_push list.
2482
2492
2483 ``allow_read``
2493 ``allow_read``
2484 If the user has not already been denied repository access due to
2494 If the user has not already been denied repository access due to
2485 the contents of deny_read, this list determines whether to grant
2495 the contents of deny_read, this list determines whether to grant
2486 repository access to the user. If this list is not empty, and the
2496 repository access to the user. If this list is not empty, and the
2487 user is unauthenticated or not present in the list, then access is
2497 user is unauthenticated or not present in the list, then access is
2488 denied for the user. If the list is empty or not set, then access
2498 denied for the user. If the list is empty or not set, then access
2489 is permitted to all users by default. Setting allow_read to the
2499 is permitted to all users by default. Setting allow_read to the
2490 special value ``*`` is equivalent to it not being set (i.e. access
2500 special value ``*`` is equivalent to it not being set (i.e. access
2491 is permitted to all users). The contents of the allow_read list are
2501 is permitted to all users). The contents of the allow_read list are
2492 examined after the deny_read list.
2502 examined after the deny_read list.
2493
2503
2494 ``allowzip``
2504 ``allowzip``
2495 (DEPRECATED) Whether to allow .zip downloading of repository
2505 (DEPRECATED) Whether to allow .zip downloading of repository
2496 revisions. This feature creates temporary files.
2506 revisions. This feature creates temporary files.
2497 (default: False)
2507 (default: False)
2498
2508
2499 ``archivesubrepos``
2509 ``archivesubrepos``
2500 Whether to recurse into subrepositories when archiving.
2510 Whether to recurse into subrepositories when archiving.
2501 (default: False)
2511 (default: False)
2502
2512
2503 ``baseurl``
2513 ``baseurl``
2504 Base URL to use when publishing URLs in other locations, so
2514 Base URL to use when publishing URLs in other locations, so
2505 third-party tools like email notification hooks can construct
2515 third-party tools like email notification hooks can construct
2506 URLs. Example: ``http://hgserver/repos/``.
2516 URLs. Example: ``http://hgserver/repos/``.
2507
2517
2508 ``cacerts``
2518 ``cacerts``
2509 Path to file containing a list of PEM encoded certificate
2519 Path to file containing a list of PEM encoded certificate
2510 authority certificates. Environment variables and ``~user``
2520 authority certificates. Environment variables and ``~user``
2511 constructs are expanded in the filename. If specified on the
2521 constructs are expanded in the filename. If specified on the
2512 client, then it will verify the identity of remote HTTPS servers
2522 client, then it will verify the identity of remote HTTPS servers
2513 with these certificates.
2523 with these certificates.
2514
2524
2515 To disable SSL verification temporarily, specify ``--insecure`` from
2525 To disable SSL verification temporarily, specify ``--insecure`` from
2516 command line.
2526 command line.
2517
2527
2518 You can use OpenSSL's CA certificate file if your platform has
2528 You can use OpenSSL's CA certificate file if your platform has
2519 one. On most Linux systems this will be
2529 one. On most Linux systems this will be
2520 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
2530 ``/etc/ssl/certs/ca-certificates.crt``. Otherwise you will have to
2521 generate this file manually. The form must be as follows::
2531 generate this file manually. The form must be as follows::
2522
2532
2523 -----BEGIN CERTIFICATE-----
2533 -----BEGIN CERTIFICATE-----
2524 ... (certificate in base64 PEM encoding) ...
2534 ... (certificate in base64 PEM encoding) ...
2525 -----END CERTIFICATE-----
2535 -----END CERTIFICATE-----
2526 -----BEGIN CERTIFICATE-----
2536 -----BEGIN CERTIFICATE-----
2527 ... (certificate in base64 PEM encoding) ...
2537 ... (certificate in base64 PEM encoding) ...
2528 -----END CERTIFICATE-----
2538 -----END CERTIFICATE-----
2529
2539
2530 ``cache``
2540 ``cache``
2531 Whether to support caching in hgweb. (default: True)
2541 Whether to support caching in hgweb. (default: True)
2532
2542
2533 ``certificate``
2543 ``certificate``
2534 Certificate to use when running :hg:`serve`.
2544 Certificate to use when running :hg:`serve`.
2535
2545
2536 ``collapse``
2546 ``collapse``
2537 With ``descend`` enabled, repositories in subdirectories are shown at
2547 With ``descend`` enabled, repositories in subdirectories are shown at
2538 a single level alongside repositories in the current path. With
2548 a single level alongside repositories in the current path. With
2539 ``collapse`` also enabled, repositories residing at a deeper level than
2549 ``collapse`` also enabled, repositories residing at a deeper level than
2540 the current path are grouped behind navigable directory entries that
2550 the current path are grouped behind navigable directory entries that
2541 lead to the locations of these repositories. In effect, this setting
2551 lead to the locations of these repositories. In effect, this setting
2542 collapses each collection of repositories found within a subdirectory
2552 collapses each collection of repositories found within a subdirectory
2543 into a single entry for that subdirectory. (default: False)
2553 into a single entry for that subdirectory. (default: False)
2544
2554
2545 ``comparisoncontext``
2555 ``comparisoncontext``
2546 Number of lines of context to show in side-by-side file comparison. If
2556 Number of lines of context to show in side-by-side file comparison. If
2547 negative or the value ``full``, whole files are shown. (default: 5)
2557 negative or the value ``full``, whole files are shown. (default: 5)
2548
2558
2549 This setting can be overridden by a ``context`` request parameter to the
2559 This setting can be overridden by a ``context`` request parameter to the
2550 ``comparison`` command, taking the same values.
2560 ``comparison`` command, taking the same values.
2551
2561
2552 ``contact``
2562 ``contact``
2553 Name or email address of the person in charge of the repository.
2563 Name or email address of the person in charge of the repository.
2554 (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
2564 (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
2555
2565
2556 ``csp``
2566 ``csp``
2557 Send a ``Content-Security-Policy`` HTTP header with this value.
2567 Send a ``Content-Security-Policy`` HTTP header with this value.
2558
2568
2559 The value may contain a special string ``%nonce%``, which will be replaced
2569 The value may contain a special string ``%nonce%``, which will be replaced
2560 by a randomly-generated one-time use value. If the value contains
2570 by a randomly-generated one-time use value. If the value contains
2561 ``%nonce%``, ``web.cache`` will be disabled, as caching undermines the
2571 ``%nonce%``, ``web.cache`` will be disabled, as caching undermines the
2562 one-time property of the nonce. This nonce will also be inserted into
2572 one-time property of the nonce. This nonce will also be inserted into
2563 ``<script>`` elements containing inline JavaScript.
2573 ``<script>`` elements containing inline JavaScript.
2564
2574
2565 Note: lots of HTML content sent by the server is derived from repository
2575 Note: lots of HTML content sent by the server is derived from repository
2566 data. Please consider the potential for malicious repository data to
2576 data. Please consider the potential for malicious repository data to
2567 "inject" itself into generated HTML content as part of your security
2577 "inject" itself into generated HTML content as part of your security
2568 threat model.
2578 threat model.
2569
2579
2570 ``deny_push``
2580 ``deny_push``
2571 Whether to deny pushing to the repository. If empty or not set,
2581 Whether to deny pushing to the repository. If empty or not set,
2572 push is not denied. If the special value ``*``, all remote users are
2582 push is not denied. If the special value ``*``, all remote users are
2573 denied push. Otherwise, unauthenticated users are all denied, and
2583 denied push. Otherwise, unauthenticated users are all denied, and
2574 any authenticated user name present in this list is also denied. The
2584 any authenticated user name present in this list is also denied. The
2575 contents of the deny_push list are examined before the allow-push list.
2585 contents of the deny_push list are examined before the allow-push list.
2576
2586
2577 ``deny_read``
2587 ``deny_read``
2578 Whether to deny reading/viewing of the repository. If this list is
2588 Whether to deny reading/viewing of the repository. If this list is
2579 not empty, unauthenticated users are all denied, and any
2589 not empty, unauthenticated users are all denied, and any
2580 authenticated user name present in this list is also denied access to
2590 authenticated user name present in this list is also denied access to
2581 the repository. If set to the special value ``*``, all remote users
2591 the repository. If set to the special value ``*``, all remote users
2582 are denied access (rarely needed ;). If deny_read is empty or not set,
2592 are denied access (rarely needed ;). If deny_read is empty or not set,
2583 the determination of repository access depends on the presence and
2593 the determination of repository access depends on the presence and
2584 content of the allow_read list (see description). If both
2594 content of the allow_read list (see description). If both
2585 deny_read and allow_read are empty or not set, then access is
2595 deny_read and allow_read are empty or not set, then access is
2586 permitted to all users by default. If the repository is being
2596 permitted to all users by default. If the repository is being
2587 served via hgwebdir, denied users will not be able to see it in
2597 served via hgwebdir, denied users will not be able to see it in
2588 the list of repositories. The contents of the deny_read list have
2598 the list of repositories. The contents of the deny_read list have
2589 priority over (are examined before) the contents of the allow_read
2599 priority over (are examined before) the contents of the allow_read
2590 list.
2600 list.
2591
2601
2592 ``descend``
2602 ``descend``
2593 hgwebdir indexes will not descend into subdirectories. Only repositories
2603 hgwebdir indexes will not descend into subdirectories. Only repositories
2594 directly in the current path will be shown (other repositories are still
2604 directly in the current path will be shown (other repositories are still
2595 available from the index corresponding to their containing path).
2605 available from the index corresponding to their containing path).
2596
2606
2597 ``description``
2607 ``description``
2598 Textual description of the repository's purpose or contents.
2608 Textual description of the repository's purpose or contents.
2599 (default: "unknown")
2609 (default: "unknown")
2600
2610
2601 ``encoding``
2611 ``encoding``
2602 Character encoding name. (default: the current locale charset)
2612 Character encoding name. (default: the current locale charset)
2603 Example: "UTF-8".
2613 Example: "UTF-8".
2604
2614
2605 ``errorlog``
2615 ``errorlog``
2606 Where to output the error log. (default: stderr)
2616 Where to output the error log. (default: stderr)
2607
2617
2608 ``guessmime``
2618 ``guessmime``
2609 Control MIME types for raw download of file content.
2619 Control MIME types for raw download of file content.
2610 Set to True to let hgweb guess the content type from the file
2620 Set to True to let hgweb guess the content type from the file
2611 extension. This will serve HTML files as ``text/html`` and might
2621 extension. This will serve HTML files as ``text/html`` and might
2612 allow cross-site scripting attacks when serving untrusted
2622 allow cross-site scripting attacks when serving untrusted
2613 repositories. (default: False)
2623 repositories. (default: False)
2614
2624
2615 ``hidden``
2625 ``hidden``
2616 Whether to hide the repository in the hgwebdir index.
2626 Whether to hide the repository in the hgwebdir index.
2617 (default: False)
2627 (default: False)
2618
2628
2619 ``ipv6``
2629 ``ipv6``
2620 Whether to use IPv6. (default: False)
2630 Whether to use IPv6. (default: False)
2621
2631
2622 ``labels``
2632 ``labels``
2623 List of string *labels* associated with the repository.
2633 List of string *labels* associated with the repository.
2624
2634
2625 Labels are exposed as a template keyword and can be used to customize
2635 Labels are exposed as a template keyword and can be used to customize
2626 output. e.g. the ``index`` template can group or filter repositories
2636 output. e.g. the ``index`` template can group or filter repositories
2627 by labels and the ``summary`` template can display additional content
2637 by labels and the ``summary`` template can display additional content
2628 if a specific label is present.
2638 if a specific label is present.
2629
2639
2630 ``logoimg``
2640 ``logoimg``
2631 File name of the logo image that some templates display on each page.
2641 File name of the logo image that some templates display on each page.
2632 The file name is relative to ``staticurl``. That is, the full path to
2642 The file name is relative to ``staticurl``. That is, the full path to
2633 the logo image is "staticurl/logoimg".
2643 the logo image is "staticurl/logoimg".
2634 If unset, ``hglogo.png`` will be used.
2644 If unset, ``hglogo.png`` will be used.
2635
2645
2636 ``logourl``
2646 ``logourl``
2637 Base URL to use for logos. If unset, ``https://mercurial-scm.org/``
2647 Base URL to use for logos. If unset, ``https://mercurial-scm.org/``
2638 will be used.
2648 will be used.
2639
2649
2640 ``maxchanges``
2650 ``maxchanges``
2641 Maximum number of changes to list on the changelog. (default: 10)
2651 Maximum number of changes to list on the changelog. (default: 10)
2642
2652
2643 ``maxfiles``
2653 ``maxfiles``
2644 Maximum number of files to list per changeset. (default: 10)
2654 Maximum number of files to list per changeset. (default: 10)
2645
2655
2646 ``maxshortchanges``
2656 ``maxshortchanges``
2647 Maximum number of changes to list on the shortlog, graph or filelog
2657 Maximum number of changes to list on the shortlog, graph or filelog
2648 pages. (default: 60)
2658 pages. (default: 60)
2649
2659
2650 ``name``
2660 ``name``
2651 Repository name to use in the web interface.
2661 Repository name to use in the web interface.
2652 (default: current working directory)
2662 (default: current working directory)
2653
2663
2654 ``port``
2664 ``port``
2655 Port to listen on. (default: 8000)
2665 Port to listen on. (default: 8000)
2656
2666
2657 ``prefix``
2667 ``prefix``
2658 Prefix path to serve from. (default: '' (server root))
2668 Prefix path to serve from. (default: '' (server root))
2659
2669
2660 ``push_ssl``
2670 ``push_ssl``
2661 Whether to require that inbound pushes be transported over SSL to
2671 Whether to require that inbound pushes be transported over SSL to
2662 prevent password sniffing. (default: True)
2672 prevent password sniffing. (default: True)
2663
2673
2664 ``refreshinterval``
2674 ``refreshinterval``
2665 How frequently directory listings re-scan the filesystem for new
2675 How frequently directory listings re-scan the filesystem for new
2666 repositories, in seconds. This is relevant when wildcards are used
2676 repositories, in seconds. This is relevant when wildcards are used
2667 to define paths. Depending on how much filesystem traversal is
2677 to define paths. Depending on how much filesystem traversal is
2668 required, refreshing may negatively impact performance.
2678 required, refreshing may negatively impact performance.
2669
2679
2670 Values less than or equal to 0 always refresh.
2680 Values less than or equal to 0 always refresh.
2671 (default: 20)
2681 (default: 20)
2672
2682
2673 ``server-header``
2683 ``server-header``
2674 Value for HTTP ``Server`` response header.
2684 Value for HTTP ``Server`` response header.
2675
2685
2676 ``static``
2686 ``static``
2677 Directory where static files are served from.
2687 Directory where static files are served from.
2678
2688
2679 ``staticurl``
2689 ``staticurl``
2680 Base URL to use for static files. If unset, static files (e.g. the
2690 Base URL to use for static files. If unset, static files (e.g. the
2681 hgicon.png favicon) will be served by the CGI script itself. Use
2691 hgicon.png favicon) will be served by the CGI script itself. Use
2682 this setting to serve them directly with the HTTP server.
2692 this setting to serve them directly with the HTTP server.
2683 Example: ``http://hgserver/static/``.
2693 Example: ``http://hgserver/static/``.
2684
2694
2685 ``stripes``
2695 ``stripes``
2686 How many lines a "zebra stripe" should span in multi-line output.
2696 How many lines a "zebra stripe" should span in multi-line output.
2687 Set to 0 to disable. (default: 1)
2697 Set to 0 to disable. (default: 1)
2688
2698
2689 ``style``
2699 ``style``
2690 Which template map style to use. The available options are the names of
2700 Which template map style to use. The available options are the names of
2691 subdirectories in the HTML templates path. (default: ``paper``)
2701 subdirectories in the HTML templates path. (default: ``paper``)
2692 Example: ``monoblue``.
2702 Example: ``monoblue``.
2693
2703
2694 ``templates``
2704 ``templates``
2695 Where to find the HTML templates. The default path to the HTML templates
2705 Where to find the HTML templates. The default path to the HTML templates
2696 can be obtained from ``hg debuginstall``.
2706 can be obtained from ``hg debuginstall``.
2697
2707
2698 ``websub``
2708 ``websub``
2699 ----------
2709 ----------
2700
2710
2701 Web substitution filter definition. You can use this section to
2711 Web substitution filter definition. You can use this section to
2702 define a set of regular expression substitution patterns which
2712 define a set of regular expression substitution patterns which
2703 let you automatically modify the hgweb server output.
2713 let you automatically modify the hgweb server output.
2704
2714
2705 The default hgweb templates only apply these substitution patterns
2715 The default hgweb templates only apply these substitution patterns
2706 on the revision description fields. You can apply them anywhere
2716 on the revision description fields. You can apply them anywhere
2707 you want when you create your own templates by adding calls to the
2717 you want when you create your own templates by adding calls to the
2708 "websub" filter (usually after calling the "escape" filter).
2718 "websub" filter (usually after calling the "escape" filter).
2709
2719
2710 This can be used, for example, to convert issue references to links
2720 This can be used, for example, to convert issue references to links
2711 to your issue tracker, or to convert "markdown-like" syntax into
2721 to your issue tracker, or to convert "markdown-like" syntax into
2712 HTML (see the examples below).
2722 HTML (see the examples below).
2713
2723
2714 Each entry in this section names a substitution filter.
2724 Each entry in this section names a substitution filter.
2715 The value of each entry defines the substitution expression itself.
2725 The value of each entry defines the substitution expression itself.
2716 The websub expressions follow the old interhg extension syntax,
2726 The websub expressions follow the old interhg extension syntax,
2717 which in turn imitates the Unix sed replacement syntax::
2727 which in turn imitates the Unix sed replacement syntax::
2718
2728
2719 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
2729 patternname = s/SEARCH_REGEX/REPLACE_EXPRESSION/[i]
2720
2730
2721 You can use any separator other than "/". The final "i" is optional
2731 You can use any separator other than "/". The final "i" is optional
2722 and indicates that the search must be case insensitive.
2732 and indicates that the search must be case insensitive.
2723
2733
2724 Examples::
2734 Examples::
2725
2735
2726 [websub]
2736 [websub]
2727 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
2737 issues = s|issue(\d+)|<a href="http://bts.example.org/issue\1">issue\1</a>|i
2728 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
2738 italic = s/\b_(\S+)_\b/<i>\1<\/i>/
2729 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
2739 bold = s/\*\b(\S+)\b\*/<b>\1<\/b>/
2730
2740
2731 ``worker``
2741 ``worker``
2732 ----------
2742 ----------
2733
2743
2734 Parallel master/worker configuration. We currently perform working
2744 Parallel master/worker configuration. We currently perform working
2735 directory updates in parallel on Unix-like systems, which greatly
2745 directory updates in parallel on Unix-like systems, which greatly
2736 helps performance.
2746 helps performance.
2737
2747
2738 ``enabled``
2748 ``enabled``
2739 Whether to enable workers code to be used.
2749 Whether to enable workers code to be used.
2740 (default: true)
2750 (default: true)
2741
2751
2742 ``numcpus``
2752 ``numcpus``
2743 Number of CPUs to use for parallel operations. A zero or
2753 Number of CPUs to use for parallel operations. A zero or
2744 negative value is treated as ``use the default``.
2754 negative value is treated as ``use the default``.
2745 (default: 4 or the number of CPUs on the system, whichever is larger)
2755 (default: 4 or the number of CPUs on the system, whichever is larger)
2746
2756
2747 ``backgroundclose``
2757 ``backgroundclose``
2748 Whether to enable closing file handles on background threads during certain
2758 Whether to enable closing file handles on background threads during certain
2749 operations. Some platforms aren't very efficient at closing file
2759 operations. Some platforms aren't very efficient at closing file
2750 handles that have been written or appended to. By performing file closing
2760 handles that have been written or appended to. By performing file closing
2751 on background threads, file write rate can increase substantially.
2761 on background threads, file write rate can increase substantially.
2752 (default: true on Windows, false elsewhere)
2762 (default: true on Windows, false elsewhere)
2753
2763
2754 ``backgroundcloseminfilecount``
2764 ``backgroundcloseminfilecount``
2755 Minimum number of files required to trigger background file closing.
2765 Minimum number of files required to trigger background file closing.
2756 Operations not writing this many files won't start background close
2766 Operations not writing this many files won't start background close
2757 threads.
2767 threads.
2758 (default: 2048)
2768 (default: 2048)
2759
2769
2760 ``backgroundclosemaxqueue``
2770 ``backgroundclosemaxqueue``
2761 The maximum number of opened file handles waiting to be closed in the
2771 The maximum number of opened file handles waiting to be closed in the
2762 background. This option only has an effect if ``backgroundclose`` is
2772 background. This option only has an effect if ``backgroundclose`` is
2763 enabled.
2773 enabled.
2764 (default: 384)
2774 (default: 384)
2765
2775
2766 ``backgroundclosethreadcount``
2776 ``backgroundclosethreadcount``
2767 Number of threads to process background file closes. Only relevant if
2777 Number of threads to process background file closes. Only relevant if
2768 ``backgroundclose`` is enabled.
2778 ``backgroundclose`` is enabled.
2769 (default: 4)
2779 (default: 4)
@@ -1,119 +1,119 b''
1 ====
1 ====
2 hg
2 hg
3 ====
3 ====
4
4
5 ---------------------------------------
5 ---------------------------------------
6 Mercurial source code management system
6 Mercurial source code management system
7 ---------------------------------------
7 ---------------------------------------
8
8
9 :Author: Matt Mackall <mpm@selenic.com>
9 :Author: Matt Mackall <mpm@selenic.com>
10 :Organization: Mercurial
10 :Organization: Mercurial
11 :Manual section: 1
11 :Manual section: 1
12 :Manual group: Mercurial Manual
12 :Manual group: Mercurial Manual
13
13
14 .. contents::
14 .. contents::
15 :backlinks: top
15 :backlinks: top
16 :class: htmlonly
16 :class: htmlonly
17 :depth: 1
17 :depth: 1
18
18
19
19
20 Synopsis
20 Synopsis
21 """"""""
21 """"""""
22 **hg** *command* [*option*]... [*argument*]...
22 **hg** *command* [*option*]... [*argument*]...
23
23
24 Description
24 Description
25 """""""""""
25 """""""""""
26 The **hg** command provides a command line interface to the Mercurial
26 The **hg** command provides a command line interface to the Mercurial
27 system.
27 system.
28
28
29 Command Elements
29 Command Elements
30 """"""""""""""""
30 """"""""""""""""
31
31
32 files...
32 files...
33 indicates one or more filename or relative path filenames; see
33 indicates one or more filename or relative path filenames; see
34 `File Name Patterns`_ for information on pattern matching
34 `File Name Patterns`_ for information on pattern matching
35
35
36 path
36 path
37 indicates a path on the local machine
37 indicates a path on the local machine
38
38
39 revision
39 revision
40 indicates a changeset which can be specified as a changeset
40 indicates a changeset which can be specified as a changeset
41 revision number, a tag, or a unique substring of the changeset
41 revision number, a tag, or a unique substring of the changeset
42 hash value
42 hash value
43
43
44 repository path
44 repository path
45 either the pathname of a local repository or the URI of a remote
45 either the pathname of a local repository or the URI of a remote
46 repository.
46 repository.
47
47
48 .. include:: hg.1.gendoc.txt
48 .. include:: hg.1.gendoc.txt
49
49
50 Files
50 Files
51 """""
51 """""
52
52
53 ``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``
53 ``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``
54 This file contains defaults and configuration. Values in
54 This file contains defaults and configuration. Values in
55 ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override
55 ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override
56 settings made in the global ``/etc/mercurial/hgrc`` configuration.
56 settings made in the global ``/etc/mercurial/hgrc`` configuration.
57 See |hgrc(5)|_ for details of the contents and format of these
57 See |hgrc(5)|_ for details of the contents and format of these
58 files.
58 files.
59
59
60 ``.hgignore``
60 ``.hgignore``
61 This file contains regular expressions (one per line) that
61 This file contains regular expressions (one per line) that
62 describe file names that should be ignored by **hg**. For details,
62 describe file names that should be ignored by **hg**. For details,
63 see |hgignore(5)|_.
63 see |hgignore(5)|_.
64
64
65 ``.hgsub``
65 ``.hgsub``
66 This file defines the locations of all subrepositories, and
66 This file defines the locations of all subrepositories, and
67 tells where the subrepository checkouts came from. For details, see
67 tells where the subrepository checkouts came from. For details, see
68 :hg:`help subrepos`.
68 :hg:`help subrepos`.
69
69
70 ``.hgsubstate``
70 ``.hgsubstate``
71 This file is where Mercurial stores all nested repository states. *NB: This
71 This file is where Mercurial stores all nested repository states. *NB: This
72 file should not be edited manually.*
72 file should not be edited manually.*
73
73
74 ``.hgtags``
74 ``.hgtags``
75 This file contains changeset hash values and text tag names (one
75 This file contains changeset hash values and text tag names (one
76 of each separated by spaces) that correspond to tagged versions of
76 of each separated by spaces) that correspond to tagged versions of
77 the repository contents. The file content is encoded using UTF-8.
77 the repository contents. The file content is encoded using UTF-8.
78
78
79 ``.hg/last-message.txt``
79 ``.hg/last-message.txt``
80 This file is used by :hg:`commit` to store a backup of the commit message
80 This file is used by :hg:`commit` to store a backup of the commit message
81 in case the commit fails.
81 in case the commit fails.
82
82
83 ``.hg/localtags``
83 ``.hg/localtags``
84 This file can be used to define local tags which are not shared among
84 This file can be used to define local tags which are not shared among
85 repositories. The file format is the same as for ``.hgtags``, but it is
85 repositories. The file format is the same as for ``.hgtags``, but it is
86 encoded using the local system encoding.
86 encoded using the local system encoding.
87
87
88 Some commands (e.g. revert) produce backup files ending in ``.orig``,
88 Some commands (e.g. revert) produce backup files ending in ``.orig``,
89 if the ``.orig`` file already exists and is not tracked by Mercurial,
89 if the ``.orig`` file already exists and is not tracked by Mercurial,
90 it will be overwritten.
90 it will be overwritten.
91
91
92 Bugs
92 Bugs
93 """"
93 """"
94 Probably lots, please post them to the mailing list (see Resources_
94 Probably lots, please post them to the mailing list (see Resources_
95 below) when you find them.
95 below) when you find them.
96
96
97 See Also
97 See Also
98 """"""""
98 """"""""
99 |hgignore(5)|_, |hgrc(5)|_
99 |hgignore(5)|_, |hgrc(5)|_
100
100
101 Author
101 Author
102 """"""
102 """"""
103 Written by Matt Mackall <mpm@selenic.com>
103 Written by Matt Mackall <mpm@selenic.com>
104
104
105 Resources
105 Resources
106 """""""""
106 """""""""
107 Main Web Site: https://mercurial-scm.org/
107 Main Web Site: https://mercurial-scm.org/
108
108
109 Source code repository: https://www.mercurial-scm.org/repo/hg
109 Source code repository: https://www.mercurial-scm.org/repo/hg
110
110
111 Mailing list: https://www.mercurial-scm.org/mailman/listinfo/mercurial/
111 Mailing list: https://www.mercurial-scm.org/mailman/listinfo/mercurial/
112
112
113 Copying
113 Copying
114 """""""
114 """""""
115 Copyright (C) 2005-2018 Matt Mackall.
115 Copyright (C) 2005-2019 Matt Mackall.
116 Free use of this software is granted under the terms of the GNU General
116 Free use of this software is granted under the terms of the GNU General
117 Public License version 2 or any later version.
117 Public License version 2 or any later version.
118
118
119 .. include:: common.txt
119 .. include:: common.txt
@@ -1,34 +1,34 b''
1 ==========
1 ==========
2 hgignore
2 hgignore
3 ==========
3 ==========
4
4
5 ---------------------------------
5 ---------------------------------
6 syntax for Mercurial ignore files
6 syntax for Mercurial ignore files
7 ---------------------------------
7 ---------------------------------
8
8
9 :Author: Vadim Gelfer <vadim.gelfer@gmail.com>
9 :Author: Vadim Gelfer <vadim.gelfer@gmail.com>
10 :Organization: Mercurial
10 :Organization: Mercurial
11 :Manual section: 5
11 :Manual section: 5
12 :Manual group: Mercurial Manual
12 :Manual group: Mercurial Manual
13
13
14 .. include:: hgignore.5.gendoc.txt
14 .. include:: hgignore.5.gendoc.txt
15
15
16 Author
16 Author
17 ======
17 ======
18 Vadim Gelfer <vadim.gelfer@gmail.com>
18 Vadim Gelfer <vadim.gelfer@gmail.com>
19
19
20 Mercurial was written by Matt Mackall <mpm@selenic.com>.
20 Mercurial was written by Matt Mackall <mpm@selenic.com>.
21
21
22 See Also
22 See Also
23 ========
23 ========
24 |hg(1)|_, |hgrc(5)|_
24 |hg(1)|_, |hgrc(5)|_
25
25
26 Copying
26 Copying
27 =======
27 =======
28 This manual page is copyright 2006 Vadim Gelfer.
28 This manual page is copyright 2006 Vadim Gelfer.
29 Mercurial is copyright 2005-2018 Matt Mackall.
29 Mercurial is copyright 2005-2019 Matt Mackall.
30 Free use of this software is granted under the terms of the GNU General
30 Free use of this software is granted under the terms of the GNU General
31 Public License version 2 or any later version.
31 Public License version 2 or any later version.
32
32
33 .. include:: common.txt
33 .. include:: common.txt
34
34
@@ -1,41 +1,41 b''
1 ======
1 ======
2 hgrc
2 hgrc
3 ======
3 ======
4
4
5 ---------------------------------
5 ---------------------------------
6 configuration files for Mercurial
6 configuration files for Mercurial
7 ---------------------------------
7 ---------------------------------
8
8
9 :Author: Bryan O'Sullivan <bos@serpentine.com>
9 :Author: Bryan O'Sullivan <bos@serpentine.com>
10 :Organization: Mercurial
10 :Organization: Mercurial
11 :Manual section: 5
11 :Manual section: 5
12 :Manual group: Mercurial Manual
12 :Manual group: Mercurial Manual
13
13
14 .. contents::
14 .. contents::
15 :backlinks: top
15 :backlinks: top
16 :class: htmlonly
16 :class: htmlonly
17
17
18
18
19 Description
19 Description
20 ===========
20 ===========
21
21
22 .. include:: hgrc.5.gendoc.txt
22 .. include:: hgrc.5.gendoc.txt
23
23
24 Author
24 Author
25 ======
25 ======
26 Bryan O'Sullivan <bos@serpentine.com>.
26 Bryan O'Sullivan <bos@serpentine.com>.
27
27
28 Mercurial was written by Matt Mackall <mpm@selenic.com>.
28 Mercurial was written by Matt Mackall <mpm@selenic.com>.
29
29
30 See Also
30 See Also
31 ========
31 ========
32 |hg(1)|_, |hgignore(5)|_
32 |hg(1)|_, |hgignore(5)|_
33
33
34 Copying
34 Copying
35 =======
35 =======
36 This manual page is copyright 2005 Bryan O'Sullivan.
36 This manual page is copyright 2005 Bryan O'Sullivan.
37 Mercurial is copyright 2005-2018 Matt Mackall.
37 Mercurial is copyright 2005-2019 Matt Mackall.
38 Free use of this software is granted under the terms of the GNU General
38 Free use of this software is granted under the terms of the GNU General
39 Public License version 2 or any later version.
39 Public License version 2 or any later version.
40
40
41 .. include:: common.txt
41 .. include:: common.txt
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now