From: W. Trevor King Date: Mon, 24 Nov 2008 12:31:51 +0000 (-0500) Subject: Replaced direct filesystem read from bugdir.py with RCS mediated read. X-Git-Tag: 1.0.0~118 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=d248dbca39e1e8a26a5aa9d39b28038690a406a0;p=be.git Replaced direct filesystem read from bugdir.py with RCS mediated read. Also replaced utility.FileString with StringIO() in cmdutil.py, which allowed the removal of utility.FileString and utility.get_file. The only remaining file().read() outside the RCS framework is the read in utility.editor_string(), but should probably not go through the RCS. --- diff --git a/libbe/bugdir.py b/libbe/bugdir.py index 175f518..d3b7e61 100644 --- a/libbe/bugdir.py +++ b/libbe/bugdir.py @@ -140,13 +140,16 @@ class BugDir (list): return beroot def get_version(self, path=None): + if self.rcs_name == None: + # Use a temporary RCS to check the version for the first time + RCS = rcs.rcs_by_name("None") + RCS.root(self.root) + else: + RCS = self.rcs + if path == None: path = self.get_path("version") - try: - tree_version = self.rcs.get_file_contents(path) - except AttributeError, e: - # haven't initialized rcs yet - tree_version = file(path, "rb").read().decode("utf-8") + tree_version = RCS.get_file_contents(path) return tree_version def set_version(self): @@ -234,7 +237,7 @@ that the Arch RCS backend *enforces* ids with this format.""") raise NoBugDir(self.get_path()) self.settings = self._get_settings(self.get_path("settings")) - self.rcs = rcs.rcs_by_name(self.rcs_name) # set real RCS + self.rcs = rcs.rcs_by_name(self.rcs_name) if self._user_id != None: # was a user name in the settings file self.save_user_id() diff --git a/libbe/cmdutil.py b/libbe/cmdutil.py index 55a7a72..6d7ab01 100644 --- a/libbe/cmdutil.py +++ b/libbe/cmdutil.py @@ -98,10 +98,9 @@ class CmdOptionParser(optparse.OptionParser): self._long_opt.iterkeys()]) def help_str(self): - fs = utility.FileString() - self.print_help(fs) - return fs.str - + f = StringIO() + self.print_help(f) + return f.getvalue() def underlined(instring): """Produces a version of a string that is underlined with '=' diff --git a/libbe/utility.py b/libbe/utility.py index 7c1d10a..1168580 100644 --- a/libbe/utility.py +++ b/libbe/utility.py @@ -21,55 +21,6 @@ import tempfile import shutil import doctest -class FileString(object): - """Bare-bones pseudo-file class - - >>> f = FileString("me\\nyou") - >>> len(list(f)) - 2 - >>> len(list(f)) - 0 - >>> f = FileString() - >>> f.write("hello\\nthere") - >>> "".join(list(f)) - 'hello\\nthere' - """ - def __init__(self, str=""): - object.__init__(self) - self.str = str - self._iter = None - - def __iter__(self): - if self._iter is None: - self._iter = self._get_iter() - return self._iter - - def _get_iter(self): - for line in self.str.splitlines(True): - yield line - - def write(self, line): - self.str += line - - -def get_file(f): - """ - Return a file-like object from input. This is a helper for functions that - can take either file or string parameters. - - :param f: file or string - :return: a FileString if input is a string, otherwise return the imput - object. - - >>> isinstance(get_file(file("/dev/null")), file) - True - >>> isinstance(get_file("f"), FileString) - True - """ - if isinstance(f, basestring): - return FileString(f) - else: - return f def search_parent_directories(path, filename): """ @@ -175,7 +126,7 @@ def editor_string(comment=None): os.close(fhandle) oldmtime = os.path.getmtime(fname) os.system("%s %s" % (editor, fname)) - output = trimmed_string(file(fname, "rb").read()) + output = trimmed_string(file(fname, "rb").read().decode("utf-8")) if output.rstrip('\n') == "": output = None finally: