Hello community, here is the log from the commit of package mercurial for openSUSE:Factory checked in at 2014-12-22 12:54:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mercurial (Old) and /work/SRC/openSUSE:Factory/.mercurial.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mercurial" Changes: -------- --- /work/SRC/openSUSE:Factory/mercurial/mercurial.changes 2014-12-17 19:15:03.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.mercurial.new/mercurial.changes 2014-12-22 12:53:03.000000000 +0100 @@ -1,0 +2,17 @@ +Fri Dec 19 08:06:30 UTC 2014 - [email protected] + +- update to v3.2.3 + * context: stop setting None for modified or added nodes + * darwin: omit ignorable codepoints when normcase()ing a file path + * encoding: add hfsignoreclean to clean out HFS-ignored characters + * largefiles: don't actually remove largefiles in an addremove dry run + * log: fix log -f slow path to actually follow history + * log: fix log revset instability + * manifest: disallow setting the node id of an entry to None + * pathauditor: check for Windows shortname aliases + * pathauditor: check for codepoints ignored on OS X + * rebase: ignore negative state when updating back to original wc parent + * update: add tests for untracked local file + * update: don't overwrite untracked ignored files on update + +------------------------------------------------------------------- Old: ---- mercurial-3.2.2.tar.gz New: ---- mercurial-3.2.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mercurial.spec ++++++ --- /var/tmp/diff_new_pack.4dZ19Q/_old 2014-12-22 12:53:04.000000000 +0100 +++ /var/tmp/diff_new_pack.4dZ19Q/_new 2014-12-22 12:53:04.000000000 +0100 @@ -17,7 +17,7 @@ Name: mercurial -Version: 3.2.2 +Version: 3.2.3 Release: 0 Summary: Scalable Distributed SCM License: GPL-2.0+ ++++++ mercurial-3.2.2.tar.gz -> mercurial-3.2.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/.hgsigs new/mercurial-3.2.3/.hgsigs --- old/mercurial-3.2.2/.hgsigs 2014-12-02 01:39:20.000000000 +0100 +++ new/mercurial-3.2.3/.hgsigs 2014-12-18 21:59:29.000000000 +0100 @@ -97,3 +97,4 @@ 7f8d16af8cae246fa5a48e723d48d58b015aed94 0 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/.hgtags new/mercurial-3.2.3/.hgtags --- old/mercurial-3.2.2/.hgtags 2014-12-02 01:39:20.000000000 +0100 +++ new/mercurial-3.2.3/.hgtags 2014-12-18 21:59:29.000000000 +0100 @@ -110,3 +110,4 @@ 7f8d16af8cae246fa5a48e723d48d58b015aed94 3.2-rc ced632394371a36953ce4d394f86278ae51a2aae 3.2 643c58303fb0ec020907af28b9e486be299ba043 3.2.1 +902554884335e5ca3661d63be9978eb4aec3f68a 3.2.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/PKG-INFO new/mercurial-3.2.3/PKG-INFO --- old/mercurial-3.2.2/PKG-INFO 2014-12-02 01:39:31.000000000 +0100 +++ new/mercurial-3.2.3/PKG-INFO 2014-12-18 21:59:40.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: mercurial -Version: 3.2.2 +Version: 3.2.3 Summary: Fast scalable distributed SCM (revision control, version control) system Home-page: http://mercurial.selenic.com/ Author: Matt Mackall and many others diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/hgext/largefiles/overrides.py new/mercurial-3.2.3/hgext/largefiles/overrides.py --- old/mercurial-3.2.2/hgext/largefiles/overrides.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/hgext/largefiles/overrides.py 2014-12-18 21:59:22.000000000 +0100 @@ -189,8 +189,15 @@ # are removing the file. if isaddremove: ui.status(_('removing %s\n') % f) - util.unlinkpath(repo.wjoin(f), ignoremissing=True) - lfdirstate.remove(f) + + if not opts.get('dry_run'): + if not after: + util.unlinkpath(repo.wjoin(f), ignoremissing=True) + lfdirstate.remove(f) + + if opts.get('dry_run'): + return result + lfdirstate.write() remove = [lfutil.standin(f) for f in remove] # If this is being called by addremove, let the original addremove diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/hgext/rebase.py new/mercurial-3.2.3/hgext/rebase.py --- old/mercurial-3.2.2/hgext/rebase.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/hgext/rebase.py 2014-12-18 21:59:22.000000000 +0100 @@ -449,6 +449,9 @@ # restore original working directory # (we do this before stripping) newwd = state.get(originalwd, originalwd) + if newwd < 0: + # original directory is a parent of rebase set root or ignored + newwd = originalwd if newwd not in [c.rev() for c in repo[None].parents()]: ui.note(_("update back to initial working directory parent\n")) hg.updaterepo(repo, newwd, False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/i18n/ja.po new/mercurial-3.2.3/i18n/ja.po --- old/mercurial-3.2.2/i18n/ja.po 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/i18n/ja.po 2014-12-18 21:59:22.000000000 +0100 @@ -149,8 +149,8 @@ msgstr "" "Project-Id-Version: Mercurial\n" "Report-Msgid-Bugs-To: <[email protected]>\n" -"POT-Creation-Date: 2014-11-01 17:00+0900\n" -"PO-Revision-Date: 2014-11-01 17:57+0900\n" +"POT-Creation-Date: 2014-11-29 14:13+0900\n" +"PO-Revision-Date: 2014-11-29 14:23+0900\n" "Last-Translator: Japanese translation team <[email protected]>\n" "Language-Team: Japanese\n" "Language: ja\n" @@ -12292,6 +12292,9 @@ msgid "free the working state lock (DANGEROUS)" msgstr "作業領域の排他の解放 (危険)" +msgid "[OPTION]..." +msgstr "[OPTION]..." + msgid "show or modify state of locks" msgstr "排他状況の表示又は変更" @@ -12508,9 +12511,6 @@ msgid "sort by saved mtime" msgstr "記録された mtime 情報で整列" -msgid "[OPTION]..." -msgstr "[OPTION]..." - msgid "show the contents of the current dirstate" msgstr "現時点の dirstate 内容の表示" @@ -13857,8 +13857,8 @@ msgid "[-P] [-f] [[-r] REV]" msgstr "[-P] [-f] [[-r] REV]" -msgid "merge working directory with another revision" -msgstr "作業領域の内容と他のリビジョンのマージ" +msgid "merge another revision into working directory" +msgstr "他リビジョンを作業領域にマージ" msgid "" " The current working directory is updated with all changes made in\n" @@ -19640,12 +19640,12 @@ msgid "" "``reportoldssl``\n" -" Warn if an SSL certificate is unable to be due to using Python\n" +" Warn if an SSL certificate is unable to be used due to using Python\n" " 2.5 or earlier. True or False. Default is True." msgstr "" "``reportoldssl``\n" " Python 2.5 以前の使用により、 SSL 証明書の処理ができない場合の、\n" -" 警告表示を指定する真偽値。 デフォルト値: True" +" 警告表示の有無を指定する真偽値。 デフォルト値: True" msgid "" "``report_untrusted``\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/i18n/pt_BR.po new/mercurial-3.2.3/i18n/pt_BR.po --- old/mercurial-3.2.2/i18n/pt_BR.po 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/i18n/pt_BR.po 2014-12-18 21:59:22.000000000 +0100 @@ -12497,6 +12497,9 @@ msgid "free the working state lock (DANGEROUS)" msgstr "libera o lock do working state (PERIGOSO)" +msgid "[OPTION]..." +msgstr "[OPÇÃO]..." + msgid "show or modify state of locks" msgstr "mostra ou modifica o estado dos locks" @@ -12722,9 +12725,6 @@ msgid "sort by saved mtime" msgstr "ordena por mtime armazenado" -msgid "[OPTION]..." -msgstr "[OPÇÃO]..." - msgid "show the contents of the current dirstate" msgstr "mostra o conteúdo do dirstate atual" @@ -14130,8 +14130,8 @@ msgid "[-P] [-f] [[-r] REV]" msgstr "[-P] [-f] [[-r] REV]" -msgid "merge working directory with another revision" -msgstr "mescla o diretório de trabalho com outra revisão" +msgid "merge another revision into working directory" +msgstr "mescla uma outra revisão com o diretório de trabalho" msgid "" " The current working directory is updated with all changes made in\n" @@ -20039,7 +20039,7 @@ msgid "" "``reportoldssl``\n" -" Warn if an SSL certificate is unable to be due to using Python\n" +" Warn if an SSL certificate is unable to be used due to using Python\n" " 2.5 or earlier. True or False. Default is True." msgstr "" "``reportoldssl``\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/__version__.py new/mercurial-3.2.3/mercurial/__version__.py --- old/mercurial-3.2.2/mercurial/__version__.py 2014-12-02 01:39:29.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/__version__.py 2014-12-18 21:59:38.000000000 +0100 @@ -1,2 +1,2 @@ # this file is autogenerated by setup.py -version = "3.2.2" +version = "3.2.3" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/cmdutil.py new/mercurial-3.2.3/mercurial/cmdutil.py --- old/mercurial-3.2.2/mercurial/cmdutil.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/cmdutil.py 2014-12-18 21:59:22.000000000 +0100 @@ -1745,6 +1745,9 @@ else: slowpath = False + fpats = ('_patsfollow', '_patsfollowfirst') + fnopats = (('_ancestors', '_fancestors'), + ('_descendants', '_fdescendants')) if slowpath: # See walkchangerevs() slow path. # @@ -1763,11 +1766,10 @@ matchargs.append('x:' + p) matchargs = ','.join(('%r' % p) for p in matchargs) opts['_matchfiles'] = matchargs + if follow: + opts[fnopats[0][followfirst]] = '.' else: if follow: - fpats = ('_patsfollow', '_patsfollowfirst') - fnopats = (('_ancestors', '_fancestors'), - ('_descendants', '_fdescendants')) if pats: # follow() revset interprets its file argument as a # manifest entry, so use match.files(), not pats. @@ -1793,7 +1795,7 @@ filematcher = lambda rev: match expr = [] - for op, val in opts.iteritems(): + for op, val in sorted(opts.iteritems()): if not val: continue if op not in opt2revset: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/context.py new/mercurial-3.2.3/mercurial/context.py --- old/mercurial-3.2.2/mercurial/context.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/context.py 2014-12-18 21:59:22.000000000 +0100 @@ -17,6 +17,11 @@ propertycache = util.propertycache +# Phony node value to stand-in for new files in some uses of +# manifests. Manifests support 21-byte hashes for nodes which are +# dirty in the working copy. +_newnode = '!' * 21 + class basectx(object): """A basectx object represents the common logic for its children: changectx: read-only context that is already present in the repo, @@ -128,7 +133,7 @@ if (fn not in deletedset and ((fn in withflags and mf1.flags(fn) != mf2.flags(fn)) or (mf1[fn] != mf2node and - (mf2node or self[fn].cmp(other[fn]))))): + (mf2node != _newnode or self[fn].cmp(other[fn]))))): modified.append(fn) elif listclean: clean.append(fn) @@ -1408,7 +1413,7 @@ mf = self._repo['.']._manifestmatches(match, s) modified, added, removed = s[0:3] for f in modified + added: - mf[f] = None + mf[f] = _newnode mf.setflag(f, self.flags(f)) for f in removed: if f in mf: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/encoding.py new/mercurial-3.2.3/mercurial/encoding.py --- old/mercurial-3.2.2/mercurial/encoding.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/encoding.py 2014-12-18 21:59:22.000000000 +0100 @@ -8,6 +8,28 @@ import error import unicodedata, locale, os +# These unicode characters are ignored by HFS+ (Apple Technote 1150, +# "Unicode Subtleties"), so we need to ignore them in some places for +# sanity. +_ignore = [unichr(int(x, 16)).encode("utf-8") for x in + "200c 200d 200e 200f 202a 202b 202c 202d 202e " + "206a 206b 206c 206d 206e 206f feff".split()] +# verify the next function will work +assert set([i[0] for i in _ignore]) == set(["\xe2", "\xef"]) + +def hfsignoreclean(s): + """Remove codepoints ignored by HFS+ from s. + + >>> hfsignoreclean(u'.h\u200cg'.encode('utf-8')) + '.hg' + >>> hfsignoreclean(u'.h\ufeffg'.encode('utf-8')) + '.hg' + """ + if "\xe2" in s or "\xef" in s: + for c in _ignore: + s = s.replace(c, '') + return s + def _getpreferredencoding(): ''' On darwin, getpreferredencoding ignores the locale environment and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/manifest.py new/mercurial-3.2.3/mercurial/manifest.py --- old/mercurial-3.2.2/mercurial/manifest.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/manifest.py 2014-12-18 21:59:22.000000000 +0100 @@ -17,6 +17,9 @@ flags = {} dict.__init__(self, mapping) self._flags = flags + def __setitem__(self, k, v): + assert v is not None + dict.__setitem__(self, k, v) def flags(self, f): return self._flags.get(f, "") def withflags(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/merge.py new/mercurial-3.2.3/mercurial/merge.py --- old/mercurial-3.2.2/mercurial/merge.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/merge.py 2014-12-18 21:59:22.000000000 +0100 @@ -298,8 +298,7 @@ return r def _checkunknownfile(repo, wctx, mctx, f): - return (not repo.dirstate._ignore(f) - and os.path.isfile(repo.wjoin(f)) + return (os.path.isfile(repo.wjoin(f)) and repo.wopener.audit.check(f) and repo.dirstate.normalize(f) not in repo.dirstate and mctx[f].cmp(wctx[f])) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/pathutil.py new/mercurial-3.2.3/mercurial/pathutil.py --- old/mercurial-3.2.2/mercurial/pathutil.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/pathutil.py 2014-12-18 21:59:22.000000000 +0100 @@ -1,8 +1,12 @@ import os, errno, stat +import encoding import util from i18n import _ +def _lowerclean(s): + return encoding.hfsignoreclean(s.lower()) + class pathauditor(object): '''ensure that a filesystem path contains no banned components. the following properties of a path are checked: @@ -39,11 +43,18 @@ raise util.Abort(_("path ends in directory separator: %s") % path) parts = util.splitpath(path) if (os.path.splitdrive(path)[0] - or parts[0].lower() in ('.hg', '.hg.', '') + or _lowerclean(parts[0]) in ('.hg', '.hg.', '') or os.pardir in parts): raise util.Abort(_("path contains illegal component: %s") % path) - if '.hg' in path.lower(): - lparts = [p.lower() for p in parts] + # Windows shortname aliases + for p in parts: + if "~" in p: + first, last = p.split("~", 1) + if last.isdigit() and first.upper() in ["HG", "HG8B6C"]: + raise util.Abort(_("path contains illegal component: %s") + % path) + if '.hg' in _lowerclean(path): + lparts = [_lowerclean(p.lower()) for p in parts] for p in '.hg', '.hg.': if p in lparts[1:]: pos = lparts.index(p) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/mercurial/posix.py new/mercurial-3.2.3/mercurial/posix.py --- old/mercurial-3.2.2/mercurial/posix.py 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/mercurial/posix.py 2014-12-18 21:59:22.000000000 +0100 @@ -208,6 +208,7 @@ - escape-encode invalid characters - decompose to NFD - lowercase + - omit ignored characters [200c-200f, 202a-202e, 206a-206f,feff] >>> normcase('UPPER') 'upper' @@ -265,7 +266,9 @@ u = s.decode('utf-8') # Decompose then lowercase (HFS+ technote specifies lower) - return unicodedata.normalize('NFD', u).lower().encode('utf-8') + enc = unicodedata.normalize('NFD', u).lower().encode('utf-8') + # drop HFS+ ignored characters + return encoding.hfsignoreclean(enc) if sys.platform == 'cygwin': # workaround for cygwin, in which mount point part of path is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-casefolding.t new/mercurial-3.2.3/tests/test-casefolding.t --- old/mercurial-3.2.2/tests/test-casefolding.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-casefolding.t 2014-12-18 21:59:22.000000000 +0100 @@ -195,4 +195,16 @@ $ hg qrefresh a # issue 3271, qrefresh with file handled case wrong $ hg status # empty status means the qrefresh worked +#if osx + +We assume anyone running the tests on a case-insensitive volume on OS +X will be using HFS+. If that's not true, this test will fail. + + $ rm A + >>> open(u'a\u200c'.encode('utf-8'), 'w').write('unicode is fun') + $ hg status + M A + +#endif + $ cd .. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-commit.t new/mercurial-3.2.3/tests/test-commit.t --- old/mercurial-3.2.2/tests/test-commit.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-commit.t 2014-12-18 21:59:22.000000000 +0100 @@ -457,4 +457,55 @@ 0 0 6 ..... 0 26d3ca0dfd18 000000000000 000000000000 (re) 1 6 7 ..... 1 d267bddd54f7 26d3ca0dfd18 000000000000 (re) - $ cd .. +verify pathauditor blocks evil filepaths + $ cat > evil-commit.py <<EOF + > from mercurial import ui, hg, context, node + > notrc = u".h\u200cg".encode('utf-8') + '/hgrc' + > u = ui.ui() + > r = hg.repository(u, '.') + > def filectxfn(repo, memctx, path): + > return context.memfilectx(repo, path, '[hooks]\nupdate = echo owned') + > c = context.memctx(r, [r['tip'].node(), node.nullid], + > 'evil', [notrc], filectxfn, 0) + > r.commitctx(c) + > EOF + $ $PYTHON evil-commit.py + $ hg co --clean tip + abort: path contains illegal component: .h\xe2\x80\x8cg/hgrc (esc) + [255] + + $ hg rollback -f + repository tip rolled back to revision 1 (undo commit) + $ cat > evil-commit.py <<EOF + > from mercurial import ui, hg, context, node + > notrc = "HG~1/hgrc" + > u = ui.ui() + > r = hg.repository(u, '.') + > def filectxfn(repo, memctx, path): + > return context.memfilectx(repo, path, '[hooks]\nupdate = echo owned') + > c = context.memctx(r, [r['tip'].node(), node.nullid], + > 'evil', [notrc], filectxfn, 0) + > r.commitctx(c) + > EOF + $ $PYTHON evil-commit.py + $ hg co --clean tip + abort: path contains illegal component: HG~1/hgrc + [255] + + $ hg rollback -f + repository tip rolled back to revision 1 (undo commit) + $ cat > evil-commit.py <<EOF + > from mercurial import ui, hg, context, node + > notrc = "HG8B6C~2/hgrc" + > u = ui.ui() + > r = hg.repository(u, '.') + > def filectxfn(repo, memctx, path): + > return context.memfilectx(repo, path, '[hooks]\nupdate = echo owned') + > c = context.memctx(r, [r['tip'].node(), node.nullid], + > 'evil', [notrc], filectxfn, 0) + > r.commitctx(c) + > EOF + $ $PYTHON evil-commit.py + $ hg co --clean tip + abort: path contains illegal component: HG8B6C~2/hgrc + [255] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-glog.t new/mercurial-3.2.3/tests/test-glog.t --- old/mercurial-3.2.2/tests/test-glog.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-glog.t 2014-12-18 21:59:22.000000000 +0100 @@ -1658,13 +1658,17 @@ $ testlog -f dir [] (group - (func - ('symbol', '_matchfiles') - (list + (and + (func + ('symbol', 'ancestors') + ('symbol', '.')) + (func + ('symbol', '_matchfiles') (list - ('string', 'r:') - ('string', 'd:relpath')) - ('string', 'p:dir')))) + (list + ('string', 'r:') + ('string', 'd:relpath')) + ('string', 'p:dir'))))) $ hg up -q tip Test --follow on file not in parent revision @@ -1679,13 +1683,17 @@ $ testlog -f 'glob:*' [] (group - (func - ('symbol', '_matchfiles') - (list + (and + (func + ('symbol', 'ancestors') + ('symbol', '.')) + (func + ('symbol', '_matchfiles') (list - ('string', 'r:') - ('string', 'd:relpath')) - ('string', 'p:glob:*')))) + (list + ('string', 'r:') + ('string', 'd:relpath')) + ('string', 'p:glob:*'))))) Test --follow on a single rename @@ -1852,13 +1860,17 @@ $ testlog --removed --follow a [] (group - (func - ('symbol', '_matchfiles') - (list + (and + (func + ('symbol', 'ancestors') + ('symbol', '.')) + (func + ('symbol', '_matchfiles') (list - ('string', 'r:') - ('string', 'd:relpath')) - ('string', 'p:a')))) + (list + ('string', 'r:') + ('string', 'd:relpath')) + ('string', 'p:a'))))) Test --patch and --stat with --follow and --follow-first diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-largefiles-misc.t new/mercurial-3.2.3/tests/test-largefiles-misc.t --- old/mercurial-3.2.2/tests/test-largefiles-misc.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-largefiles-misc.t 2014-12-18 21:59:22.000000000 +0100 @@ -250,6 +250,16 @@ Add a normal file to the subrepo, then test archiving $ echo 'normal file' > subrepo/normal.txt + $ mv subrepo/large.txt subrepo/renamed-large.txt + $ hg -R subrepo addremove --dry-run + removing large.txt + adding normal.txt + adding renamed-large.txt + $ hg status -S + ! subrepo/large.txt + ? subrepo/normal.txt + ? subrepo/renamed-large.txt + $ mv subrepo/renamed-large.txt subrepo/large.txt $ hg -R subrepo add subrepo/normal.txt Lock in subrepo, otherwise the change isn't archived diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-log.t new/mercurial-3.2.3/tests/test-log.t --- old/mercurial-3.2.2/tests/test-log.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-log.t 2014-12-18 21:59:22.000000000 +0100 @@ -1543,3 +1543,24 @@ $ cd .. + +hg log -f dir across branches + + $ hg init acrossbranches + $ cd acrossbranches + $ mkdir d + $ echo a > d/a && hg ci -Aqm a + $ echo b > d/a && hg ci -Aqm b + $ hg up -q 0 + $ echo b > d/a && hg ci -Aqm c + $ hg log -f d -T '{desc}' -G + @ c + | + o a + + $ hg log -f d/a -T '{desc}' -G + o b + | + o a + + $ cd .. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-rebase-scenario-global.t new/mercurial-3.2.3/tests/test-rebase-scenario-global.t --- old/mercurial-3.2.2/tests/test-rebase-scenario-global.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-rebase-scenario-global.t 2014-12-18 21:59:22.000000000 +0100 @@ -300,8 +300,12 @@ Check rebasing mutable changeset Source phase greater or equal to destination phase: new changeset get the phase of source: + $ hg id -n + 5 $ hg rebase -s9 -d0 saved backup bundle to $TESTTMP/a7/.hg/strip-backup/2b23e52411f4-backup.hg (glob) + $ hg id -n # check we updated back to parent + 5 $ hg log --template "{phase}\n" -r 9 draft $ hg rebase -s9 -d1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-3.2.2/tests/test-up-local-change.t new/mercurial-3.2.3/tests/test-up-local-change.t --- old/mercurial-3.2.2/tests/test-up-local-change.t 2014-12-02 01:39:13.000000000 +0100 +++ new/mercurial-3.2.3/tests/test-up-local-change.t 2014-12-18 21:59:22.000000000 +0100 @@ -217,6 +217,37 @@ +abc +test conflicting untracked files + + $ hg up -qC 0 + $ echo untracked > b + $ hg st + ? b + $ hg up 1 + b: untracked file differs + abort: untracked files in working directory differ from files in requested revision + [255] + $ rm b + +test conflicting untracked ignored file + + $ hg up -qC 0 + $ echo ignored > .hgignore + $ hg add .hgignore + $ hg ci -m 'add .hgignore' + created new head + $ echo ignored > ignored + $ hg add ignored + $ hg ci -m 'add ignored file' + + $ hg up -q 'desc("add .hgignore")' + $ echo untracked > ignored + $ hg st + $ hg up 'desc("add ignored file")' + ignored: untracked file differs + abort: untracked files in working directory differ from files in requested revision + [255] + test a local add $ cd .. -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
