Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 2019:ced2d3620f95
add merge command. means same thing as "update -m".
repo.addchangegroup method now returns number of heads modified and added,
so command line can tell whether update or merge needed. this makes
tiny change to ssh wire protocol, but change is backwards compatible.
pull command now returns 0 if no changes to pull.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Wed, 29 Mar 2006 10:27:16 -0800 |
parents | 4c70b10f0418 |
children | 00925397236c |
comparison
equal
deleted
inserted
replaced
2015:1a09814a5b1f | 2019:ced2d3620f95 |
---|---|
1996 files.sort() | 1996 files.sort() |
1997 | 1997 |
1998 for f in files: | 1998 for f in files: |
1999 ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f)) | 1999 ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f)) |
2000 | 2000 |
2001 def merge(ui, repo, node=None, **opts): | |
2002 """Merge working directory with another revision | |
2003 | |
2004 Merge the contents of the current working directory and the | |
2005 requested revision. Files that changed between either parent are | |
2006 marked as changed for the next commit and a commit must be | |
2007 performed before any further updates are allowed. | |
2008 """ | |
2009 return update(ui, repo, node=node, merge=True, **opts) | |
2010 | |
2001 def outgoing(ui, repo, dest="default-push", **opts): | 2011 def outgoing(ui, repo, dest="default-push", **opts): |
2002 """show changesets not found in destination | 2012 """show changesets not found in destination |
2003 | 2013 |
2004 Show changesets not found in the specified destination repository or | 2014 Show changesets not found in the specified destination repository or |
2005 the default push location. These are the changesets that would be pushed | 2015 the default push location. These are the changesets that would be pushed |
2068 return 1 | 2078 return 1 |
2069 else: | 2079 else: |
2070 for name, path in ui.configitems("paths"): | 2080 for name, path in ui.configitems("paths"): |
2071 ui.write("%s = %s\n" % (name, path)) | 2081 ui.write("%s = %s\n" % (name, path)) |
2072 | 2082 |
2083 def postincoming(ui, repo, modheads, optupdate): | |
2084 if modheads == 0: | |
2085 return | |
2086 if optupdate: | |
2087 if modheads == 1: | |
2088 return update(ui, repo) | |
2089 else: | |
2090 ui.status(_("not updating, since new heads added\n")) | |
2091 if modheads > 1: | |
2092 ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n")) | |
2093 else: | |
2094 ui.status(_("(run 'hg update' to get a working copy)\n")) | |
2095 | |
2073 def pull(ui, repo, source="default", **opts): | 2096 def pull(ui, repo, source="default", **opts): |
2074 """pull changes from the specified source | 2097 """pull changes from the specified source |
2075 | 2098 |
2076 Pull changes from a remote repository to a local one. | 2099 Pull changes from a remote repository to a local one. |
2077 | 2100 |
2112 revs = None | 2135 revs = None |
2113 if opts['rev'] and not other.local(): | 2136 if opts['rev'] and not other.local(): |
2114 raise util.Abort(_("pull -r doesn't work for remote repositories yet")) | 2137 raise util.Abort(_("pull -r doesn't work for remote repositories yet")) |
2115 elif opts['rev']: | 2138 elif opts['rev']: |
2116 revs = [other.lookup(rev) for rev in opts['rev']] | 2139 revs = [other.lookup(rev) for rev in opts['rev']] |
2117 r = repo.pull(other, heads=revs, force=opts['force']) | 2140 modheads = repo.pull(other, heads=revs, force=opts['force']) |
2118 if not r: | 2141 return postincoming(ui, repo, modheads, opts['update']) |
2119 if opts['update']: | |
2120 return update(ui, repo) | |
2121 else: | |
2122 ui.status(_("(run 'hg update' to get a working copy)\n")) | |
2123 | |
2124 return r | |
2125 | 2142 |
2126 def push(ui, repo, dest="default-push", **opts): | 2143 def push(ui, repo, dest="default-push", **opts): |
2127 """push changes to the specified destination | 2144 """push changes to the specified destination |
2128 | 2145 |
2129 Push changes from the local repository to the given destination. | 2146 Push changes from the local repository to the given destination. |
2156 other = hg.repository(ui, dest) | 2173 other = hg.repository(ui, dest) |
2157 revs = None | 2174 revs = None |
2158 if opts['rev']: | 2175 if opts['rev']: |
2159 revs = [repo.lookup(rev) for rev in opts['rev']] | 2176 revs = [repo.lookup(rev) for rev in opts['rev']] |
2160 r = repo.push(other, opts['force'], revs=revs) | 2177 r = repo.push(other, opts['force'], revs=revs) |
2161 return r | 2178 return r == 0 |
2162 | 2179 |
2163 def rawcommit(ui, repo, *flist, **rc): | 2180 def rawcommit(ui, repo, *flist, **rc): |
2164 """raw commit interface (DEPRECATED) | 2181 """raw commit interface (DEPRECATED) |
2165 | 2182 |
2166 (DEPRECATED) | 2183 (DEPRECATED) |
2385 respond("not locked") | 2402 respond("not locked") |
2386 continue | 2403 continue |
2387 respond("") | 2404 respond("") |
2388 | 2405 |
2389 r = repo.addchangegroup(fin) | 2406 r = repo.addchangegroup(fin) |
2390 respond("") | 2407 respond(str(r)) |
2391 | 2408 |
2392 optlist = "name templates style address port ipv6 accesslog errorlog" | 2409 optlist = "name templates style address port ipv6 accesslog errorlog" |
2393 for o in optlist.split(): | 2410 for o in optlist.split(): |
2394 if opts[o]: | 2411 if opts[o]: |
2395 ui.setconfig("web", o, opts[o]) | 2412 ui.setconfig("web", o, opts[o]) |
2597 yield chunk | 2614 yield chunk |
2598 else: | 2615 else: |
2599 raise util.Abort(_("%s: unknown bundle compression type") | 2616 raise util.Abort(_("%s: unknown bundle compression type") |
2600 % fname) | 2617 % fname) |
2601 gen = generator(util.filechunkiter(f, 4096)) | 2618 gen = generator(util.filechunkiter(f, 4096)) |
2602 if repo.addchangegroup(util.chunkbuffer(gen)): | 2619 modheads = repo.addchangegroup(util.chunkbuffer(gen)) |
2603 return 1 | 2620 return postincoming(ui, repo, modheads, opts['update']) |
2604 | |
2605 if opts['update']: | |
2606 return update(ui, repo) | |
2607 else: | |
2608 ui.status(_("(run 'hg update' to get a working copy)\n")) | |
2609 | 2621 |
2610 def undo(ui, repo): | 2622 def undo(ui, repo): |
2611 """undo the last commit or pull | 2623 """undo the last commit or pull |
2612 | 2624 |
2613 Roll back the last pull or commit transaction on the | 2625 Roll back the last pull or commit transaction on the |
2847 ('', 'template', '', _('display with template')), | 2859 ('', 'template', '', _('display with template')), |
2848 ('I', 'include', [], _('include names matching the given patterns')), | 2860 ('I', 'include', [], _('include names matching the given patterns')), |
2849 ('X', 'exclude', [], _('exclude names matching the given patterns'))], | 2861 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
2850 _('hg log [OPTION]... [FILE]')), | 2862 _('hg log [OPTION]... [FILE]')), |
2851 "manifest": (manifest, [], _('hg manifest [REV]')), | 2863 "manifest": (manifest, [], _('hg manifest [REV]')), |
2864 "merge": | |
2865 (merge, | |
2866 [('b', 'branch', '', _('merge with head of a specific branch')), | |
2867 ('', 'style', '', _('display using template map file')), | |
2868 ('f', 'force', None, _('force a merge with outstanding changes')), | |
2869 ('', 'template', '', _('display with template'))], | |
2870 _('hg merge [-b TAG] [-f] [REV]')), | |
2852 "outgoing|out": (outgoing, | 2871 "outgoing|out": (outgoing, |
2853 [('M', 'no-merges', None, _('do not show merges')), | 2872 [('M', 'no-merges', None, _('do not show merges')), |
2854 ('f', 'force', None, | 2873 ('f', 'force', None, |
2855 _('run even when remote repository is unrelated')), | 2874 _('run even when remote repository is unrelated')), |
2856 ('p', 'patch', None, _('show patch')), | 2875 ('p', 'patch', None, _('show patch')), |