From patchwork Sun Jan 11 01:20:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,6,RFC] localrepo: remove opener as an alias for localrepo.vfs From: Angel Ezquerra X-Patchwork-Id: 7429 Message-Id: <821f6400243e795c7feb.1420939251@Angels-MacBook-Pro.local> To: mercurial-devel@selenic.com Date: Sun, 11 Jan 2015 02:20:51 +0100 # HG changeset patch # User Angel Ezquerra # Date 1420927530 -3600 # Sat Jan 10 23:05:30 2015 +0100 # Node ID 821f6400243e795c7feb3dfa876ca4f957fca78e # Parent 459444107fc272ee7ca15cc9ac72602d60ed364f localrepo: remove opener as an alias for localrepo.vfs This change touches every module in which repository.opener was being used instead of repository.vfs. This is meant to make it easier to split the repository.vfs into several separate vfs. I ran the test suite on OSX and there are no failures related to this patch, but there are a few skipped tests that I could not test: Skipped test-convert-svn-source.t: skipped Skipped test-convert-svn-move.t: skipped Skipped test-convert-svn-encoding.t: skipped Skipped test-convert-svn-branches.t: skipped Skipped test-convert-hg-svn.t: skipped Skipped test-convert-p4-filetypes.t: skipped Skipped test-convert-svn-startrev.t: skipped Skipped test-https.t: skipped Skipped test-convert-mtn.t: skipped Skipped test-convert-svn-tags.t: skipped Skipped test-convert-cvs.t: skipped Skipped test-convert-bzr.t: missing feature: Canonical's Bazaar client Skipped test-convert-baz.t: skipped Skipped test-convert-cvs-detectmerge.t: skipped Skipped test-convert-cvs-synthetic.t: skipped Skipped test-convert-bzr-directories.t: missing feature: Canonical's Bazaar client Skipped test-convert-cvsnt-mergepoints.t: skipped Skipped test-convert-p4.t: skipped Skipped test-convert-tla.t: skipped Skipped test-convert-cvs-branch.t: skipped Skipped test-convert-darcs.t: skipped Skipped test-convert-bzr-merges.t: missing feature: Canonical's Bazaar client Skipped test-casecollision.t: skipped Skipped test-i18n.t: skipped Skipped test-no-symlinks.t: skipped Skipped test-gpg.t: skipped Skipped test-convert-bzr-ghosts.t: missing feature: Canonical's Bazaar client Skipped test-convert-bzr-114.t: skipped Skipped test-convert-bzr-treeroot.t: missing feature: Canonical's Bazaar client Given the number of changes in this patch (even though they are trivial), the whole test suite should be run before accepting this patch. diff --git a/hgext/blackbox.py b/hgext/blackbox.py --- a/hgext/blackbox.py +++ b/hgext/blackbox.py @@ -112,7 +112,7 @@ lastblackbox = blackbox def setrepo(self, repo): - self._bbopener = repo.opener + self._bbopener = repo.vfs ui.__class__ = blackboxui @@ -141,7 +141,7 @@ return limit = opts.get('limit') - blackbox = repo.opener('blackbox.log', 'r') + blackbox = repo.vfs('blackbox.log', 'r') lines = blackbox.read().split('\n') count = 0 diff --git a/hgext/eol.py b/hgext/eol.py --- a/hgext/eol.py +++ b/hgext/eol.py @@ -319,7 +319,7 @@ # longer match a file it matched before self.dirstate.normallookup(f) # Create or touch the cache to update mtime - self.opener("eol.cache", "w").close() + self.vfs("eol.cache", "w").close() wlock.release() except error.LockUnavailable: # If we cannot lock the repository and clear the diff --git a/hgext/gpg.py b/hgext/gpg.py --- a/hgext/gpg.py +++ b/hgext/gpg.py @@ -103,7 +103,7 @@ try: # read local signatures fn = "localsigs" - for item in parsefile(repo.opener(fn), fn): + for item in parsefile(repo.vfs(fn), fn): yield item except IOError: pass @@ -250,7 +250,7 @@ # write it if opts['local']: - repo.opener.append("localsigs", sigmessage) + repo.vfs.append("localsigs", sigmessage) return if not opts["force"]: diff --git a/hgext/keyword.py b/hgext/keyword.py --- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -411,7 +411,7 @@ if args: # simulate hgrc parsing rcmaps = ['[keywordmaps]\n'] + [a + '\n' for a in args] - fp = repo.opener('hgrc', 'w') + fp = repo.vfs('hgrc', 'w') fp.writelines(rcmaps) fp.close() ui.readconfig(repo.join('hgrc')) diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -3215,7 +3215,7 @@ def _noqueues(): try: - fh = repo.opener(_allqueues, 'r') + fh = repo.vfs(_allqueues, 'r') fh.close() except IOError: return True @@ -3226,7 +3226,7 @@ current = _getcurrent() try: - fh = repo.opener(_allqueues, 'r') + fh = repo.vfs(_allqueues, 'r') queues = [queue.strip() for queue in fh if queue.strip()] fh.close() if current not in queues: @@ -3243,13 +3243,13 @@ _setactivenocheck(name) def _setactivenocheck(name): - fh = repo.opener(_activequeue, 'w') + fh = repo.vfs(_activequeue, 'w') if name != 'patches': fh.write(name) fh.close() def _addqueue(name): - fh = repo.opener(_allqueues, 'a') + fh = repo.vfs(_allqueues, 'a') fh.write('%s\n' % (name,)) fh.close() @@ -3274,7 +3274,7 @@ if name == current: raise util.Abort(_('cannot delete currently active queue')) - fh = repo.opener('patches.queues.new', 'w') + fh = repo.vfs('patches.queues.new', 'w') for queue in existing: if queue == name: continue @@ -3322,7 +3322,7 @@ raise util.Abort(_('non-queue directory "%s" already exists') % newdir) - fh = repo.opener('patches.queues.new', 'w') + fh = repo.vfs('patches.queues.new', 'w') for queue in existing: if queue == current: fh.write('%s\n' % (name,)) diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py --- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -234,7 +234,7 @@ 'patch series.\n\n')) body = ui.edit(defaultbody, sender) # Save series description in case sendmail fails - msgfile = repo.opener('last-email.txt', 'wb') + msgfile = repo.vfs('last-email.txt', 'wb') msgfile.write(body) msgfile.close() return body diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -754,7 +754,7 @@ def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches, external, activebookmark): 'Store the current status to allow recovery' - f = repo.opener("rebasestate", "w") + f = repo.vfs("rebasestate", "w") f.write(repo[originalwd].hex() + '\n') f.write(repo[target].hex() + '\n') f.write(repo[external].hex() + '\n') @@ -789,7 +789,7 @@ external = nullrev activebookmark = None state = {} - f = repo.opener("rebasestate") + f = repo.vfs("rebasestate") for i, l in enumerate(f.read().splitlines()): if i == 0: originalwd = repo[l].rev() diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -95,7 +95,7 @@ @classmethod def load(cls, repo): - fp = repo.opener(cls._filename) + fp = repo.vfs(cls._filename) try: version = int(fp.readline().strip()) @@ -121,7 +121,7 @@ @classmethod def save(cls, repo, name, originalwctx, pendingctx, stripnodes): - fp = repo.opener(cls._filename, 'wb') + fp = repo.vfs(cls._filename, 'wb') fp.write('%i\n' % cls._version) fp.write('%s\n' % name) fp.write('%s\n' % hex(originalwctx.node())) diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -115,7 +115,7 @@ ''' mark = None try: - file = repo.opener('bookmarks.current') + file = repo.vfs('bookmarks.current') except IOError, inst: if inst.errno != errno.ENOENT: raise @@ -144,7 +144,7 @@ wlock = repo.wlock() try: - file = repo.opener('bookmarks.current', 'w', atomictemp=True) + file = repo.vfs('bookmarks.current', 'w', atomictemp=True) file.write(encoding.fromlocal(mark)) file.close() finally: diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -21,7 +21,7 @@ def read(repo): try: - f = repo.opener(_filename(repo)) + f = repo.vfs(_filename(repo)) lines = f.read().split('\n') f.close() except (IOError, OSError): @@ -203,7 +203,7 @@ def write(self, repo): try: - f = repo.opener(_filename(repo), "w", atomictemp=True) + f = repo.vfs(_filename(repo), "w", atomictemp=True) cachekey = [hex(self.tipnode), str(self.tiprev)] if self.filteredhash is not None: cachekey.append(hex(self.filteredhash)) diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1803,7 +1803,7 @@ tr.close() if tags: - repo.opener.write("localtags", "".join(tags)) + repo.vfs.write("localtags", "".join(tags)) finally: ui.progress(_('building'), None) release(tr, lock) @@ -3382,7 +3382,7 @@ raise util.Abort(_("can't specify --continue and revisions")) # read in unfinished revisions try: - nodes = repo.opener.read('graftstate').splitlines() + nodes = repo.vfs.read('graftstate').splitlines() revs = [repo[node].rev() for node in nodes] except IOError, inst: if inst.errno != errno.ENOENT: @@ -3511,7 +3511,7 @@ if stats and stats[3] > 0: # write out state for --continue nodelines = [repo[rev].hex() + "\n" for rev in revs[pos:]] - repo.opener.write('graftstate', ''.join(nodelines)) + repo.vfs.write('graftstate', ''.join(nodelines)) raise util.Abort( _("unresolved conflicts, can't continue"), hint=_('use hg resolve and hg graft --continue')) diff --git a/mercurial/hbisect.py b/mercurial/hbisect.py --- a/mercurial/hbisect.py +++ b/mercurial/hbisect.py @@ -136,7 +136,7 @@ def load_state(repo): state = {'current': [], 'good': [], 'bad': [], 'skip': []} if os.path.exists(repo.join("bisect.state")): - for l in repo.opener("bisect.state"): + for l in repo.vfs("bisect.state"): kind, node = l[:-1].split() node = repo.lookup(node) if kind not in state: @@ -146,7 +146,7 @@ def save_state(repo, state): - f = repo.opener("bisect.state", "w", atomictemp=True) + f = repo.vfs("bisect.state", "w", atomictemp=True) wlock = repo.wlock() try: for kind in sorted(state): diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -193,7 +193,7 @@ requirements = '' try: - requirements = srcrepo.opener.read('requires') + requirements = srcrepo.vfs.read('requires') except IOError, inst: if inst.errno != errno.ENOENT: raise @@ -206,7 +206,7 @@ default = srcrepo.ui.config('paths', 'default') if default: - fp = r.opener("hgrc", "w", text=True) + fp = r.vfs("hgrc", "w", text=True) fp.write("[paths]\n") fp.write("default = %s\n" % default) fp.close() @@ -226,7 +226,7 @@ _update(r, uprev) if bookmarks: - r.opener('bookmarks.shared', 'w').close() + r.vfs('bookmarks.shared', 'w').close() def copystore(ui, srcrepo, destpath): '''copy files from store of srcrepo in destpath @@ -441,7 +441,7 @@ destrepo = destpeer.local() if destrepo: template = uimod.samplehgrcs['cloned'] - fp = destrepo.opener("hgrc", "w", text=True) + fp = destrepo.vfs("hgrc", "w", text=True) u = util.url(abspath) u.passwd = None defaulturl = str(u) diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -196,7 +196,6 @@ self.origroot = path self.auditor = pathutil.pathauditor(self.root, self._checknested) self.vfs = scmutil.vfs(self.path) - self.opener = self.vfs self.baseui = baseui self.ui = baseui.copy() self.ui.copy = baseui.copy # prevent copying repo configuration diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -138,7 +138,7 @@ """ records = [] try: - f = self._repo.opener(self.statepathv1) + f = self._repo.vfs(self.statepathv1) for i, l in enumerate(f): if i == 0: records.append(('L', l[:-1])) @@ -157,7 +157,7 @@ """ records = [] try: - f = self._repo.opener(self.statepathv2) + f = self._repo.vfs(self.statepathv2) data = f.read() off = 0 end = len(data) @@ -184,8 +184,8 @@ # Check local variables before looking at filesystem for performance # reasons. return bool(self._local) or bool(self._state) or \ - self._repo.opener.exists(self.statepathv1) or \ - self._repo.opener.exists(self.statepathv2) + self._repo.vfs.exists(self.statepathv1) or \ + self._repo.vfs.exists(self.statepathv2) def commit(self): """Write current state on disk (if necessary)""" @@ -205,7 +205,7 @@ def _writerecordsv1(self, records): """Write current state on disk in a version 1 file""" - f = self._repo.opener(self.statepathv1, 'w') + f = self._repo.vfs(self.statepathv1, 'w') irecords = iter(records) lrecords = irecords.next() assert lrecords[0] == 'L' @@ -217,7 +217,7 @@ def _writerecordsv2(self, records): """Write current state on disk in a version 2 file""" - f = self._repo.opener(self.statepathv2, 'w') + f = self._repo.vfs(self.statepathv2, 'w') for key, data in records: assert len(key) == 1 format = '>sI%is' % len(data) @@ -234,7 +234,7 @@ note: also write the local version to the `.hg/merge` directory. """ hash = util.sha1(fcl.path()).hexdigest() - self._repo.opener.write('merge/' + hash, fcl.data()) + self._repo.vfs.write('merge/' + hash, fcl.data()) self._state[fd] = ['u', hash, fcl.path(), fca.path(), hex(fca.filenode()), fco.path(), hex(fco.filenode()), @@ -284,7 +284,7 @@ elif flags == fla: flags = flo # restore local - f = self._repo.opener('merge/' + hash) + f = self._repo.vfs('merge/' + hash) self._repo.wwrite(dfile, f.read(), flags) f.close() r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca, diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -102,14 +102,13 @@ self.path, authinfo = u.authinfo() opener = build_opener(ui, authinfo) - self.opener = opener(self.path) - self.vfs = self.opener + self.vfs = opener(self.path) self._phasedefaults = [] self.names = namespaces.namespaces() try: - requirements = scmutil.readrequires(self.opener, self.supported) + requirements = scmutil.readrequires(self.vfs, self.supported) except IOError, inst: if inst.errno != errno.ENOENT: raise @@ -117,7 +116,7 @@ # check if it is a non-empty old-style repository try: - fp = self.opener("00changelog.i") + fp = self.vfs("00changelog.i") fp.read(1) fp.close() except IOError, inst: diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -614,7 +614,7 @@ if defpath != defpushpath: addpathconfig('default-push', defpushpath) - fp = self._repo.opener("hgrc", "w", text=True) + fp = self._repo.vfs("hgrc", "w", text=True) try: fp.write(''.join(lines)) finally: diff --git a/mercurial/tags.py b/mercurial/tags.py --- a/mercurial/tags.py +++ b/mercurial/tags.py @@ -62,7 +62,7 @@ def readlocaltags(ui, repo, alltags, tagtypes): '''Read local tags in repo. Update alltags and tagtypes.''' try: - data = repo.opener.read("localtags") + data = repo.vfs.read("localtags") except IOError, inst: if inst.errno != errno.ENOENT: raise @@ -193,7 +193,7 @@ set, caller is responsible for reading tag info from each head.''' try: - cachefile = repo.opener('cache/tags', 'r') + cachefile = repo.vfs('cache/tags', 'r') # force reading the file for static-http cachelines = iter(cachefile) except IOError: @@ -303,7 +303,7 @@ def _writetagcache(ui, repo, heads, tagfnode, cachetags): try: - cachefile = repo.opener('cache/tags', 'w', atomictemp=True) + cachefile = repo.vfs('cache/tags', 'w', atomictemp=True) except (OSError, IOError): return