X-Git-Url: https://projects.mako.cc/source/mw/blobdiff_plain/b30dcd7f4a701370778956d4e1b60947a853f639..d49bb0b4917d905651356996988e7f82ead50101:/src/mw/metadir.py diff --git a/src/mw/metadir.py b/src/mw/metadir.py index 05dcdb8..0549c83 100644 --- a/src/mw/metadir.py +++ b/src/mw/metadir.py @@ -1,6 +1,6 @@ ### # mw - VCS-like nonsense for MediaWiki websites -# Copyright (C) 2010 Ian Weller +# Copyright (C) 2011 Ian Weller and others # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ import bzrlib.diff import codecs import ConfigParser import json -import mw.api import os from StringIO import StringIO import sys @@ -62,7 +61,7 @@ class Metadir(object): os.mkdir(self.location, 0755) # metadir versioning fd = file(os.path.join(self.location, 'version'), 'w') - fd.write('1') # XXX THIS API VERSION NOT LOCKED IN YET + fd.write('1') # XXX THIS API VERSION NOT LOCKED IN YET fd.close() # create config self.config = ConfigParser.RawConfigParser() @@ -79,7 +78,7 @@ class Metadir(object): os.mkdir(os.path.join(self.location, 'cache', 'pages'), 0755) def clean_page(self, pagename): - filename = mw.api.pagename_to_filename(pagename) + '.wiki' + filename = pagename_to_filename(pagename) + '.wiki' cur_content = codecs.open(filename, 'r', 'utf-8').read() if len(cur_content) != 0 and cur_content[-1] == '\n': cur_content = cur_content[:-1] @@ -128,19 +127,25 @@ class Metadir(object): def pages_get_rv_list(self, pageid): pagefile = os.path.join(self.location, 'cache', 'pages', str(pageid['id'])) - fd = file(pagefile, 'r') - pagedata = json.loads(fd.read()) - rvs = [int(x) for x in pagedata.keys()] - rvs.sort() - return rvs + if os.path.exists(pagefile): + fd = file(pagefile, 'r') + pagedata = json.loads(fd.read()) + rvs = [int(x) for x in pagedata.keys()] + rvs.sort() + return rvs + else: + return [None,] def pages_get_rv(self, pageid, rvid): pagefile = os.path.join(self.location, 'cache', 'pages', str(pageid['id'])) - fd = file(pagefile, 'r') - pagedata = json.loads(fd.read()) - return pagedata[str(rvid)] - + if os.path.exists(pagefile): + fd = file(pagefile, 'r') + pagedata = json.loads(fd.read()) + return pagedata[str(rvid)] + else: + return None + def working_dir_status(self, files=None): status = {} check = [] @@ -157,7 +162,7 @@ class Metadir(object): for full in check: name = os.path.split(full)[1] if name[-5:] == '.wiki': - pagename = mw.api.filename_to_pagename(name[:-5]) + pagename = filename_to_pagename(name[:-5]) pageid = self.get_pageid_from_pagename(pagename) if not pageid: status[os.path.relpath(full, self.root)] = '?' @@ -168,13 +173,15 @@ class Metadir(object): if (len(cur_content) != 0) and (cur_content[-1] == '\n'): cur_content = cur_content[:-1] if cur_content != rv['content']: - status[os.path.relpath(full, self.root)] = 'U' + status[os.path.relpath(full, self.root)] = 'M' # modified + else: + status[os.path.relpath(full, self.root)] = 'C' # clean return status def diff_rv_to_working(self, pagename, oldrvid=0, newrvid=0): # oldrvid=0 means latest fetched revision # newrvid=0 means working copy - filename = mw.api.pagename_to_filename(pagename) + '.wiki' + filename = pagename_to_filename(pagename) + '.wiki' filename = filename.decode('utf-8') pageid = self.get_pageid_from_pagename(pagename) if not pageid: @@ -203,3 +210,15 @@ class Metadir(object): if diff[-1] == '\n': diff = diff[:-1] return diff + + +def pagename_to_filename(name): + name = name.replace(' ', '_') + name = name.replace('/', '!') + return name + + +def filename_to_pagename(name): + name = name.replace('!', '/') + name = name.replace('_', ' ') + return name