Changeset cfd62a21bd59…
Parent 10e6ab531de6…
by Benjamin Pollack <benjamin@fogcreek.com>
Changes to 51 files · Browse files at cfd62a21bd59 Showing diff from parent 10e6ab531de6 Diff from another changeset...
@@ -3,11 +3,13 @@ import os
import tempfile
import binascii
-import bfutil
+import re
from mercurial import util, node, error, url as url_, hg
from mercurial.i18n import _
+import bfutil
+
class StoreError(Exception):
'''Raised when there is a problem getting files from or putting
files to a central store.'''
@@ -54,7 +56,7 @@
at = 0
for filename, hash in files:
- ui.progress(_('Getting kbfiles'), at, unit='kbfile', total=len(files))
+ ui.progress(_('getting kbfiles'), at, unit='kbfile', total=len(files))
at += 1
ui.note(_('getting %s\n') % filename)
outfilename = self.repo.wjoin(filename)
@@ -90,7 +92,7 @@ bfutil.copy_to_cache(self.repo, self.repo['.'].node(), filename, True)
success.append((filename, hhash))
- ui.progress(_('Getting bfiles'), None)
+ ui.progress(_('getting bfiles'), None)
return (success, missing)
def verify(self, revs, contents=False):
@@ -147,6 +149,8 @@ 'https': (httpstore, 'httpstore'),
}
+_scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
+
# During clone this function is passed the src's ui object
# but it needs the dest's ui object so it can read out of
# the config file. Use repo.ui instead.
@@ -165,7 +169,7 @@ if path:
path = hg.repository(ui, path).path
- match = url_.scheme_re.match(path)
+ match = _scheme_re.match(path)
if not match: # regular filesystem path
scheme = 'file'
else:
|
|
|
@@ -83,10 +83,10 @@
bfiletohash = {}
for ctx in ctxs:
- ui.progress(_('Converting revisions'), ctx.rev(), unit=_('revision'), total=rsrc['tip'].rev())
+ ui.progress(_('converting revisions'), ctx.rev(), unit=_('revision'), total=rsrc['tip'].rev())
_bfconvert_addchangeset(rsrc, rdst, ctx, revmap,
bfiles, normalfiles, matcher, size, bfiletohash)
- ui.progress(_('Converting revisions'), None)
+ ui.progress(_('converting revisions'), None)
if os.path.exists(rdst.wjoin(bfutil.short_name)):
shutil.rmtree(rdst.wjoin(bfutil.short_name))
@@ -101,10 +101,10 @@
else:
for ctx in ctxs:
- ui.progress(_('Converting revisions'), ctx.rev(), unit=_('revision'), total=rsrc['tip'].rev())
+ ui.progress(_('converting revisions'), ctx.rev(), unit=_('revision'), total=rsrc['tip'].rev())
_addchangeset(ui, rsrc, rdst, ctx, revmap)
- ui.progress(_('Converting revisions'), None)
+ ui.progress(_('converting revisions'), None)
except:
# we failed, remove the new directory
shutil.rmtree(rdst.root)
@@ -329,7 +329,7 @@
at = 0
for hash in files:
- ui.progress(_('Uploading bfiles'), at, unit='bfile', total=len(files))
+ ui.progress(_('uploading bfiles'), at, unit='bfile', total=len(files))
if store.exists(hash):
at += 1
continue
@@ -339,7 +339,7 @@ # XXX check for errors here
store.put(source, hash)
at += 1
- ui.progress('Uploading bfiles', None)
+ ui.progress('uploading bfiles', None)
def verify_bfiles(ui, repo, all=False, contents=False):
'''Verify that every big file revision in the current changeset
@@ -356,7 +356,7 @@ store = basestore._open_store(repo)
return store.verify(revs, contents=contents)
-def revert_bfiles(ui, repo):
+def revert_bfiles(ui, repo, file_list=None):
wlock = repo.wlock()
try:
bfdirstate = bfutil.open_bfdirstate(ui, repo)
@@ -368,21 +368,31 @@ at = 0
updated = 0
for bfile in bfiles:
- if not os.path.exists(repo.wjoin(bfutil.standin(bfile))):
- bfdirstate.remove(bfile)
- continue
- if os.path.exists(repo.wjoin(bfutil.standin(os.path.join(bfile + '.orig')))):
- shutil.copyfile(repo.wjoin(bfile), repo.wjoin(bfile + '.orig'))
- at += 1
- expectedhash = repo[None][bfutil.standin(bfile)].data().strip()
- mode = os.stat(repo.wjoin(bfutil.standin(bfile))).st_mode
- if not os.path.exists(repo.wjoin(bfile)) or expectedhash != bfutil.hashfile(repo.wjoin(bfile)):
- path = bfutil.find_file(repo, expectedhash)
- if path is None:
- toget.append((bfile, expectedhash))
- else:
- util.makedirs(os.path.dirname(repo.wjoin(bfile)))
- shutil.copy(path, repo.wjoin(bfile))
+ if file_list == None or bfile in file_list:
+ if not os.path.exists(repo.wjoin(bfutil.standin(bfile))):
+ bfdirstate.remove(bfile)
+ continue
+ if os.path.exists(repo.wjoin(bfutil.standin(os.path.join(bfile + '.orig')))):
+ shutil.copyfile(repo.wjoin(bfile), repo.wjoin(bfile + '.orig'))
+ at += 1
+ expectedhash = repo[None][bfutil.standin(bfile)].data().strip()
+ mode = os.stat(repo.wjoin(bfutil.standin(bfile))).st_mode
+ if not os.path.exists(repo.wjoin(bfile)) or expectedhash != bfutil.hashfile(repo.wjoin(bfile)):
+ path = bfutil.find_file(repo, expectedhash)
+ if path is None:
+ toget.append((bfile, expectedhash))
+ else:
+ util.makedirs(os.path.dirname(repo.wjoin(bfile)))
+ shutil.copy(path, repo.wjoin(bfile))
+ os.chmod(repo.wjoin(bfile), mode)
+ updated += 1
+ if bfutil.standin(bfile) not in repo['.']:
+ bfdirstate.add(bfutil.unixpath(bfile))
+ elif expectedhash == repo['.'][bfutil.standin(bfile)].data().strip():
+ bfdirstate.normal(bfutil.unixpath(bfile))
+ else:
+ bfutil.dirstate_normaldirty(bfdirstate, bfutil.unixpath(bfile))
+ elif os.path.exists(repo.wjoin(bfile)) and mode != os.stat(repo.wjoin(bfile)).st_mode:
os.chmod(repo.wjoin(bfile), mode)
updated += 1
if bfutil.standin(bfile) not in repo['.']:
@@ -391,19 +401,10 @@ bfdirstate.normal(bfutil.unixpath(bfile))
else:
bfutil.dirstate_normaldirty(bfdirstate, bfutil.unixpath(bfile))
- elif os.path.exists(repo.wjoin(bfile)) and mode != os.stat(repo.wjoin(bfile)).st_mode:
- os.chmod(repo.wjoin(bfile), mode)
- updated += 1
- if bfutil.standin(bfile) not in repo['.']:
- bfdirstate.add(bfutil.unixpath(bfile))
- elif expectedhash == repo['.'][bfutil.standin(bfile)].data().strip():
- bfdirstate.normal(bfutil.unixpath(bfile))
- else:
- bfutil.dirstate_normaldirty(bfdirstate, bfutil.unixpath(bfile))
if toget:
store = basestore._open_store(repo)
- (success, missing) = store.get(toget)
+ success, missing = store.get(toget)
else:
success, missing = [], []
@@ -420,24 +421,30 @@
removed = 0
for bfile in bfdirstate:
- if not os.path.exists(repo.wjoin(bfutil.standin(bfile))):
- if os.path.exists(repo.wjoin(bfile)):
- os.unlink(repo.wjoin(bfile))
- removed += 1
- if bfutil.standin(bfile) in repo['.']:
- bfdirstate.remove(bfutil.unixpath(bfile))
- else:
- bfdirstate.forget(bfutil.unixpath(bfile))
- else:
- state = repo.dirstate[bfutil.standin(bfile)]
- if state == 'n':
- bfdirstate.normal(bfile)
- elif state == 'r':
- bfdirstate.remove(bfile)
- elif state == 'a':
- bfdirstate.add(bfile)
- elif state == '?':
- bfdirstate.forget(bfile)
+ if file_list == None or bfile in file_list:
+ if not os.path.exists(repo.wjoin(bfutil.standin(bfile))):
+ if os.path.exists(repo.wjoin(bfile)):
+ os.unlink(repo.wjoin(bfile))
+ removed += 1
+ if bfutil.standin(bfile) in repo['.']:
+ bfdirstate.remove(bfutil.unixpath(bfile))
+ else:
+ bfdirstate.forget(bfutil.unixpath(bfile))
+ else:
+ state = repo.dirstate[bfutil.standin(bfile)]
+ if state == 'n':
+ bfdirstate.normal(bfile)
+ elif state == 'r':
+ bfdirstate.remove(bfile)
+ elif state == 'a':
+ bfdirstate.add(bfile)
+ elif state == '?':
+ try:
+ # Mercurial >= 1.9
+ bfdirstate.drop(bfile)
+ except AttributeError:
+ # Mercurial <= 1.8
+ bfdirstate.forget(bfile)
bfdirstate.write()
finally:
wlock.release()
@@ -456,7 +463,7 @@ removed = 0
printed = False
if bfiles:
- ui.status(_('Getting changed bfiles\n'))
+ ui.status(_('getting changed bfiles\n'))
printed = True
for bfile in bfiles:
@@ -499,11 +506,17 @@ if bfile not in bfiles:
if os.path.exists(repo.wjoin(bfile)):
if not printed:
- ui.status(_('Getting changed bfiles\n'))
+ ui.status(_('getting changed bfiles\n'))
printed = True
os.unlink(repo.wjoin(bfile))
removed += 1
- bfdirstate.forget(bfutil.unixpath(bfile))
+ path = bfutil.unixpath(bfile)
+ try:
+ # Mercurial >= 1.9
+ bfdirstate.drop(path)
+ except AttributeError:
+ # Mercurial <= 1.8
+ bfdirstate.forget(path)
bfdirstate.write()
if printed:
|
|
|
@@ -3,17 +3,19 @@ import os
import types
import copy
+import re
from mercurial import hg, extensions, commands, util, context, cmdutil, \
- match as match_, filemerge, node, archival, httprepo, error
+ match as match_, filemerge, node, archival, httprepo, error, manifest
from mercurial.i18n import _
from mercurial.node import hex
+from hgext import rebase
import bfutil, bfcommands
-def hgversion():
- from mercurial.__version__ import version
- return [int(n) for n in version.partition('+')[0].split('.')]
-hgversion = hgversion()
+try:
+ from mercurial import scmutil
+except ImportError:
+ pass
# -- Wrappers: modify existing commands --------------------------------
@@ -27,11 +29,11 @@ if hasattr(repo.__class__, 'do_cmd'):
def do_cmd(self, cmd, **args):
args['kbfiles'] = 'true'
- return super(repo.__class__, self).do_cmd(cmd, **args)
+ return super(kbfilesrepo, self).do_cmd(cmd, **args)
if hasattr(repo.__class__, '_callstream'):
def _callstream(self, cmd, **args):
args['kbfiles'] = 'true'
- return super(repo.__class__, self)._callstream(cmd, **args)
+ return super(kbfilesrepo, self)._callstream(cmd, **args)
repo.__class__ = kbfilesrepo
# bfiles doesn't support non-local repositories -- get out quick in
@@ -54,6 +56,38 @@ def status_nobfiles(self, *args, **kwargs):
return super(bfiles_repo, self).status(*args, **kwargs)
+ # When bfstatus is set, return a context that gives the names of bfiles
+ # instead of their corresponding standins and identifies the bfiles as
+ # always binary, regardless of their actual contents.
+ def __getitem__(self, changeid):
+ ctx = super(bfiles_repo, self).__getitem__(changeid)
+ if self.bfstatus:
+ class bfiles_manifestdict(manifest.manifestdict):
+ def __contains__(self, filename):
+ if super(bfiles_manifestdict, self).__contains__(filename):
+ return True
+ return super(bfiles_manifestdict, self).__contains__('.kbf/' + filename)
+ class bfiles_ctx(ctx.__class__):
+ def files(self):
+ filenames = super(bfiles_ctx, self).files()
+ return [re.sub(r'^\.kbf/', '', filename) for filename in filenames]
+ def manifest(self):
+ man1 = super(bfiles_ctx, self).manifest()
+ man1.__class__ = bfiles_manifestdict
+ return man1
+ def filectx(self, path, fileid=None, filelog=None):
+ try:
+ result = super(bfiles_ctx, self).filectx(path, fileid, filelog)
+ except error.LookupError:
+ # Adding a null character will cause Mercurial to identify this
+ # as a binary file.
+ result = super(bfiles_ctx, self).filectx('.kbf/' + path, fileid, filelog)
+ olddata = result.data
+ result.data = lambda: olddata() + '\0'
+ return result
+ ctx.__class__ = bfiles_ctx
+ return ctx
+
# Figure out the status of big files and insert them into the
# appropriate list in the result. Also removes standin files from
# the listing. This function reverts to the original status if
@@ -196,6 +230,12 @@
wlock = repo.wlock()
try:
+ if getattr(repo, "_isrebasing", False):
+ # We have to take the time to pull down the new bfiles now. Otherwise
+ # if we are rebasing, any bfiles that were modified in the changesets we
+ # are rebasing on top of get overwritten either by the rebase or in the
+ # first commit after the rebase.
+ bfcommands.update_bfiles(repo.ui, repo)
# Case 1: user calls commit with no specific files or
# include/exclude patterns: refresh and commit everything.
if (match is None) or (not match.anypats() and not match.files()):
@@ -204,11 +244,20 @@ # this only loops through bfiles that exist (not removed/renamed)
for bfile in bfiles:
if os.path.exists(self.wjoin(bfutil.standin(bfile))):
- bfutil.update_standin(self, bfutil.standin(bfile))
- bfdirstate.normal(bfutil.unixpath(bfile))
+ # this handles the case where a rebase is being performed and the
+ # working copy is not updated yet.
+ if os.path.exists(self.wjoin(bfile)):
+ bfutil.update_standin(self, bfutil.standin(bfile))
+ bfdirstate.normal(bfutil.unixpath(bfile))
for bfile in bfdirstate:
if not os.path.exists(repo.wjoin(bfutil.standin(bfile))):
- bfdirstate.forget(bfutil.unixpath(bfile))
+ path = bfutil.unixpath(bfile)
+ try:
+ # Mercurial >= 1.9
+ bfdirstate.drop(path)
+ except AttributeError:
+ # Mercurial <= 1.8
+ bfdirstate.forget(path)
bfdirstate.write()
return orig(text=text, user=user, date=date, match=match,
@@ -241,7 +290,13 @@ bfutil.update_standin(self, standin)
bfdirstate.normal(bfutil.unixpath(bfile))
else:
- bfdirstate.forget(bfutil.unixpath(bfile))
+ path = bfutil.unixpath(bfile)
+ try:
+ # Mercurial >= 1.9
+ bfdirstate.drop(path)
+ except AttributeError:
+ # Mercurial <= 1.8
+ bfdirstate.forget(path)
bfdirstate.write()
# Cook up a new matcher that only matches regular files or
@@ -349,7 +404,12 @@ bfmatcher = match_.match(repo.root, '', list(bfpats))
bfnames = []
- m = cmdutil.match(repo, pats, opts)
+ try:
+ # Mercurial >= 1.9
+ m = scmutil.match(repo[None], pats, opts)
+ except ImportError:
+ # Mercurial <= 1.8
+ m = cmdutil.match(repo, pats, opts)
m.bad = lambda x,y: None
wctx = repo[None]
for f in repo.walk(m):
@@ -393,7 +453,12 @@ finally:
wlock.release()
- oldmatch = cmdutil.match
+ try:
+ # Mercurial >= 1.9
+ oldmatch = scmutil.match
+ except ImportError:
+ # Mercurial <= 1.8
+ oldmatch = cmdutil.match
manifest = repo[None].manifest()
def override_match(repo, pats=[], opts={}, globbed=False, default='relpath'):
match = oldmatch(repo, pats, opts, globbed, default)
@@ -404,15 +469,27 @@ orig_matchfn = m.matchfn
m.matchfn = lambda f: notbfile(f) and orig_matchfn(f) or None
return m
- cmdutil.match = override_match
- result = orig(ui, repo, *pats, **opts)
- cmdutil.match = oldmatch
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = override_match
+ result = orig(ui, repo, *pats, **opts)
+ scmutil.match = oldmatch
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = override_match
+ result = orig(ui, repo, *pats, **opts)
+ cmdutil.match = oldmatch
return (result is 1 or bad) and 1 or 0
def override_remove(orig, ui, repo, *pats, **opts):
wctx = repo[None].manifest()
- oldmatch = cmdutil.match
+ try:
+ # Mercurial >= 1.9
+ oldmatch = scmutil.match
+ except ImportError:
+ # Mercurial <= 1.8
+ oldmatch = cmdutil.match
def override_match(repo, pats=[], opts={}, globbed=False, default='relpath'):
match = oldmatch(repo, pats, opts, globbed, default)
m = copy.copy(match)
@@ -422,14 +499,26 @@ orig_matchfn = m.matchfn
m.matchfn = lambda f: orig_matchfn(f) and notbfile(f)
return m
- cmdutil.match = override_match
- orig(ui, repo, *pats, **opts)
- cmdutil.match = oldmatch
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = override_match
+ orig(ui, repo, *pats, **opts)
+ scmutil.match = oldmatch
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = override_match
+ orig(ui, repo, *pats, **opts)
+ cmdutil.match = oldmatch
after, force = opts.get('after'), opts.get('force')
if not pats and not after:
raise util.Abort(_('no files specified'))
- m = cmdutil.match(repo, pats, opts)
+ try:
+ # Mercurial >= 1.9
+ m = scmutil.match(repo[None], pats, opts)
+ except ImportError:
+ # Mercurial <= 1.8
+ m = cmdutil.match(repo, pats, opts)
try:
repo.bfstatus = True
s = repo.status(match=m, clean=True)
@@ -485,6 +574,13 @@ finally:
repo.bfstatus = False
+def override_log(orig, ui, repo, *pats, **opts):
+ try:
+ repo.bfstatus = True
+ orig(ui, repo, *pats, **opts)
+ finally:
+ repo.bfstatus = False
+
def override_verify(orig, ui, repo, *pats, **opts):
bf = opts.pop('bf', False)
all = opts.pop('bfa', False)
@@ -572,9 +668,20 @@ return orig(ui, repo, pats, opts, rename)
def makestandin(relpath):
- return os.path.join(os.path.relpath('.', repo.getcwd()), bfutil.standin(util.canonpath(repo.root, repo.getcwd(), relpath)))
+ try:
+ # Mercurial >= 1.9
+ path = scmutil.canonpath(repo.root, repo.getcwd(), relpath)
+ except ImportError:
+ # Mercurial <= 1.8
+ path = util.canonpath(repo.root, repo.getcwd(), relpath)
+ return os.path.join(os.path.relpath('.', repo.getcwd()), bfutil.standin(path))
- fullpats = cmdutil.expandpats(pats)
+ try:
+ # Mercurial >= 1.9
+ fullpats = scmutil.expandpats(pats)
+ except ImportError:
+ # Mercurial <= 1.8
+ fullpats = cmdutil.expandpats(pats)
dest = fullpats[-1]
if os.path.isdir(dest):
@@ -585,7 +692,12 @@ # then replace it to just match bfiles and run it again
nonormalfiles = False
nobfiles = False
- oldmatch = cmdutil.match
+ try:
+ # Mercurial >= 1.9
+ oldmatch = scmutil.match
+ except ImportError:
+ # Mercurial <= 1.8
+ oldmatch = cmdutil.match
try:
manifest = repo[None].manifest()
def override_match(repo, pats=[], opts={}, globbed=False, default='relpath'):
@@ -597,7 +709,12 @@ orig_matchfn = m.matchfn
m.matchfn = lambda f: notbfile(f) and orig_matchfn(f) or None
return m
- cmdutil.match = override_match
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = override_match
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = override_match
result = orig(ui, repo, pats, opts, rename)
except util.Abort as e:
if str(e) != 'no files to copy':
@@ -606,7 +723,12 @@ nonormalfiles = True
result = 0
finally:
- cmdutil.match = oldmatch
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = oldmatch
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = oldmatch
# The first rename can cause our current working directory to be removed. In that case
# there is nothing left to copy/rename so just quit.
@@ -637,7 +759,12 @@ orig_matchfn = m.matchfn
m.matchfn = lambda f: bfutil.is_standin(f) and bfile(bfutil.split_standin(f)) and orig_matchfn(bfutil.split_standin(f)) or None
return m
- cmdutil.match = override_match
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = override_match
+ except ImportError:
+ # Mercurial <= 1.9
+ cmdutil.match = override_match
listpats = []
for pat in pats:
if match_.patkind(pat) != None:
@@ -682,7 +809,12 @@ else:
nobfiles = True
finally:
- cmdutil.match = oldmatch
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = oldmatch
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = oldmatch
wlock.release()
if nobfiles and nonormalfiles:
@@ -690,6 +822,10 @@
return result
+# When the user calls revert, we have to be careful to not revert any changes to other
+# bfiles accidentally. This means we have to keep track of the bfiles that are
+# being reverted so we only pull down the necessary bfiles.
+#
# Standins are only updated (to match the hash of bfiles) before commits.
# Update the standins then run the original revert (changing the matcher to hit standins
# instead of bfiles). Based on the resulting standins update the bfiles. Then return the
@@ -705,14 +841,23 @@ for bfile in modified:
bfutil.update_standin(repo, bfutil.standin(bfile))
- oldmatch = cmdutil.match
+ try:
+ # Mercurial >= 1.9
+ oldmatch = scmutil.match
+ except ImportError:
+ # Mercurial <= 1.8
+ oldmatch = cmdutil.match
try:
ctx = repo[opts.get('rev')]
- def override_match(repo, pats=[], opts={}, globbed=False, default='relpath'):
- match = oldmatch(repo, pats, opts, globbed, default)
+ def override_match(ctxorrepo, pats=[], opts={}, globbed=False, default='relpath'):
+ if hasattr(ctxorrepo, 'match'):
+ ctx0 = ctxorrepo
+ else:
+ ctx0 = ctxorrepo[None]
+ match = oldmatch(ctxorrepo, pats, opts, globbed, default)
m = copy.copy(match)
def tostandin(f):
- if bfutil.standin(f) in repo[None] or bfutil.standin(f) in ctx:
+ if bfutil.standin(f) in ctx0 or bfutil.standin(f) in ctx:
return bfutil.standin(f)
return f
m._files = [tostandin(f) for f in m._files]
@@ -720,18 +865,42 @@ orig_matchfn = m.matchfn
def matchfn(f):
if bfutil.is_standin(f):
- return orig_matchfn(bfutil.split_standin(f)) and (f in repo[None] or f in ctx)
+ # We need to keep track of what bfiles are being matched so we know which
+ # ones to update later (otherwise we revert changes to other bfiles
+ # accidentally). This is repo specific, so duckpunch the repo object to
+ # keep the list of bfiles for us later.
+ if(orig_matchfn(bfutil.split_standin(f)) and (f in repo[None] or f in ctx)):
+ bfiles_list = getattr(repo, '_bfiles_to_update', [])
+ bfiles_list.append(bfutil.split_standin(f))
+ repo._bfiles_to_update = bfiles_list;
+ return True
+ else:
+ return False
return orig_matchfn(f)
m.matchfn = matchfn
return m
- cmdutil.match = override_match
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = override_match
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = override_match
orig(ui, repo, *pats, **opts)
finally:
- cmdutil.match = oldmatch
- bfcommands.revert_bfiles(ui, repo)
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = oldmatch
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = oldmatch
+ bfiles_list = getattr(repo, '_bfiles_to_update', [])
+ bfcommands.revert_bfiles(ui, repo, bfiles_list)
+ # Empty out the bfiles list so we start fresh next time
+ repo._bfiles_to_update = []
for bfile in modified:
- if os.path.exists(repo.wjoin(bfutil.standin(bfile))) and bfile in repo['.']:
- bfutil.write_standin(repo, bfutil.standin(bfile), repo['.'][bfile].data().strip(), 'x' in repo['.'][bfile].flags())
+ if bfile in bfiles_list:
+ if os.path.exists(repo.wjoin(bfutil.standin(bfile))) and bfile in repo['.']:
+ bfutil.write_standin(repo, bfutil.standin(bfile), repo['.'][bfile].data().strip(), 'x' in repo['.'][bfile].flags())
finally:
wlock.release()
@@ -752,14 +921,50 @@ return result
# When we rebase a repository with remotely changed bfiles, we need
-# to explicitly do a clean update so that the entries in .kbf are
-# udpated and the new bfiles are pulled
+# to take some extra care so that the bfiles are correctly updated
+# in the working copy
def override_pull(orig, ui, repo, source="default", **opts):
- result = orig(ui, repo, source, **opts)
if opts.get('rebase', False):
- commands.update(repo.ui, repo, clean = True)
+ repo._isrebasing = True
+ try:
+ if opts.get('update'):
+ del opts['update']
+ ui.debug('--update and --rebase are not compatible, ignoring '
+ 'the update flag\n')
+ del opts['rebase']
+ try:
+ # Mercurial >= 1.9
+ cmdutil.bailifchanged(repo)
+ except AttributeError:
+ # Mercurial <= 1.8
+ cmdutil.bail_if_changed(repo)
+ revsprepull = len(repo)
+ origpostincoming = commands.postincoming
+ def _dummy(*args, **kwargs):
+ pass
+ commands.postincoming = _dummy
+ try:
+ result = commands.pull(ui, repo, source, **opts)
+ finally:
+ commands.postincoming = origpostincoming
+ revspostpull = len(repo)
+ if revspostpull > revsprepull:
+ result = result or rebase.rebase(ui, repo)
+ branch = repo[None].branch()
+ dest = repo[branch].rev()
+ finally:
+ repo._isrebasing = False
+ else:
+ result = orig(ui, repo, source, **opts)
return result
+def override_rebase(orig, ui, repo, **opts):
+ repo._isrebasing = True
+ try:
+ orig(ui, repo, **opts)
+ finally:
+ repo._isrebasing = False
+
def override_archive(orig, repo, dest, node, kind, decode=True, matchfn=None,
prefix=None, mtime=None, subrepos=None):
# No need to lock because we are only reading history and bfile caches
@@ -846,9 +1051,9 @@ archiver.done()
# If a bfile is modified the change is not reflected in its standin until a commit.
-# cmdutil.bail_if_changed raises an exception if the repo has uncommitted changes.
+# cmdutil.bailifchanged raises an exception if the repo has uncommitted changes.
# Wrap it to also check if bfiles were changed. This is used by bisect and backout.
-def override_bail_if_changed(orig, repo):
+def override_bailifchanged(orig, repo):
orig(repo)
repo.bfstatus = True
modified, added, removed, deleted = repo.status()[:4]
@@ -867,7 +1072,12 @@
def override_forget(orig, ui, repo, *pats, **opts):
wctx = repo[None].manifest()
- oldmatch = cmdutil.match
+ try:
+ # Mercurial >= 1.9
+ oldmatch = scmutil.match
+ except ImportError:
+ # Mercurial <= 1.8
+ oldmatch = cmdutil.match
def override_match(repo, pats=[], opts={}, globbed=False, default='relpath'):
match = oldmatch(repo, pats, opts, globbed, default)
m = copy.copy(match)
@@ -877,11 +1087,19 @@ orig_matchfn = m.matchfn
m.matchfn = lambda f: orig_matchfn(f) and notbfile(f)
return m
- cmdutil.match = override_match
- orig(ui, repo, *pats, **opts)
- cmdutil.match = oldmatch
+ try:
+ # Mercurial >= 1.9
+ scmutil.match = override_match
+ orig(ui, repo, *pats, **opts)
+ scmutil.match = oldmatch
+ m = scmutil.match(repo[None], pats, opts)
+ except ImportError:
+ # Mercurial <= 1.8
+ cmdutil.match = override_match
+ orig(ui, repo, *pats, **opts)
+ cmdutil.match = oldmatch
+ m = cmdutil.match(repo, pats, opts)
- m = cmdutil.match(repo, pats, opts)
try:
repo.bfstatus = True
s = repo.status(match=m, clean=True)
@@ -1000,6 +1218,23 @@
return orig(ui, repo, *pats, **opts)
+# Calling purge with --all will cause the kbfiles to be deleted.
+# Override repo.status to prevent this from happening.
+def override_purge(orig, ui, repo, *dirs, **opts):
+ oldstatus = repo.status
+ def override_status(node1='.', node2=None, match=None, ignored=False,
+ clean=False, unknown=False, listsubrepos=False):
+ r = oldstatus(node1, node2, match, ignored, clean, unknown,
+ listsubrepos)
+ bfdirstate = bfutil.open_bfdirstate(ui, repo)
+ modified, added, removed, deleted, unknown, ignored, clean = r
+ unknown = [f for f in unknown if bfdirstate[f] == '?']
+ ignored = [f for f in ignored if bfdirstate[f] == '?']
+ return modified, added, removed, deleted, unknown, ignored, clean
+ repo.status = override_status
+ orig(ui, repo, *dirs, **opts)
+ repo.status = oldstatus
+
def uisetup(ui):
# Disable auto-status for some commands which assume that all
# files in the result are under Mercurial's control
@@ -1013,6 +1248,7 @@ entry = extensions.wrapcommand(commands.table, 'remove', override_remove)
entry = extensions.wrapcommand(commands.table, 'forget', override_forget)
entry = extensions.wrapcommand(commands.table, 'status', override_status)
+ entry = extensions.wrapcommand(commands.table, 'log', override_log)
entry = extensions.wrapcommand(commands.table, 'verify', override_verify)
verifyopt = [('', 'bf', None, _('verify bfiles')),
@@ -1044,10 +1280,17 @@ extensions.wrapfunction(hg, 'merge', hg_merge)
extensions.wrapfunction(archival, 'archive', override_archive)
- extensions.wrapfunction(cmdutil, 'bail_if_changed', override_bail_if_changed)
+ if hasattr(cmdutil, 'bailifchanged'):
+ extensions.wrapfunction(cmdutil, 'bailifchanged', override_bailifchanged)
+ else:
+ extensions.wrapfunction(cmdutil, 'bail_if_changed', override_bailifchanged)
for name, module in extensions.extensions():
if name == 'fetch':
extensions.wrapcommand(getattr(module, 'cmdtable'), 'fetch', override_fetch)
+ if name == 'purge':
+ extensions.wrapcommand(getattr(module, 'cmdtable'), 'purge', override_purge)
+ if name == 'rebase':
+ extensions.wrapcommand(getattr(module, 'cmdtable'), 'rebase', override_rebase)
|
|
@@ -10,6 +10,11 @@ util, dirstate, cmdutil, match as match_
from mercurial.i18n import _
+try:
+ from mercurial import scmutil
+except ImportError:
+ pass
+
short_name = '.kbf'
long_name = 'kilnbfiles'
@@ -40,7 +45,25 @@ remove = repo.remove
except AttributeError:
# Mercurial >= 1.6
- remove = repo[None].remove
+ try:
+ # Mercurial <= 1.8
+ remove = repo[None].remove
+ except AttributeError:
+ # Mercurial >= 1.9
+ def remove(list, unlink):
+ wlock = repo.wlock()
+ try:
+ if unlink:
+ for f in list:
+ try:
+ util.unlinkpath(repo.wjoin(f))
+ except OSError, inst:
+ if inst.errno != errno.ENOENT:
+ raise
+ repo[None].forget(list)
+ finally:
+ wlock.release()
+
return remove(list, unlink=unlink)
def repo_forget(repo, list):
@@ -74,13 +97,22 @@ return repo.findoutgoing(remote)
except AttributeError:
from mercurial import discovery
- return discovery.findoutgoing(repo, remote, force=force)
+ try:
+ # Mercurial <= 1.8
+ return discovery.findoutgoing(repo, remote, force=force)
+ except AttributeError:
+ # Mercurial >= 1.9
+ common, _anyinc, _heads = discovery.findcommonincoming(repo, remote, force=force)
+ return repo.changelog.findmissing(common)
# -- Private worker functions ------------------------------------------
if os.name == 'nt':
from mercurial import win32
- linkfn = win32.os_link
+ try:
+ linkfn = win32.oslink
+ except:
+ linkfn = win32.os_link
else:
linkfn = os.link
@@ -123,7 +155,12 @@ repo root, but it is saved in .hg/bfiles/dirstate.
'''
admin = repo.join(long_name)
- opener = util.opener(admin)
+ try:
+ # Mercurial >= 1.9
+ opener = scmutil.opener(admin)
+ except ImportError:
+ # Mercurial <= 1.8
+ opener = util.opener(admin)
if hasattr(repo.dirstate, '_validate'):
bfdirstate = dirstate.dirstate(opener, ui, repo.root, repo.dirstate._validate)
else:
@@ -225,6 +262,10 @@ if pats:
# patterns supplied: search .hgbfiles relative to current dir
cwd = repo.getcwd()
+ if os.path.isabs(cwd):
+ # cwd is an absolute path for hg -R <reponame>
+ # work relative to the repository root in this case
+ cwd = ''
pats = [os.path.join(standin_dir, cwd, pat) for pat in pats]
elif os.path.isdir(standin_dir):
# no patterns: relative to repo root
@@ -240,7 +281,13 @@ '''Wrapper around cmdutil.match() that adds showbad: if false, neuter
the match object\'s bad() method so it does not print any warnings
about missing files or directories.'''
- match = cmdutil.match(repo, pats, opts)
+ try:
+ # Mercurial >= 1.9
+ match = scmutil.match(repo[None], pats, opts)
+ except ImportError:
+ # Mercurial <= 1.8
+ match = cmdutil.match(repo, pats, opts)
+
if not showbad:
match.bad = lambda f, msg: None
return match
@@ -286,9 +333,10 @@
def update_standin(repo, standin):
file = repo.wjoin(split_standin(standin))
- hash = hashfile(file)
- executable = get_executable(file)
- write_standin(repo, standin, hash, executable)
+ if os.path.exists(file):
+ hash = hashfile(file)
+ executable = get_executable(file)
+ write_standin(repo, standin, hash, executable)
def read_standin(repo, standin):
'''read hex hash from <repo.root>/<standin>'''
@@ -318,6 +366,8 @@ return hashfile(repo.wjoin(file))
def hashfile(file):
+ if not os.path.exists(file):
+ return ''
hasher = util.sha1('')
with open(file, 'rb') as fd:
for data in blockstream(fd):
|
@@ -1,11 +1,17 @@ '''HTTP-based store.'''
+import inspect
import urlparse
import urllib2
from mercurial import util, url as url_
from mercurial.i18n import _
+try:
+ from mercurial import httpconnection
+except ImportError:
+ pass
+
import bfutil, basestore
class httpstore(basestore.basestore):
@@ -14,7 +20,12 @@ url = bfutil.urljoin(url, 'bfile')
super(httpstore, self).__init__(ui, repo, url)
self.rawurl, self.path = urlparse.urlsplit(self.url)[1:3]
- (baseurl, authinfo) = url_.getauthinfo(self.url)
+ try:
+ # Mercurial >= 1.9
+ baseurl, authinfo = util.url(self.url).authinfo()
+ except AttributeError:
+ # Mercurial <= 1.8
+ baseurl, authinfo = url_.getauthinfo(self.url)
self.opener = url_.opener(self.ui, authinfo)
def put(self, source, hash):
@@ -29,10 +40,24 @@ return
self.ui.debug('httpstore.sendfile(%s, %s)\n' % (filename, hash))
- baseurl, authinfo = url_.getauthinfo(self.url)
+ try:
+ # Mercurial >= 1.9
+ baseurl, authinfo = util.url(self.url).authinfo()
+ except AttributeError:
+ # Mercurial <= 1.8
+ baseurl, authinfo = url_.getauthinfo(self.url)
fd = None
try:
- fd = url_.httpsendfile(filename, 'rb')
+ try:
+ # Mercurial >= 1.9
+ fd = httpconnection.httpsendfile(self.ui, filename, 'rb')
+ except ImportError:
+ if 'ui' in inspect.getargspec(url_.httpsendfile.__init__)[0]:
+ # Mercurial == 1.8
+ fd = url_.httpsendfile(self.ui, filename, 'rb')
+ else:
+ # Mercurial <= 1.7
+ fd = url_.httpsendfile(filename, 'rb')
request = urllib2.Request(bfutil.urljoin(baseurl, hash), fd)
try:
url = self.opener.open(request)
@@ -45,7 +70,12 @@ if fd: fd.close()
def _getfile(self, tmpfile, filename, hash):
- (baseurl, authinfo) = url_.getauthinfo(self.url)
+ try:
+ # Mercurial >= 1.9
+ baseurl, authinfo = util.url(self.url).authinfo()
+ except AttributeError:
+ # Mercurial <= 1.8
+ baseurl, authinfo = url_.getauthinfo(self.url)
url = bfutil.urljoin(baseurl, hash)
try:
request = urllib2.Request(url)
@@ -62,7 +92,12 @@ return bfutil.copy_and_hash(bfutil.blockstream(infile), tmpfile)
def _verify(self, hash):
- baseurl, authinfo = url_.getauthinfo(self.url)
+ try:
+ # Mercurial >= 1.9
+ baseurl, authinfo = util.url(self.url).authinfo()
+ except AttributeError:
+ # Mercurial <= 1.8
+ baseurl, authinfo = url_.getauthinfo(self.url)
store_path = bfutil.urljoin(baseurl, hash)
request = urllib2.Request(store_path)
request.add_header('SHA1-Request', hash)
@@ -76,7 +111,12 @@ return False
def _verifyfile(self, cctx, cset, contents, standin, verified):
- baseurl, authinfo = url_.getauthinfo(self.url)
+ try:
+ # Mercurial >= 1.9
+ baseurl, authinfo = util.url(self.url).authinfo()
+ except AttributeError:
+ # Mercurial <= 1.8
+ baseurl, authinfo = url_.getauthinfo(self.url)
filename = bfutil.split_standin(standin)
if not filename:
return False
|
@@ -4,4 +4,7 @@ python <path to Mercurial source directory>/tests/run-tests.py
For the tests that use Kiln, you need to change the Kiln settings in
-kilntest.py.
+custom.py. Also, you must run at least one operation that involves
+interacting with the Kiln server and entering your username and password
+so that they are stored in the kilnauth extension prior to running the
+tests.
|
@@ -2,19 +2,43 @@ import os
import stat
import subprocess
+import re
import hgtest
+import kilntest
# assumes we're run by hg's run-tests.py
-TESTDIR = os.environ['TESTDIR']
-
STOREDIR = os.path.join(os.getcwd(), 'store')
DEFAULTRC = {
- 'extensions': [('kbfiles', '%s/../kbfiles' % TESTDIR),],
+ 'extensions': [('kbfiles', kilntest.KBFILESPATH),
+ ('rebase', '')],
'kilnbfiles': [('systemcache', os.path.join(os.getcwd(), 'bfilesstore')),],
}
+def getversion():
+ hgname = 'hg'
+ if os.name == 'nt':
+ for path in os.environ['PATH'].split(';'):
+ if os.path.exists(os.path.join(path, 'hg')):
+ hgname = r'python %s\hg' % path
+ break
+ cmd = [hgname, 'version']
+ child = subprocess.Popen(
+ cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ universal_newlines=True)
+ stdout, stderr = child.communicate()
+ versions = re.findall(r'\d+\.\d+\.\d+', stdout)
+ parts = [re.match(r'\d+', v).group(0) for v in versions[0].split('.')]
+ version = [0, 0, 0]
+ for i, part in enumerate(map(int, parts)):
+ version[i] = part
+ return tuple(version)
+
+version = getversion()
+
class BfilesTester(hgtest.Tester):
def updaterc(self, extraconfig=None):
'''Append configuration settings to $HGRCPATH to configure bfiles
@@ -205,4 +229,3 @@ hgt.asserttrue(checkdirs(repo1, repo2), 'repos dont match at %d' % i)
hgt.hg(['up', '-R', repo1, '-C'], stdout=hgt.ANYTHING, log=False)
hgt.hg(['up', '-R', repo2, '-C'], stdout=hgt.ANYTHING, log=False)
-
|
|
@@ -0,0 +1,10 @@ + # Update the four variables below
+# Your local kiln must have a project Test with a repo group called Test
+# A repo Test in that group, as well as a branch repository TestBranch, will
+# be created as part of the tests. The username and password given must have
+# write access to that repo group.
+
+KILNEXTPATH = '~/kiln/extensions'
+KILNURL = 'http://localhost/FogBugz/kiln'
+USER = 'test'
+PASSWORD = 'tester'
|
|
@@ -1,19 +1,26 @@ import json
import sys
+import os
import time
+import getpass
import urllib2
from urllib import urlencode
-# Update the four variables below
-# Your local kiln must have a project Test with a repo group called Test
-# The repo test in that group will be used for testing. The username
-# and password given must have write access to that group.
+from custom import *
-KILNAUTHPATH = '/code/kiln/2-0/extensions/kilnauth.py'
-KILNURL = 'http://localhost/FogBugz/kiln'
-USER = 'test'
-PASSWORD = 'tester'
+# Ensure that the home directory is set appropriately so that the kilnauth
+# cookies will be found. This is important because Mercurial 1.9 and later
+# changes the home directory in the test script.
+os.environ['HOME'] = os.path.expanduser('~' + getpass.getuser());
+# Paths for the individual extensions
+KBFILESPATH = KILNEXTPATH + '/bfiles/kbfiles'
+KILNAUTHPATH = KILNEXTPATH + '/kilnauth.py'
+GESTALTPATH = KILNEXTPATH + '/gestalt.py'
+KILNPATHPATH = KILNEXTPATH + '/kilnpath.py'
+BIGPUSHPATH = KILNEXTPATH + '/big-push.py'
+KILNPATH = KILNEXTPATH + '/kiln.py'
+CASEGUARDPATH = KILNEXTPATH + '/caseguard.py'
def api(url):
return KILNURL + '/api/1.0/' + url
@@ -27,7 +34,7 @@ return obj
def gettoken():
- return slurp(api('Auth/Login'), dict(sUser='test', sPassword='tester'))
+ return slurp(api('Auth/Login'), dict(sUser=USER, sPassword=PASSWORD))
def createtest(hgt, token):
projects = slurp(api('Project'), dict(token=token))
@@ -53,12 +60,43 @@ while slurp(api('Repo/%d' % ixRepo), dict(token=token))['sStatus'] != 'good':
time.sleep(0.1)
- return (KILNURL + '/Repo/Test/Test/test', ixRepo)
+ return (KILNURL + '/Repo/Test/Test/Test', ixRepo)
+
+def createtestbranch(hgt, token, ixParent):
+ projects = slurp(api('Project'), dict(token=token))
+
+ found = False
+ for project in projects:
+ if project['sName'] == 'Test':
+ ixProject = project['ixProject']
+ for group in project['repoGroups']:
+ if group['sName'] == 'Test':
+ ixRepoGroup = group['ixRepoGroup']
+ found = True
+
+ if not found:
+ return None
+
+ time.sleep(1)
+ while slurp(api('Repo/%d' % ixParent), dict(token=token))['sStatus'] != 'good':
+ time.sleep(0.1)
+
+ repo = slurp(api('Repo/Create'), dict(sName='TestBranch', sDescription='test branch', ixRepoGroup=ixRepoGroup, ixParent=ixParent, fCentral=False, sDefaultPermission='write', token=token))
+ ixRepo = repo['ixRepo']
+
+ hgt.asserttrue(isinstance(ixRepo, int), 'Create failed %s' % (str(ixRepo)))
+
+ time.sleep(1)
+ while slurp(api('Repo/%d' % ixRepo), dict(token=token))['sStatus'] != 'good':
+ time.sleep(0.1)
+
+ return (KILNURL + '/Repo/Test/Test/TestBranch', ixRepo)
def deletetest(hgt, token):
projects = slurp(api('Project'), dict(token=token))
found = False
+ foundbranch = False
for project in projects:
if project['sName'] == 'Test':
ixProject = project['ixProject']
@@ -69,14 +107,22 @@ if repo['sName'] == 'Test':
ixRepo = repo['ixRepo']
found = True
- if not found:
- return None
- slurp(api('Repo/%d/Delete' % ixRepo), dict(token=token), post=True)
-
- try:
- while True:
- slurp(api('Repo/%d' % ixRepo), dict(token=token))
- time.sleep(0.1)
- except urllib2.HTTPError:
- pass
-
+ if repo['sName'] == 'TestBranch':
+ ixBranch = repo['ixRepo']
+ foundbranch = True
+ if foundbranch:
+ slurp(api('Repo/%d/Delete' % ixBranch), dict(token=token), post=True)
+ try:
+ while True:
+ slurp(api('Repo/%d' % ixBranch), dict(token=token))
+ time.sleep(0.1)
+ except urllib2.HTTPError:
+ pass
+ if found:
+ slurp(api('Repo/%d/Delete' % ixRepo), dict(token=token), post=True)
+ try:
+ while True:
+ slurp(api('Repo/%d' % ixRepo), dict(token=token))
+ time.sleep(0.1)
+ except urllib2.HTTPError:
+ pass
|
|
|
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
#
# Every commit needs time stamps so that the commits are unique (Mercurial backout test
# does the same thing).
@@ -49,7 +49,7 @@C dir/n2
''')
hgt.hg(['backout', '2', '-d', '3 0'],
- stdout='''Getting changed bfiles
+ stdout='''getting changed bfiles
0 big files updated, 0 removed
adding ../.kbf/dir/dir/b3
adding dir/n3
@@ -68,7 +68,7 @@hgt.asserttrue(hgt.readfile('dir/n3') == 'n3', 'file changed')
hgt.asserttrue(hgt.readfile('dir/b3') == 'b3', 'file changed')
hgt.hg(['backout', '3', '-d', '4 0'],
- stdout='''Getting changed bfiles
+ stdout='''getting changed bfiles
0 big files updated, 0 removed
removing ../.kbf/dir/dir/b3
removing dir/n3
@@ -86,23 +86,23 @@hgt.assertfalse(os.path.exists('dir/b3'), 'file shouldnt exist')
hgt.announce('backout... from the past!')
hgt.hg(['backout', '2', '-d', '5 0', '--merge'],
- stdout='''Getting changed bfiles
+ stdout='''getting changed bfiles
0 big files updated, 0 removed
adding ../.kbf/dir/dir/b3
adding dir/n3
created new head
changeset 5:df61b823c9a6 backs out changeset 2:99a2429e853e
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 1 removed
merging with changeset 5:df61b823c9a6
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 0 removed
''')
hgt.hg(['commit', '-m', 'merge', '-d', '6 0'])
hgt.hg(['backout', '1', '--merge', '-d', '7 0'],
- stdout='''Getting changed bfiles
+ stdout='''getting changed bfiles
0 big files updated, 0 removed
reverting ../.kbf/dir/b1
reverting ../.kbf/dir/dir/dir/b4
@@ -110,12 +110,12 @@reverting n1
created new head
changeset 7:5e72be42125c backs out changeset 1:837f6fa72847
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
merging with changeset 7:5e72be42125c
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
hgt.asserttrue(hgt.readfile('n1') == 'n1', 'file should match start')
@@ -129,7 +129,7 @@hgt.hg(['commit', '-m', 'merge', '-d', '8 0'])
hgt.hg(['up', '-r', '0'],
stdout='''4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 0 removed
''')
hgt.asserttrue(hgt.readfile('n1') == 'n1', 'file should match start')
@@ -142,7 +142,7 @@hgt.asserttrue(hgt.readfile('dir/dir/b4') == 'b4', 'file should match start')
hgt.hg(['up'],
stdout='''4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 0 removed
''')
hgt.asserttrue(hgt.readfile('n1') == 'n1', 'file should match start')
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test various tricky bfadd corner cases.
@@ -52,7 +52,7 @@hgt.hg(['bisect', '-b'],
stdout='''Testing changeset 2:04f4251bb360 (4 changesets remaining, ~2 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
hgt.writefile('big1', 'blah')
@@ -60,7 +60,7 @@hgt.hg(['revert', '-a'], stdout='reverting .kbf/big1\n')
hgt.hg(['bisect', '-g'], stdout='''Testing changeset 3:bbc1532f9dcf (2 changesets remaining, ~1 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
hgt.hg(['bisect', '-b'],
@@ -73,7 +73,7 @@''')
hgt.hg(['up'],
stdout='''4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
@@ -93,25 +93,25 @@hgt.hg(['bisect', '-b'])
hgt.hg(['up', '-r', '1'],
stdout='''4 files updated, 0 files merged, 2 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 1 removed
''')
hgt.hg(['bisect', '-g'],
stdout='''Testing changeset 3:bbc1532f9dcf (5 changesets remaining, ~2 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
hgt.hg(['bisect', '-g'],
stdout='''Testing changeset 4:de7b6579c9e2 (3 changesets remaining, ~1 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
hgt.hg(['bisect', '-g'],
stdout='''Testing changeset 5:5e56aef38802 (2 changesets remaining, ~1 tests)
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 1 removed
''')
hgt.hg(['bisect', '-g'],
@@ -125,6 +125,6 @@''')
hgt.hg(['up'],
stdout='''2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 0 removed
''')
|
|
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test cloning a repo
@@ -54,7 +54,7 @@hgt.hg(['clone', 'repo1', 'repo2'],
stdout=('updating to branch default\n'
'7 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'3 big files updated, 0 removed\n'))
files = ['normal1', 'sub/normal2', 'sub/normal3.txt', 'sub/normal4.txt', 'big1', 'sub/big2', 'sub/big3.txt']
for file in files:
@@ -64,12 +64,12 @@os.chdir('repo1')
hgt.hg(['up', '-r', '0'],
stdout=('2 files updated, 0 files merged, 3 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'0 big files updated, 3 removed\n'))
os.chdir('../repo2')
hgt.hg(['up', '-r', '0'],
stdout=('2 files updated, 0 files merged, 3 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'0 big files updated, 3 removed\n'))
os.chdir('..')
for file in files:
@@ -79,12 +79,12 @@os.chdir('repo1')
hgt.hg(['up', '-r', '1'],
stdout=('3 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'3 big files updated, 0 removed\n'))
os.chdir('../repo2')
hgt.hg(['up', '-r', '1'],
stdout=('3 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'3 big files updated, 0 removed\n'))
os.chdir('..')
for file in files:
@@ -94,12 +94,12 @@os.chdir('repo1')
hgt.hg(['up', '-r', '2'],
stdout=('4 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'2 big files updated, 0 removed\n'))
os.chdir('../repo2')
hgt.hg(['up', '-r', '2'],
stdout=('4 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'2 big files updated, 0 removed\n'))
os.chdir('..')
for file in files:
@@ -109,7 +109,7 @@hgt.hg(['clone', '-U', 'repo2', 'repo3'])
os.chdir('repo3')
hgt.hg(['up'], stdout=('7 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'3 big files updated, 0 removed\n'))
os.chdir('..')
for file in files:
@@ -119,12 +119,12 @@os.chdir('repo2')
hgt.hg(['up', '-r', '0'],
stdout=('2 files updated, 0 files merged, 3 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'0 big files updated, 3 removed\n'))
os.chdir('../repo3')
hgt.hg(['up', '-r', '0'],
stdout=('2 files updated, 0 files merged, 3 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'0 big files updated, 3 removed\n'))
os.chdir('..')
for file in files:
@@ -134,12 +134,12 @@os.chdir('repo2')
hgt.hg(['up', '-r', '1'],
stdout=('3 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'3 big files updated, 0 removed\n'))
os.chdir('../repo3')
hgt.hg(['up', '-r', '1'],
stdout=('3 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'3 big files updated, 0 removed\n'))
os.chdir('..')
for file in files:
@@ -149,12 +149,12 @@os.chdir('repo2')
hgt.hg(['up', '-r', '2'],
stdout=('4 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'2 big files updated, 0 removed\n'))
os.chdir('../repo3')
hgt.hg(['up', '-r', '2'],
stdout=('4 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'2 big files updated, 0 removed\n'))
os.chdir('..')
for file in files:
@@ -185,7 +185,7 @@ hgt.asserttrue(file.startswith('.hg'), 'files shouldnt exist')
hgt.hg(['up'],
stdout='''17 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
7 big files updated, 0 removed
''')
os.chdir('..')
@@ -202,13 +202,13 @@os.chdir('repo3')
hgt.hg(['up', '-r', '2'],
stdout='''0 files updated, 0 files merged, 10 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 4 removed
''')
os.chdir('../repo4')
hgt.hg(['up', '-r', '2'],
stdout='''0 files updated, 0 files merged, 10 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 4 removed
''')
os.chdir('..')
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
#
# Test commit (lots of other tests commit all files so just try committing specific files)
#
@@ -55,3 +55,8 @@''')
hgt.hg(['commit', '-m', 'adding', 'dir/b2', 'dir/n2'])
hgt.hg(['status'])
+hgt.writefile('b1', 'b11')
+hgt.hg(['status'],
+ stdout='M b1\n')
+hgt.hg(['commit', '-m', 'modifying b1'])
+hgt.asserttrue(hgt.readfile('b1') == 'b11', 'file contents dont match')
|
@@ -11,3 +11,5 @@ hg status
hg commit -m adding dir/b2 dir/n2
hg status
+hg status
+hg commit -m 'modifying b1'
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test various tricky bfadd corner cases.
@@ -165,7 +165,7 @@''')
hgt.hg(['up'],
stdout='''8 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
6 big files updated, 0 removed
''')
hgt.asserttrue(os.path.exists('.kbf'), 'bfile standins should exist')
@@ -213,7 +213,7 @@''')
hgt.hg(['up'],
stdout='''8 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
8 big files updated, 0 removed
''')
hgt.asserttrue(os.path.exists('.kbf'), 'bfile standins should exist')
|
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test that kbfconvert handles tags properly
@@ -161,27 +161,27 @@
''')
hgt.hg(['up', '-r', '0'], stdout='''6 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
hgt.assertfalse(os.path.exists('.hgtags'), "hgtags doesn't match")
hgt.hg(['up', '-r', '1'], stdout='''6 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
4 big files updated, 0 removed
''')
hgt.assertfalse(os.path.exists('.hgtags'), "hgtags doesn't match")
hgt.hg(['up', '-r', '2'], stdout='''1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 0 removed
''')
hgt.asserttrue(hgt.readfile('.hgtags') == '494d68993338ddb5b7fd854396a003be5ed72755 first\n', "hgtags doesn't match")
hgt.hg(['up', '-r', '3'], stdout='''1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 0 removed
''')
hgt.asserttrue(hgt.readfile('.hgtags') == '494d68993338ddb5b7fd854396a003be5ed72755 first\na633211558b85df9a4e0c18c0777284421721158 second\n', "hgtags doesn't match")
hgt.hg(['up', '-r', '4'], stdout='''1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
0 big files updated, 0 removed
''')
hgt.asserttrue(hgt.readfile('.hgtags') == '494d68993338ddb5b7fd854396a003be5ed72755 first\na633211558b85df9a4e0c18c0777284421721158 second\n3c50e5db999358097d2b8602f50b2acda3886bc9 last\n', "hgtags doesn't match")
@@ -252,3 +252,78 @@hgt.asserttrue(hgt.readfile('.hgtags') == 'd82117283c29e97adb8ebbcc5ea8fb7613ad0864 first\n73960f5ccfe2ca2f74002e55d74f186678f53872 second\n', "hgtags doesn't match")
hgt.hg(['up', '-r', '4'], stdout='1 files updated, 0 files merged, 0 files removed, 0 files unresolved\n')
hgt.asserttrue(hgt.readfile('.hgtags') == 'd82117283c29e97adb8ebbcc5ea8fb7613ad0864 first\n73960f5ccfe2ca2f74002e55d74f186678f53872 second\ne229b8d1bac18cbd3eef20f9433c076fe45fa97d last\n', "hgtags doesn't match")
+os.chdir('..')
+hgt.hg(['tag', '-R', 'repo3', 'fromroot'])
+hgt.hg(['log', '-R', 'repo3'], stdout='''changeset: 5:d9771069dce1
+tag: tip
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag fromroot for changeset c4495ce62a60
+
+changeset: 4:c4495ce62a60
+tag: fromroot
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag last for changeset e229b8d1bac1
+
+changeset: 3:e229b8d1bac1
+tag: last
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag second for changeset 73960f5ccfe2
+
+changeset: 2:d41643b333a9
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag first for changeset d82117283c29
+
+changeset: 1:73960f5ccfe2
+tag: second
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: add more files
+
+changeset: 0:d82117283c29
+tag: first
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: initial commit
+
+''')
+hgt.hg(['tag', '-R', 'repo2', 'fromroot'])
+hgt.hg(['log', '-R', 'repo2'], stdout='''changeset: 5:e861e23e4324
+tag: tip
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag fromroot for changeset d6940222c000
+
+changeset: 4:d6940222c000
+tag: fromroot
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag last for changeset e229b8d1bac1
+
+changeset: 3:3c50e5db9993
+tag: last
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag second for changeset 73960f5ccfe2
+
+changeset: 2:4a283e03a784
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: Added tag first for changeset d82117283c29
+
+changeset: 1:a633211558b8
+tag: second
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: add more files
+
+changeset: 0:494d68993338
+tag: first
+user: test
+date: Thu Jan 01 00:00:00 1970 +0000
+summary: initial commit
+
+''')
|
@@ -31,3 +31,7 @@ hg up -r 2
hg up -r 3
hg up -r 4
+hg tag -R repo3 fromroot
+hg log -R repo3
+hg tag -R repo2 fromroot
+hg log -R repo2
|
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test that edited bfiles show up as modified
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
#
# Test the fetch extension. Always give it a specific message because the message
# it automatically adds includes the path which is randomly generated.
@@ -28,7 +28,7 @@hgt.hg(['clone', 'repo1', 'repo2'],
stdout='''updating to branch default
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
os.chdir('repo1')
@@ -47,7 +47,7 @@adding file changes
added 1 changesets with 2 changes to 2 files
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 0 removed
''')
hgt.hg(['mv', 'dir/n2', 'n2'])
@@ -66,13 +66,13 @@added 1 changesets with 2 changes to 2 files (+1 heads)
updating to 3:04650d35496d
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 1 removed
merging with 2:6db24b20137f
merging b2 and dir/b2 to b2
merging n2 and dir/n2 to n2
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 0 removed
new changeset 4:dacf855d6b8a merges remote changes with local
''')
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test remove
@@ -56,7 +56,7 @@hgt.announce('test update')
hgt.hg(['up', '-r', '1'],
stdout=('3 files updated, 0 files merged, 0 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'1 big files updated, 0 removed\n'))
hgt.asserttrue(os.path.exists('sub/normal3.txt'), 'added file doesnt exist')
hgt.asserttrue(os.path.exists('sub/normal4.txt'), 'added file doesnt exist')
@@ -67,7 +67,7 @@hgt.asserttrue(os.path.exists('sub/big2'), 'added file doesnt exist')
hgt.hg(['up'],
stdout=('0 files updated, 0 files merged, 3 files removed, 0 files unresolved\n'
- 'Getting changed bfiles\n'
+ 'getting changed bfiles\n'
'0 big files updated, 1 removed\n'))
hgt.assertfalse(os.path.exists('sub/normal3.txt'), 'removed file exists')
hgt.assertfalse(os.path.exists('sub/normal4.txt'), 'removed file exists')
|
|
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
#
# Test basic kiln interaction
@@ -43,7 +43,7 @@''')
hgt.hg(['commit', '-m', 'add files'])
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 0:da6857b8d2bf
tag: tip
@@ -70,13 +70,13 @@kbfiles: 4 to upload
''')
hgt.hg(['push'],
- stdout='''pushing to %s/Repo/Test/Test/test
+ stdout='''pushing to %s/Repo/Test/Test/Test
searching for changes
searching for changes
remote: kiln: successfully pushed one changeset
''' % kilntest.KILNURL)
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
no changes found
searching for changes
@@ -92,17 +92,17 @@added 1 changesets with 8 changes to 8 files
updating to branch default
8 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
4 big files updated, 0 removed
''')
os.chdir('repo2')
hgt.hg(['in'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
no changes found
''' % kilntest.KILNURL, status=1)
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
no changes found
searching for changes
@@ -112,7 +112,7 @@hgt.writefile('b4', 'b44')
hgt.hg(['commit', '-m', 'edit n4 and b4'])
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 1:8499483c24d0
tag: tip
@@ -126,14 +126,14 @@
''' % kilntest.KILNURL)
hgt.hg(['push'],
- stdout='''pushing to %s/Repo/Test/Test/test
+ stdout='''pushing to %s/Repo/Test/Test/Test
searching for changes
searching for changes
remote: kiln: successfully pushed one changeset
''' % kilntest.KILNURL)
os.chdir('../repo1')
hgt.hg(['in'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 1:8499483c24d0
tag: tip
@@ -143,14 +143,14 @@
''' % kilntest.KILNURL)
hgt.hg(['out'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
no changes found
''' % kilntest.KILNURL)
hgt.hg(['mv', 'n4', 'b4', 'a'])
hgt.hg(['commit', '-m', 'move n4 and b4'])
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 1:6b693340d9c6
tag: tip
@@ -167,7 +167,7 @@# to stderr at some version after Mercurial 1.6. Just don't check stdout/stderr.
hgt.hg(['push'], stdout=hgtest.ANYTHING, stderr=hgtest.ANYTHING, status=[1, 255])
hgt.hg(['pull'],
- stdout='''pulling from %s/Repo/Test/Test/test
+ stdout='''pulling from %s/Repo/Test/Test/Test
searching for changes
adding changesets
adding manifests
@@ -180,12 +180,12 @@merging a/n4 and n4 to a/n4
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 0 removed
''')
hgt.hg(['commit', '-m', 'merge'])
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 1:6b693340d9c6
user: test
@@ -215,20 +215,20 @@searching for changes
kbfiles: 1 to upload
''')
-hgt.hg(['push'], stdout='''pushing to %s/Repo/Test/Test/test
+hgt.hg(['push'], stdout='''pushing to %s/Repo/Test/Test/Test
searching for changes
searching for changes
remote: kiln: successfully pushed 2 changesets
''' % kilntest.KILNURL)
os.chdir('../repo2')
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
no changes found
searching for changes
kbfiles: No remote repo
''' % kilntest.KILNURL)
-hgt.hg(['in'], stdout='''comparing with %s/Repo/Test/Test/test
+hgt.hg(['in'], stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 2:6b693340d9c6
parent: 0:da6857b8d2bf
@@ -245,7 +245,7 @@summary: merge
''' % kilntest.KILNURL)
-hgt.hg(['pull'], stdout='''pulling from %s/Repo/Test/Test/test
+hgt.hg(['pull'], stdout='''pulling from %s/Repo/Test/Test/Test
searching for changes
adding changesets
adding manifests
@@ -254,13 +254,13 @@(run 'hg update' to get a working copy)
''' % kilntest.KILNURL)
hgt.hg(['in'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
no changes found
''' % kilntest.KILNURL, status=1)
hgt.hg(['up'],
stdout='''2 files updated, 0 files merged, 2 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 1 removed
''')
os.chdir('..')
@@ -270,7 +270,7 @@hgt.writefile('a/b1', 'b11')
hgt.hg(['commit', '-m', 'edit n1 and b1'])
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 4:fdb0cdc62a97
tag: tip
@@ -295,14 +295,14 @@''')
hgt.hg(['up'],
stdout='''2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
1 big files updated, 0 removed
''')
hgt.writefile('a/b/n2', 'n22')
hgt.writefile('a/b/b2', 'b22')
hgt.hg(['commit', '-m', 'edit n22 and b22'])
hgt.hg(['out', '--bf'],
- stdout='''comparing with %s/Repo/Test/Test/test
+ stdout='''comparing with %s/Repo/Test/Test/Test
searching for changes
changeset: 4:fdb0cdc62a97
user: test
@@ -332,14 +332,14 @@kbfiles: 2 to upload
''')
hgt.hg(['push'],
- stdout='''pushing to %s/Repo/Test/Test/test
+ stdout='''pushing to %s/Repo/Test/Test/Test
searching for changes
searching for changes
remote: kiln: successfully pushed 2 changesets
''' % kilntest.KILNURL)
os.chdir('../repo2')
hgt.hg(['pull'],
- stdout='''pulling from %s/Repo/Test/Test/test
+ stdout='''pulling from %s/Repo/Test/Test/Test
searching for changes
adding changesets
adding manifests
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
#
# Test basic kiln interaction
@@ -43,7 +43,7 @@''')
hgt.hg(['commit', '-m', 'add files'])
hgt.hg(['push'],
- stdout='''pushing to %s/Repo/Test/Test/test
+ stdout='''pushing to %s/Repo/Test/Test/Test
searching for changes
searching for changes
remote: kiln: successfully pushed one changeset
@@ -62,7 +62,7 @@ stdout='requesting all changes\n', log=False,
stderr='abort: HTTP Error 400: To access this repository, install the kiln-bfiles extension from %s/Tools\n' % kilntest.KILNURL, status=255)
os.chdir('repo1')
-hgt.hg(['push'], stdout='''pushing to %s/Repo/Test/Test/test
+hgt.hg(['push'], stdout='''pushing to %s/Repo/Test/Test/Test
searching for changes
remote: ERROR: Big file a/b1 at revision 1 has not been uploaded to the kiln server.
remote: ERROR: All big files must be uploaded to the kiln server before the repository is changed.
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
|
@@ -0,0 +1,15 @@ + % setup
+hg init
+hg add n1
+hg commit -m 'add file'
+hg add --bf b1
+hg commit -m 'add bfile'
+hg commit -m 'modify file'
+hg commit -m 'modify bfile'
+hg rm n1
+hg commit -m 'remove file'
+hg rm b1
+hg commit -m 'remove bfile'
+hg log -v
+hg log -p
+hg log --stat
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
#
# Test summary
@@ -27,7 +27,7 @@hgt.hg(['clone', 'repo1', 'repo2'],
stdout='''updating to branch default
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
2 big files updated, 0 removed
''')
os.chdir('repo2')
@@ -38,8 +38,12 @@
hgt.announce('outgoing')
os.chdir('repo1')
-hgt.hg(['out'], status=255, stderr='abort: repository default-push not found!\n')
-hgt.hg(['out', '--bf'], status=255, stderr='abort: repository default-push not found!\n')
+if common.version >= (1, 8, 0):
+ hgt.hg(['out'], status=255, stdout='comparing with default-push\n', stderr='abort: repository default-push not found!\n')
+ hgt.hg(['out', '--bf'], status=255, stdout='comparing with default-push\n', stderr='abort: repository default-push not found!\n')
+else:
+ hgt.hg(['out'], status=255, stderr='abort: repository default-push not found!\n')
+ hgt.hg(['out', '--bf'], status=255, stderr='abort: repository default-push not found!\n')
os.chdir('../repo2')
hgt.hg(['out'],
stdout='''comparing with $HGTMP/test-outgoing.py/repo1
|
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test various tricky bfadd corner cases.
@@ -116,14 +116,14 @@
if windows:
hgt.hg(['backout', '-r', '2'],
- stdout='''Getting changed bfiles
+ stdout='''getting changed bfiles
0 big files updated, 0 removed
reverting foo/dir/n3
changeset 3:8abd5724a95c backs out changeset 2:df964af3433e
''')
else:
hgt.hg(['backout', '-r', '2'],
- stdout='''Getting changed bfiles
+ stdout='''getting changed bfiles
0 big files updated, 0 removed
reverting .kbf/b1
reverting .kbf/foo/b2
@@ -157,7 +157,7 @@hgt.hg(['clone', 'repo1', 'repo2'],
stdout='''updating to branch default
6 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Getting changed bfiles
+getting changed bfiles
3 big files updated, 0 removed
''')
common.checkrepos(hgt, 'repo1', 'repo2', [0, 1, 2, 3])
|
|
@@ -0,0 +1,37 @@ + #!/usr/bin/env python
+
+# Test hg purge
+
+import os
+import common
+
+hgt = common.BfilesTester()
+
+hgt.updaterc({'extensions': [('purge', '')]})
+hgt.announce('setup')
+os.mkdir('repo1')
+os.chdir('repo1')
+hgt.hg(['init'])
+hgt.writefile('b1', 'b1')
+hgt.writefile('n1', 'n1')
+hgt.writefile('n2', 'n2')
+hgt.hg(['add', '--bf', 'b1'])
+hgt.hg(['add', 'n1'])
+hgt.hg(['commit', '-m', 'add some files'])
+hgt.hg(['purge'])
+hgt.asserttrue(os.path.exists('b1'), 'missing b1')
+hgt.asserttrue(hgt.readfile('b1') == 'b1', 'wrong file contents')
+hgt.writefile('b2', 'b2')
+hgt.hg(['purge'])
+hgt.assertfalse(os.path.exists('b2'), 'failed to purge b2')
+hgt.writefile('b2', 'b2')
+hgt.hg(['add', '--bf', 'b2'])
+hgt.hg(['purge'])
+hgt.asserttrue(os.path.exists('b2'), 'missing b2')
+hgt.asserttrue(hgt.readfile('b2') == 'b2', 'wrong file contents')
+hgt.hg(['commit', '-m', 'add another bfile'])
+hgt.writefile('b2', 'b22')
+hgt.hg(['purge'])
+hgt.asserttrue(os.path.exists('b2'), 'missing b2')
+hgt.asserttrue(hgt.readfile('b2') == 'b22', 'wrong file contents')
+os.chdir('..')
|
|
@@ -0,0 +1,11 @@ + % setup
+hg init
+hg add --bf b1
+hg add n1
+hg commit -m 'add some files'
+hg purge
+hg purge
+hg add --bf b2
+hg purge
+hg commit -m 'add another bfile'
+hg purge
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
@@ -1,4 +1,4 @@ - #!/usr/bin/python
+#!/usr/bin/env python
# Test that bfiles does not conflict with other extensions
# (e.g. bookmarks) that override localrepository.commit().
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
@@ -23,3 +23,15 @@ hg status
hg revert -r 0 n2.txt b2.txt
hg status
+hg init -q
+hg add n1
+hg commit -m 'added normal file'
+hg add --bf b1
+hg commit -m 'added bfile'
+hg revert n1
+hg init -q
+hg add --bf b1
+hg commit -m 'added first bfile'
+hg add --bf b2
+hg commit -m 'added second bfile'
+hg revert b1
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
Loading...