mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
Merge with main
This commit is contained in:
commit
ed4c3cf173
64
hgext/interhg.py
Normal file
64
hgext/interhg.py
Normal file
@ -0,0 +1,64 @@
|
||||
# interhg.py - interhg
|
||||
#
|
||||
# Copyright 2007 OHASHI Hideya <ohachige@gmail.com>
|
||||
#
|
||||
# This software may be used and distributed according to the terms
|
||||
# of the GNU General Public License, incorporated herein by reference.
|
||||
#
|
||||
# The `interhg' Mercurial extension allows you to change changelog and
|
||||
# summary text just like InterWiki way.
|
||||
#
|
||||
# To enable this extension:
|
||||
#
|
||||
# [extensions]
|
||||
# interhg =
|
||||
#
|
||||
# This is an example to link to a bug tracking system.
|
||||
#
|
||||
# [interhg]
|
||||
# pat1 = s/issue(\d+)/ <a href="http:\/\/bts\/issue\1">issue\1<\/a> /
|
||||
#
|
||||
# You can add patterns to use pat2, pat3, ...
|
||||
# For exapmle.
|
||||
#
|
||||
# pat2 = s/(^|\s)#(\d+)\b/ <b>#\2<\/b> /
|
||||
|
||||
import re
|
||||
from mercurial.hgweb import hgweb_mod
|
||||
from mercurial import templater
|
||||
|
||||
orig_escape = templater.common_filters["escape"]
|
||||
|
||||
interhg_table = []
|
||||
|
||||
def interhg_escape(x):
|
||||
escstr = orig_escape(x)
|
||||
for pat in interhg_table:
|
||||
regexp = pat[0]
|
||||
format = pat[1]
|
||||
escstr = regexp.sub(format, escstr)
|
||||
return escstr
|
||||
|
||||
templater.common_filters["escape"] = interhg_escape
|
||||
|
||||
orig_refresh = hgweb_mod.hgweb.refresh
|
||||
|
||||
def interhg_refresh(self):
|
||||
interhg_table[:] = []
|
||||
num = 1
|
||||
while True:
|
||||
key = 'pat%d' % num
|
||||
pat = self.config('interhg', key)
|
||||
if pat == None:
|
||||
break
|
||||
pat = pat[2:-1]
|
||||
span = re.search(r'[^\\]/', pat).span()
|
||||
regexp = pat[:span[0] + 1]
|
||||
format = pat[span[1]:]
|
||||
format = re.sub(r'\\/', '/', format)
|
||||
regexp = re.compile(regexp)
|
||||
interhg_table.append((regexp, format))
|
||||
num += 1
|
||||
return orig_refresh(self)
|
||||
|
||||
hgweb_mod.hgweb.refresh = interhg_refresh
|
@ -3109,6 +3109,8 @@ table = {
|
||||
"version": (version_, [], _('hg version')),
|
||||
}
|
||||
|
||||
extensions.commandtable = table
|
||||
|
||||
norepo = ("clone init version help debugancestor debugcomplete debugdata"
|
||||
" debugindex debugindexdot debugdate debuginstall")
|
||||
optionalrepo = ("paths serve showconfig")
|
||||
|
@ -40,6 +40,9 @@ class changectx(object):
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
def __ne__(self, other):
|
||||
return not (self == other)
|
||||
|
||||
def __nonzero__(self):
|
||||
return self._rev != nullrev
|
||||
|
||||
@ -185,6 +188,9 @@ class filectx(object):
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
def __ne__(self, other):
|
||||
return not (self == other)
|
||||
|
||||
def filectx(self, fileid):
|
||||
'''opens an arbitrary revision of the file without
|
||||
opening a new filelog'''
|
||||
|
@ -6,10 +6,12 @@
|
||||
# of the GNU General Public License, incorporated herein by reference.
|
||||
|
||||
import imp, os
|
||||
import commands, hg, util, sys
|
||||
import util, sys
|
||||
from i18n import _
|
||||
|
||||
_extensions = {}
|
||||
commandtable = {}
|
||||
setuphooks = []
|
||||
|
||||
def find(name):
|
||||
'''return module with given extension name'''
|
||||
@ -54,13 +56,13 @@ def load(ui, name, path):
|
||||
uisetup(ui)
|
||||
reposetup = getattr(mod, 'reposetup', None)
|
||||
if reposetup:
|
||||
hg.repo_setup_hooks.append(reposetup)
|
||||
setuphooks.append(reposetup)
|
||||
cmdtable = getattr(mod, 'cmdtable', {})
|
||||
overrides = [cmd for cmd in cmdtable if cmd in commands.table]
|
||||
overrides = [cmd for cmd in cmdtable if cmd in commandtable]
|
||||
if overrides:
|
||||
ui.warn(_("extension '%s' overrides commands: %s\n")
|
||||
% (name, " ".join(overrides)))
|
||||
commands.table.update(cmdtable)
|
||||
commandtable.update(cmdtable)
|
||||
|
||||
def loadall(ui):
|
||||
result = ui.configitems("extensions")
|
||||
|
@ -10,7 +10,7 @@ from node import *
|
||||
from repo import *
|
||||
from i18n import _
|
||||
import localrepo, bundlerepo, httprepo, sshrepo, statichttprepo
|
||||
import errno, lock, os, shutil, util, cmdutil
|
||||
import errno, lock, os, shutil, util, cmdutil, extensions
|
||||
import merge as _merge
|
||||
import verify as _verify
|
||||
|
||||
@ -50,13 +50,11 @@ def islocal(repo):
|
||||
return False
|
||||
return repo.local()
|
||||
|
||||
repo_setup_hooks = []
|
||||
|
||||
def repository(ui, path='', create=False):
|
||||
"""return a repository object for the specified path"""
|
||||
repo = _lookup(path).instance(ui, path, create)
|
||||
ui = getattr(repo, "ui", ui)
|
||||
for hook in repo_setup_hooks:
|
||||
for hook in extensions.setuphooks:
|
||||
hook(ui, repo)
|
||||
return repo
|
||||
|
||||
|
@ -478,6 +478,9 @@ def recordupdates(repo, action, branchmerge):
|
||||
repo.dirstate.forget([f])
|
||||
elif m == "d": # directory rename
|
||||
f2, fd, flag = a[2:]
|
||||
if not f2 and f not in repo.dirstate:
|
||||
# untracked file moved
|
||||
continue
|
||||
if branchmerge:
|
||||
repo.dirstate.update([fd], 'a')
|
||||
if f:
|
||||
@ -523,7 +526,7 @@ def update(repo, node, branchmerge, force, partial, wlock):
|
||||
raise util.Abort(_("outstanding uncommitted merges"))
|
||||
if pa == p1 or pa == p2: # is there a linear path from p1 to p2?
|
||||
if branchmerge:
|
||||
if p1.branch() != p2.branch():
|
||||
if p1.branch() != p2.branch() and pa != p2:
|
||||
fastforward = True
|
||||
else:
|
||||
raise util.Abort(_("there is nothing to merge, just use "
|
||||
|
4
setup.py
4
setup.py
@ -2,8 +2,8 @@
|
||||
#
|
||||
# This is the mercurial setup script.
|
||||
#
|
||||
# './setup.py install', or
|
||||
# './setup.py --help' for more options
|
||||
# 'python setup.py install', or
|
||||
# 'python setup.py --help' for more options
|
||||
|
||||
import sys
|
||||
if not hasattr(sys, 'version_info') or sys.version_info < (2, 3, 0, 'final'):
|
||||
|
24
tests/test-issue612
Executable file
24
tests/test-issue612
Executable file
@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir t
|
||||
cd t
|
||||
|
||||
hg init
|
||||
mkdir src
|
||||
echo a > src/a.c
|
||||
hg ci -Ama -d "10000000 0"
|
||||
|
||||
hg mv src source
|
||||
hg ci -Ammove -d "1000000 0"
|
||||
|
||||
hg co -C 0
|
||||
echo new > src/a.c
|
||||
echo compiled > src/a.o
|
||||
hg ci -mupdate -d "1000000 0"
|
||||
|
||||
hg st
|
||||
|
||||
hg merge
|
||||
|
||||
hg st
|
||||
|
11
tests/test-issue612.out
Normal file
11
tests/test-issue612.out
Normal file
@ -0,0 +1,11 @@
|
||||
adding src/a.c
|
||||
copying src/a.c to source/a.c
|
||||
removing src/a.c
|
||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
||||
? src/a.o
|
||||
merging src/a.c and source/a.c
|
||||
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
|
||||
(branch merge, don't forget to commit)
|
||||
M source/a.c
|
||||
R src/a.c
|
||||
? source/a.o
|
20
tests/test-issue619
Executable file
20
tests/test-issue619
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir t
|
||||
cd t
|
||||
hg init
|
||||
echo a > a
|
||||
hg ci -Ama -d '1000000000 0'
|
||||
echo b > b
|
||||
hg branch b
|
||||
hg ci -Amb -d '1000000000 0'
|
||||
hg co -C 0
|
||||
|
||||
echo fast-forward
|
||||
hg merge b
|
||||
hg ci -Ammerge -d '1000000000 0'
|
||||
|
||||
echo bogus fast-forward should fail
|
||||
hg merge b
|
||||
|
||||
echo done
|
10
tests/test-issue619.out
Normal file
10
tests/test-issue619.out
Normal file
@ -0,0 +1,10 @@
|
||||
adding a
|
||||
marked working directory as branch b
|
||||
adding b
|
||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
||||
fast-forward
|
||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
||||
(branch merge, don't forget to commit)
|
||||
bogus fast-forward should fail
|
||||
abort: there is nothing to merge, just use 'hg update' or look at 'hg heads'
|
||||
done
|
Loading…
Reference in New Issue
Block a user