diff options
Diffstat (limited to 'cvs2svn_lib/cvs_file.py')
-rw-r--r-- | cvs2svn_lib/cvs_file.py | 287 |
1 files changed, 0 insertions, 287 deletions
diff --git a/cvs2svn_lib/cvs_file.py b/cvs2svn_lib/cvs_file.py deleted file mode 100644 index 3a1bb4f..0000000 --- a/cvs2svn_lib/cvs_file.py +++ /dev/null @@ -1,287 +0,0 @@ -# (Be in -*- python -*- mode.) -# -# ==================================================================== -# Copyright (c) 2000-2008 CollabNet. All rights reserved. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at http://subversion.tigris.org/license-1.html. -# If newer versions of this license are posted there, you may use a -# newer version instead, at your option. -# -# This software consists of voluntary contributions made by many -# individuals. For exact contribution history, see the revision -# history and logs, available at http://cvs2svn.tigris.org/. -# ==================================================================== - -"""This module contains a class to store information about a CVS file.""" - -import os - -from cvs2svn_lib.common import path_join -from cvs2svn_lib.context import Ctx - - -class CVSPath(object): - """Represent a CVS file or directory. - - Members: - - id -- (int) unique ID for this CVSPath. At any moment, there is - at most one CVSPath instance with a particular ID. (This - means that object identity is the same as object equality, and - objects can be used as map keys even though they don't have a - __hash__() method). - - project -- (Project) the project containing this CVSPath. - - parent_directory -- (CVSDirectory or None) the CVSDirectory - containing this CVSPath. - - basename -- (string) the base name of this CVSPath (no ',v'). The - basename of the root directory of a project is ''. - - ordinal -- (int) the order that this instance should be sorted - relative to other CVSPath instances. This member is set based - on the ordering imposed by slow_compare() by CollectData after - all CVSFiles have been processed. Comparisons of CVSPath - using __cmp__() simply compare the ordinals. - - """ - - __slots__ = [ - 'id', - 'project', - 'parent_directory', - 'basename', - 'ordinal', - ] - - def __init__(self, id, project, parent_directory, basename): - self.id = id - self.project = project - self.parent_directory = parent_directory - self.basename = basename - - def __getstate__(self): - """This method must only be called after ordinal has been set.""" - - return ( - self.id, self.project.id, - self.parent_directory, self.basename, - self.ordinal, - ) - - def __setstate__(self, state): - ( - self.id, project_id, - self.parent_directory, self.basename, - self.ordinal, - ) = state - self.project = Ctx()._projects[project_id] - - def get_ancestry(self): - """Return a list of the CVSPaths leading from the root path to SELF. - - Return the CVSPaths in a list, starting with - self.project.get_root_cvs_directory() and ending with self.""" - - ancestry = [] - p = self - while p is not None: - ancestry.append(p) - p = p.parent_directory - - ancestry.reverse() - return ancestry - - def get_cvs_path(self): - """Return the canonical path within the Project. - - The canonical path: - - - Uses forward slashes - - - Doesn't include ',v' for files - - - This doesn't include the 'Attic' segment of the path unless the - file is to be left in an Attic directory in the SVN repository; - i.e., if a filename exists in and out of Attic and the - --retain-conflicting-attic-files option was specified. - - """ - - return path_join(*[p.basename for p in self.get_ancestry()[1:]]) - - cvs_path = property(get_cvs_path) - - def _get_dir_components(self): - """Return a list containing the components of the path leading to SELF. - - The return value contains the base names of all of the parent - directories (except for the root directory) and SELF.""" - - return [p.basename for p in self.get_ancestry()[1:]] - - def __eq__(a, b): - """Compare two CVSPath instances for equality. - - This method is supplied to avoid using __cmp__() for comparing for - equality.""" - - return a is b - - def slow_compare(a, b): - return ( - # Sort first by project: - cmp(a.project, b.project) - # Then by directory components: - or cmp(a._get_dir_components(), b._get_dir_components()) - ) - - def __cmp__(a, b): - """This method must only be called after ordinal has been set.""" - - return cmp(a.ordinal, b.ordinal) - - -class CVSDirectory(CVSPath): - """Represent a CVS directory. - - Members: - - id -- (int or None) unique id for this file. If None, a new id is - generated. - - project -- (Project) the project containing this file. - - parent_directory -- (CVSDirectory or None) the CVSDirectory - containing this CVSDirectory. - - basename -- (string) the base name of this CVSDirectory (no ',v'). - - """ - - __slots__ = [] - - def __init__(self, id, project, parent_directory, basename): - """Initialize a new CVSDirectory object.""" - - CVSPath.__init__(self, id, project, parent_directory, basename) - - def get_filename(self): - """Return the filesystem path to this CVSPath in the CVS repository.""" - - if self.parent_directory is None: - return self.project.project_cvs_repos_path - else: - return os.path.join( - self.parent_directory.get_filename(), self.basename - ) - - filename = property(get_filename) - - def __getstate__(self): - return CVSPath.__getstate__(self) - - def __setstate__(self, state): - CVSPath.__setstate__(self, state) - - def __str__(self): - """For convenience only. The format is subject to change at any time.""" - - return self.cvs_path + '/' - - def __repr__(self): - return 'CVSDirectory<%x>(%r)' % (self.id, str(self),) - - -class CVSFile(CVSPath): - """Represent a CVS file. - - Members: - - id -- (int) unique id for this file. - - project -- (Project) the project containing this file. - - parent_directory -- (CVSDirectory) the CVSDirectory containing - this CVSFile. - - basename -- (string) the base name of this CVSFile (no ',v'). - - _in_attic -- (bool) True if RCS file is in an Attic subdirectory - that is not considered the parent directory. (If a file is - in-and-out-of-attic and one copy is to be left in Attic after - the conversion, then the Attic directory is that file's - PARENT_DIRECTORY and _IN_ATTIC is False.) - - executable -- (bool) True iff RCS file has executable bit set. - - file_size -- (long) size of the RCS file in bytes. - - mode -- (string or None) 'kkv', 'kb', etc. - - PARENT_DIRECTORY might contain an 'Attic' component if it should be - retained in the SVN repository; i.e., if the same filename exists out - of Attic and the --retain-conflicting-attic-files option was specified. - - """ - - __slots__ = [ - '_in_attic', - 'executable', - 'file_size', - 'mode', - ] - - def __init__( - self, id, project, parent_directory, basename, in_attic, - executable, file_size, mode - ): - """Initialize a new CVSFile object.""" - - CVSPath.__init__(self, id, project, parent_directory, basename) - self._in_attic = in_attic - self.executable = executable - self.file_size = file_size - self.mode = mode - - assert self.parent_directory is not None - - def get_filename(self): - """Return the filesystem path to this CVSPath in the CVS repository.""" - - if self._in_attic: - return os.path.join( - self.parent_directory.filename, 'Attic', self.basename + ',v' - ) - else: - return os.path.join( - self.parent_directory.filename, self.basename + ',v' - ) - - filename = property(get_filename) - - def __getstate__(self): - return ( - CVSPath.__getstate__(self), - self._in_attic, self.executable, self.file_size, self.mode, - ) - - def __setstate__(self, state): - ( - cvs_path_state, - self._in_attic, self.executable, self.file_size, self.mode, - ) = state - CVSPath.__setstate__(self, cvs_path_state) - - def __str__(self): - """For convenience only. The format is subject to change at any time.""" - - return self.cvs_path - - def __repr__(self): - return 'CVSFile<%x>(%r)' % (self.id, str(self),) - - |