Show More
@@ -8,11 +8,11 b'' | |||
|
8 | 8 | '''manage a stack of patches |
|
9 | 9 | |
|
10 | 10 | This extension lets you work with a stack of patches in a Mercurial |
|
11 | repository. It manages two stacks of patches - all known patches, and | |
|
12 |
|
|
|
11 | repository. It manages two stacks of patches - all known patches, and applied | |
|
12 | patches (subset of known patches). | |
|
13 | 13 | |
|
14 | Known patches are represented as patch files in the .hg/patches | |
|
15 |
|
|
|
14 | Known patches are represented as patch files in the .hg/patches directory. | |
|
15 | Applied patches are both patch files and changesets. | |
|
16 | 16 | |
|
17 | 17 | Common tasks (use "hg help command" for more details): |
|
18 | 18 | |
@@ -1681,29 +1681,26 b' def unapplied(ui, repo, patch=None, **op' | |||
|
1681 | 1681 | def qimport(ui, repo, *filename, **opts): |
|
1682 | 1682 | """import a patch |
|
1683 | 1683 | |
|
1684 | The patch is inserted into the series after the last applied | |
|
1685 |
patch |
|
|
1686 | to the series. | |
|
1684 | The patch is inserted into the series after the last applied patch. If no | |
|
1685 | patches have been applied, qimport prepends the patch to the series. | |
|
1687 | 1686 | |
|
1688 | The patch will have the same name as its source file unless you | |
|
1689 |
|
|
|
1687 | The patch will have the same name as its source file unless you give it a | |
|
1688 | new one with -n/--name. | |
|
1690 | 1689 | |
|
1691 | You can register an existing patch inside the patch directory with | |
|
1692 |
|
|
|
1690 | You can register an existing patch inside the patch directory with the | |
|
1691 | -e/--existing flag. | |
|
1693 | 1692 | |
|
1694 | With -f/--force, an existing patch of the same name will be | |
|
1695 | overwritten. | |
|
1693 | With -f/--force, an existing patch of the same name will be overwritten. | |
|
1696 | 1694 | |
|
1697 | An existing changeset may be placed under mq control with -r/--rev | |
|
1698 |
|
|
|
1699 |
|
|
|
1700 |
|
|
|
1701 |
|
|
|
1702 | changes. | |
|
1695 | An existing changeset may be placed under mq control with -r/--rev (e.g. | |
|
1696 | qimport --rev tip -n patch will place tip under mq control). With | |
|
1697 | -g/--git, patches imported with --rev will use the git diff format. See | |
|
1698 | the diffs help topic for information on why this is important for | |
|
1699 | preserving rename/copy information and permission changes. | |
|
1703 | 1700 | |
|
1704 | To import a patch from standard input, pass - as the patch file. | |
|
1705 |
|
|
|
1706 |
|
|
|
1701 | To import a patch from standard input, pass - as the patch file. When | |
|
1702 | importing from standard input, a patch name must be specified using the | |
|
1703 | --name flag. | |
|
1707 | 1704 | """ |
|
1708 | 1705 | q = repo.mq |
|
1709 | 1706 | q.qimport(repo, filename, patchname=opts['name'], |
@@ -1718,11 +1715,12 b' def qimport(ui, repo, *filename, **opts)' | |||
|
1718 | 1715 | def init(ui, repo, **opts): |
|
1719 | 1716 | """init a new queue repository |
|
1720 | 1717 | |
|
1721 | The queue repository is unversioned by default. If | |
|
1722 |
|
|
|
1723 |
|
|
|
1724 | an unversioned patch repository into a versioned one). You can use | |
|
1725 | qcommit to commit changes to this queue repository.""" | |
|
1718 | The queue repository is unversioned by default. If -c/--create-repo is | |
|
1719 | specified, qinit will create a separate nested repository for patches | |
|
1720 | (qinit -c may also be run later to convert an unversioned patch repository | |
|
1721 | into a versioned one). You can use qcommit to commit changes to this queue | |
|
1722 | repository. | |
|
1723 | """ | |
|
1726 | 1724 | q = repo.mq |
|
1727 | 1725 | r = q.init(repo, create=opts['create_repo']) |
|
1728 | 1726 | q.save_dirty() |
@@ -1744,17 +1742,16 b' def init(ui, repo, **opts):' | |||
|
1744 | 1742 | def clone(ui, source, dest=None, **opts): |
|
1745 | 1743 | '''clone main and patch repository at same time |
|
1746 | 1744 | |
|
1747 | If source is local, destination will have no patches applied. If | |
|
1748 |
|
|
|
1749 | applied in source, so cannot guarantee that patches are not | |
|
1750 | applied in destination. If you clone remote repository, be sure | |
|
1751 | before that it has no patches applied. | |
|
1745 | If source is local, destination will have no patches applied. If source is | |
|
1746 | remote, this command can not check if patches are applied in source, so | |
|
1747 | cannot guarantee that patches are not applied in destination. If you clone | |
|
1748 | remote repository, be sure before that it has no patches applied. | |
|
1752 | 1749 | |
|
1753 | Source patch repository is looked for in <src>/.hg/patches by | |
|
1754 |
|
|
|
1750 | Source patch repository is looked for in <src>/.hg/patches by default. Use | |
|
1751 | -p <url> to change. | |
|
1755 | 1752 | |
|
1756 | The patch directory must be a nested Mercurial repository, as | |
|
1757 |
|
|
|
1753 | The patch directory must be a nested Mercurial repository, as would be | |
|
1754 | created by qinit -c. | |
|
1758 | 1755 | ''' |
|
1759 | 1756 | def patchdir(repo): |
|
1760 | 1757 | url = repo.url() |
@@ -1860,26 +1857,24 b' def setupheaderopts(ui, opts):' | |||
|
1860 | 1857 | def new(ui, repo, patch, *args, **opts): |
|
1861 | 1858 | """create a new patch |
|
1862 | 1859 | |
|
1863 | qnew creates a new patch on top of the currently-applied patch (if | |
|
1864 |
|
|
|
1865 |
|
|
|
1866 | initialized with them. You may also use -I/--include, | |
|
1867 | -X/--exclude, and/or a list of files after the patch name to add | |
|
1868 | only changes to matching files to the new patch, leaving the rest | |
|
1869 | as uncommitted modifications. | |
|
1860 | qnew creates a new patch on top of the currently-applied patch (if any). | |
|
1861 | It will refuse to run if there are any outstanding changes unless | |
|
1862 | -f/--force is specified, in which case the patch will be initialized with | |
|
1863 | them. You may also use -I/--include, -X/--exclude, and/or a list of files | |
|
1864 | after the patch name to add only changes to matching files to the new | |
|
1865 | patch, leaving the rest as uncommitted modifications. | |
|
1870 | 1866 | |
|
1871 | -u/--user and -d/--date can be used to set the (given) user and | |
|
1872 |
|
|
|
1873 |
|
|
|
1867 | -u/--user and -d/--date can be used to set the (given) user and date, | |
|
1868 | respectively. -U/--currentuser and -D/--currentdate set user to current | |
|
1869 | user and date to current date. | |
|
1874 | 1870 | |
|
1875 | -e/--edit, -m/--message or -l/--logfile set the patch header as | |
|
1876 |
|
|
|
1877 |
|
|
|
1871 | -e/--edit, -m/--message or -l/--logfile set the patch header as well as | |
|
1872 | the commit message. If none is specified, the header is empty and the | |
|
1873 | commit message is '[mq]: PATCH'. | |
|
1878 | 1874 | |
|
1879 | Use the -g/--git option to keep the patch in the git extended diff | |
|
1880 |
|
|
|
1881 |
|
|
|
1882 | information. | |
|
1875 | Use the -g/--git option to keep the patch in the git extended diff format. | |
|
1876 | Read the diffs help topic for more information on why this is important | |
|
1877 | for preserving permission changes and copy/rename information. | |
|
1883 | 1878 | """ |
|
1884 | 1879 | msg = cmdutil.logmessage(opts) |
|
1885 | 1880 | def getmsg(): return ui.edit(msg, ui.username()) |
@@ -1897,17 +1892,16 b' def new(ui, repo, patch, *args, **opts):' | |||
|
1897 | 1892 | def refresh(ui, repo, *pats, **opts): |
|
1898 | 1893 | """update the current patch |
|
1899 | 1894 | |
|
1900 | If any file patterns are provided, the refreshed patch will | |
|
1901 |
|
|
|
1902 |
|
|
|
1895 | If any file patterns are provided, the refreshed patch will contain only | |
|
1896 | the modifications that match those patterns; the remaining modifications | |
|
1897 | will remain in the working directory. | |
|
1903 | 1898 | |
|
1904 | If -s/--short is specified, files currently included in the patch | |
|
1905 |
|
|
|
1899 | If -s/--short is specified, files currently included in the patch will be | |
|
1900 | refreshed just like matched files and remain in the patch. | |
|
1906 | 1901 | |
|
1907 | hg add/remove/copy/rename work as usual, though you might want to | |
|
1908 |
|
|
|
1909 |
|
|
|
1910 | git diff format. | |
|
1902 | hg add/remove/copy/rename work as usual, though you might want to use | |
|
1903 | git-style patches (-g/--git or [diff] git=1) to track copies and renames. | |
|
1904 | See the diffs help topic for more information on the git diff format. | |
|
1911 | 1905 | """ |
|
1912 | 1906 | q = repo.mq |
|
1913 | 1907 | message = cmdutil.logmessage(opts) |
@@ -1928,15 +1922,13 b' def refresh(ui, repo, *pats, **opts):' | |||
|
1928 | 1922 | def diff(ui, repo, *pats, **opts): |
|
1929 | 1923 | """diff of the current patch and subsequent modifications |
|
1930 | 1924 | |
|
1931 | Shows a diff which includes the current patch as well as any | |
|
1932 |
|
|
|
1933 |
|
|
|
1934 | after a qrefresh). | |
|
1925 | Shows a diff which includes the current patch as well as any changes which | |
|
1926 | have been made in the working directory since the last refresh (thus | |
|
1927 | showing what the current patch would become after a qrefresh). | |
|
1935 | 1928 | |
|
1936 | Use 'hg diff' if you only want to see the changes made since the | |
|
1937 |
|
|
|
1938 |
|
|
|
1939 | qrefresh. | |
|
1929 | Use 'hg diff' if you only want to see the changes made since the last | |
|
1930 | qrefresh, or 'hg export qtip' if you want to see changes made by the | |
|
1931 | current patch without including changes made since the qrefresh. | |
|
1940 | 1932 | """ |
|
1941 | 1933 | repo.mq.diff(repo, pats, opts) |
|
1942 | 1934 | return 0 |
@@ -1944,15 +1936,15 b' def diff(ui, repo, *pats, **opts):' | |||
|
1944 | 1936 | def fold(ui, repo, *files, **opts): |
|
1945 | 1937 | """fold the named patches into the current patch |
|
1946 | 1938 | |
|
1947 | Patches must not yet be applied. Each patch will be successively | |
|
1948 |
|
|
|
1949 |
|
|
|
1950 | with the new cumulative patch, and the folded patches will be | |
|
1951 | deleted. With -k/--keep, the folded patch files will not be | |
|
1952 | removed afterwards. | |
|
1939 | Patches must not yet be applied. Each patch will be successively applied | |
|
1940 | to the current patch in the order given. If all the patches apply | |
|
1941 | successfully, the current patch will be refreshed with the new cumulative | |
|
1942 | patch, and the folded patches will be deleted. With -k/--keep, the folded | |
|
1943 | patch files will not be removed afterwards. | |
|
1953 | 1944 | |
|
1954 | The header for each folded patch will be concatenated with the | |
|
1955 |
|
|
|
1945 | The header for each folded patch will be concatenated with the current | |
|
1946 | patch header, separated by a line of '* * *'. | |
|
1947 | """ | |
|
1956 | 1948 | |
|
1957 | 1949 | q = repo.mq |
|
1958 | 1950 | |
@@ -2018,14 +2010,13 b' def goto(ui, repo, patch, **opts):' | |||
|
2018 | 2010 | def guard(ui, repo, *args, **opts): |
|
2019 | 2011 | '''set or print guards for a patch |
|
2020 | 2012 | |
|
2021 | Guards control whether a patch can be pushed. A patch with no | |
|
2022 |
|
|
|
2023 |
|
|
|
2024 |
|
|
|
2025 | has activated it. | |
|
2013 | Guards control whether a patch can be pushed. A patch with no guards is | |
|
2014 | always pushed. A patch with a positive guard ("+foo") is pushed only if | |
|
2015 | the qselect command has activated it. A patch with a negative guard | |
|
2016 | ("-foo") is never pushed if the qselect command has activated it. | |
|
2026 | 2017 | |
|
2027 | With no arguments, print the currently active guards. | |
|
2028 |
|
|
|
2018 | With no arguments, print the currently active guards. With arguments, set | |
|
2019 | guards for the named patch. | |
|
2029 | 2020 | NOTE: Specifying negative guards now requires '--'. |
|
2030 | 2021 | |
|
2031 | 2022 | To set guards on another patch: |
@@ -2102,8 +2093,8 b' def savename(path):' | |||
|
2102 | 2093 | def push(ui, repo, patch=None, **opts): |
|
2103 | 2094 | """push the next patch onto the stack |
|
2104 | 2095 | |
|
2105 | When -f/--force is applied, all local changes in patched files | |
|
2106 |
|
|
|
2096 | When -f/--force is applied, all local changes in patched files will be | |
|
2097 | lost. | |
|
2107 | 2098 | """ |
|
2108 | 2099 | q = repo.mq |
|
2109 | 2100 | mergeq = None |
@@ -2125,9 +2116,9 b' def push(ui, repo, patch=None, **opts):' | |||
|
2125 | 2116 | def pop(ui, repo, patch=None, **opts): |
|
2126 | 2117 | """pop the current patch off the stack |
|
2127 | 2118 | |
|
2128 | By default, pops off the top of the patch stack. If given a patch | |
|
2129 |
|
|
|
2130 |
|
|
|
2119 | By default, pops off the top of the patch stack. If given a patch name, | |
|
2120 | keeps popping off patches until the named patch is at the top of the | |
|
2121 | stack. | |
|
2131 | 2122 | """ |
|
2132 | 2123 | localupdate = True |
|
2133 | 2124 | if opts['name']: |
@@ -2244,8 +2235,7 b' def strip(ui, repo, rev, **opts):' | |||
|
2244 | 2235 | """strip a revision and all its descendants from the repository |
|
2245 | 2236 | |
|
2246 | 2237 | If one of the working directory's parent revisions is stripped, the |
|
2247 | working directory will be updated to the parent of the stripped | |
|
2248 | revision. | |
|
2238 | working directory will be updated to the parent of the stripped revision. | |
|
2249 | 2239 | """ |
|
2250 | 2240 | backup = 'all' |
|
2251 | 2241 | if opts['backup']: |
@@ -2270,35 +2260,33 b' def strip(ui, repo, rev, **opts):' | |||
|
2270 | 2260 | def select(ui, repo, *args, **opts): |
|
2271 | 2261 | '''set or print guarded patches to push |
|
2272 | 2262 | |
|
2273 | Use the qguard command to set or print guards on patch, then use | |
|
2274 |
|
|
|
2275 |
|
|
|
2276 | selected guard, but will not be pushed if any negative guards | |
|
2277 | match the current guard. For example: | |
|
2263 | Use the qguard command to set or print guards on patch, then use qselect | |
|
2264 | to tell mq which guards to use. A patch will be pushed if it has no guards | |
|
2265 | or any positive guards match the currently selected guard, but will not be | |
|
2266 | pushed if any negative guards match the current guard. For example: | |
|
2278 | 2267 | |
|
2279 | 2268 | qguard foo.patch -stable (negative guard) |
|
2280 | 2269 | qguard bar.patch +stable (positive guard) |
|
2281 | 2270 | qselect stable |
|
2282 | 2271 | |
|
2283 | This activates the "stable" guard. mq will skip foo.patch (because | |
|
2284 |
|
|
|
2285 | positive match). | |
|
2272 | This activates the "stable" guard. mq will skip foo.patch (because it has | |
|
2273 | a negative match) but push bar.patch (because it has a positive match). | |
|
2286 | 2274 | |
|
2287 | With no arguments, prints the currently active guards. | |
|
2288 |
|
|
|
2275 | With no arguments, prints the currently active guards. With one argument, | |
|
2276 | sets the active guard. | |
|
2289 | 2277 | |
|
2290 | Use -n/--none to deactivate guards (no other arguments needed). | |
|
2291 |
|
|
|
2292 |
|
|
|
2278 | Use -n/--none to deactivate guards (no other arguments needed). When no | |
|
2279 | guards are active, patches with positive guards are skipped and patches | |
|
2280 | with negative guards are pushed. | |
|
2293 | 2281 | |
|
2294 | qselect can change the guards on applied patches. It does not pop | |
|
2295 |
|
|
|
2296 |
|
|
|
2297 |
|
|
|
2298 | guarded patches. | |
|
2282 | qselect can change the guards on applied patches. It does not pop guarded | |
|
2283 | patches by default. Use --pop to pop back to the last applied patch that | |
|
2284 | is not guarded. Use --reapply (which implies --pop) to push back to the | |
|
2285 | current patch afterwards, but skip guarded patches. | |
|
2299 | 2286 | |
|
2300 | Use -s/--series to print a list of all guards in the series file | |
|
2301 |
|
|
|
2287 | Use -s/--series to print a list of all guards in the series file (no other | |
|
2288 | arguments needed). Use -v for more information. | |
|
2289 | ''' | |
|
2302 | 2290 | |
|
2303 | 2291 | q = repo.mq |
|
2304 | 2292 | guards = q.active() |
@@ -2373,18 +2361,16 b' def select(ui, repo, *args, **opts):' | |||
|
2373 | 2361 | def finish(ui, repo, *revrange, **opts): |
|
2374 | 2362 | """move applied patches into repository history |
|
2375 | 2363 | |
|
2376 | Finishes the specified revisions (corresponding to applied | |
|
2377 |
|
|
|
2378 | history. | |
|
2364 | Finishes the specified revisions (corresponding to applied patches) by | |
|
2365 | moving them out of mq control into regular repository history. | |
|
2379 | 2366 | |
|
2380 | Accepts a revision range or the -a/--applied option. If --applied | |
|
2381 |
|
|
|
2382 |
|
|
|
2383 | stack of applied patches. | |
|
2367 | Accepts a revision range or the -a/--applied option. If --applied is | |
|
2368 | specified, all applied mq revisions are removed from mq control. | |
|
2369 | Otherwise, the given revisions must be at the base of the stack of applied | |
|
2370 | patches. | |
|
2384 | 2371 | |
|
2385 | This can be especially useful if your changes have been applied to | |
|
2386 |
|
|
|
2387 | to upstream. | |
|
2372 | This can be especially useful if your changes have been applied to an | |
|
2373 | upstream repository, or if you are about to push your changes to upstream. | |
|
2388 | 2374 | """ |
|
2389 | 2375 | if not opts['applied'] and not revrange: |
|
2390 | 2376 | raise util.Abort(_('no revisions specified')) |
@@ -2,11 +2,11 b'' | |||
|
2 | 2 | mq extension - manage a stack of patches |
|
3 | 3 | |
|
4 | 4 | This extension lets you work with a stack of patches in a Mercurial |
|
5 | repository. It manages two stacks of patches - all known patches, and | |
|
6 |
|
|
|
5 | repository. It manages two stacks of patches - all known patches, and applied | |
|
6 | patches (subset of known patches). | |
|
7 | 7 | |
|
8 | Known patches are represented as patch files in the .hg/patches | |
|
9 |
|
|
|
8 | Known patches are represented as patch files in the .hg/patches directory. | |
|
9 | Applied patches are both patch files and changesets. | |
|
10 | 10 | |
|
11 | 11 | Common tasks (use "hg help command" for more details): |
|
12 | 12 |
General Comments 0
You need to be logged in to leave comments.
Login now