summaryrefslogtreecommitdiff
path: root/eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/hgext/fetch.py
diff options
context:
space:
mode:
Diffstat (limited to 'eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/hgext/fetch.py')
-rw-r--r--eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/hgext/fetch.py152
1 files changed, 0 insertions, 152 deletions
diff --git a/eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/hgext/fetch.py b/eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/hgext/fetch.py
deleted file mode 100644
index b8e765f..0000000
--- a/eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/hgext/fetch.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# fetch.py - pull and merge remote changes
-#
-# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
-#
-# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2 or any later version.
-
-'''pull, update and merge in one command'''
-
-from mercurial.i18n import _
-from mercurial.node import nullid, short
-from mercurial import commands, cmdutil, hg, util, url, error
-from mercurial.lock import release
-
-def fetch(ui, repo, source='default', **opts):
- '''pull changes from a remote repository, merge new changes if needed.
-
- This finds all changes from the repository at the specified path
- or URL and adds them to the local repository.
-
- If the pulled changes add a new branch head, the head is
- automatically merged, and the result of the merge is committed.
- Otherwise, the working directory is updated to include the new
- changes.
-
- When a merge occurs, the newly pulled changes are assumed to be
- "authoritative". The head of the new changes is used as the first
- parent, with local changes as the second. To switch the merge
- order, use --switch-parent.
-
- See :hg:`help dates` for a list of formats valid for -d/--date.
-
- Returns 0 on success.
- '''
-
- date = opts.get('date')
- if date:
- opts['date'] = util.parsedate(date)
-
- parent, p2 = repo.dirstate.parents()
- branch = repo.dirstate.branch()
- branchnode = repo.branchtags().get(branch)
- if parent != branchnode:
- raise util.Abort(_('working dir not at branch tip '
- '(use "hg update" to check out branch tip)'))
-
- if p2 != nullid:
- raise util.Abort(_('outstanding uncommitted merge'))
-
- wlock = lock = None
- try:
- wlock = repo.wlock()
- lock = repo.lock()
- mod, add, rem, del_ = repo.status()[:4]
-
- if mod or add or rem:
- raise util.Abort(_('outstanding uncommitted changes'))
- if del_:
- raise util.Abort(_('working directory is missing some files'))
- bheads = repo.branchheads(branch)
- bheads = [head for head in bheads if len(repo[head].children()) == 0]
- if len(bheads) > 1:
- raise util.Abort(_('multiple heads in this branch '
- '(use "hg heads ." and "hg merge" to merge)'))
-
- other = hg.repository(hg.remoteui(repo, opts),
- ui.expandpath(source))
- ui.status(_('pulling from %s\n') %
- url.hidepassword(ui.expandpath(source)))
- revs = None
- if opts['rev']:
- try:
- revs = [other.lookup(rev) for rev in opts['rev']]
- except error.CapabilityError:
- err = _("Other repository doesn't support revision lookup, "
- "so a rev cannot be specified.")
- raise util.Abort(err)
-
- # Are there any changes at all?
- modheads = repo.pull(other, heads=revs)
- if modheads == 0:
- return 0
-
- # Is this a simple fast-forward along the current branch?
- newheads = repo.branchheads(branch)
- newchildren = repo.changelog.nodesbetween([parent], newheads)[2]
- if len(newheads) == 1:
- if newchildren[0] != parent:
- return hg.clean(repo, newchildren[0])
- else:
- return 0
-
- # Are there more than one additional branch heads?
- newchildren = [n for n in newchildren if n != parent]
- newparent = parent
- if newchildren:
- newparent = newchildren[0]
- hg.clean(repo, newparent)
- newheads = [n for n in newheads if n != newparent]
- if len(newheads) > 1:
- ui.status(_('not merging with %d other new branch heads '
- '(use "hg heads ." and "hg merge" to merge them)\n') %
- (len(newheads) - 1))
- return 1
-
- # Otherwise, let's merge.
- err = False
- if newheads:
- # By default, we consider the repository we're pulling
- # *from* as authoritative, so we merge our changes into
- # theirs.
- if opts['switch_parent']:
- firstparent, secondparent = newparent, newheads[0]
- else:
- firstparent, secondparent = newheads[0], newparent
- ui.status(_('updating to %d:%s\n') %
- (repo.changelog.rev(firstparent),
- short(firstparent)))
- hg.clean(repo, firstparent)
- ui.status(_('merging with %d:%s\n') %
- (repo.changelog.rev(secondparent), short(secondparent)))
- err = hg.merge(repo, secondparent, remind=False)
-
- if not err:
- # we don't translate commit messages
- message = (cmdutil.logmessage(opts) or
- ('Automated merge with %s' %
- url.removeauth(other.url())))
- editor = cmdutil.commiteditor
- if opts.get('force_editor') or opts.get('edit'):
- editor = cmdutil.commitforceeditor
- n = repo.commit(message, opts['user'], opts['date'], editor=editor)
- ui.status(_('new changeset %d:%s merges remote changes '
- 'with local\n') % (repo.changelog.rev(n),
- short(n)))
-
- return err
-
- finally:
- release(lock, wlock)
-
-cmdtable = {
- 'fetch':
- (fetch,
- [('r', 'rev', [],
- _('a specific revision you would like to pull'), _('REV')),
- ('e', 'edit', None, _('edit commit message')),
- ('', 'force-editor', None, _('edit commit message (DEPRECATED)')),
- ('', 'switch-parent', None, _('switch parents when merging')),
- ] + commands.commitopts + commands.commitopts2 + commands.remoteopts,
- _('hg fetch [SOURCE]')),
-}