1 """Utility class and function to get information about the CVS repository
2 based on checked-out files.
8 def get_repository_list(paths):
11 if os.path.isfile(name):
12 dir = os.path.dirname(name)
15 rootfile = os.path.join(name, "CVS", "Root")
16 root = open(rootfile).readline().strip()
17 if not d.has_key(root):
18 d[root] = RepositoryInfo(dir), [name]
20 d[root][1].append(name)
25 """Record holding information about the repository we want to talk to."""
29 # type is '', ':ext', or ':pserver:'
32 def __init__(self, dir=None):
35 dir = os.path.join(dir, "CVS")
36 root = open(os.path.join(dir, "Root")).readline().strip()
37 if root.startswith(":pserver:"):
38 self.type = ":pserver:"
39 root = root[len(":pserver:"):]
41 if root.startswith(":ext:"):
42 root = root[len(":ext:"):]
44 self.repository = root
46 host, path = root.split(":", 1)
47 self.cvsroot_path = path
49 self.cvsroot_path = root
50 fn = os.path.join(dir, "Tag")
51 if os.path.isfile(fn):
52 self.branch = open(fn).readline().strip()[1:]
54 def get_cvsroot(self):
55 return self.type + self.repository
57 _repository_dir_cache = {}
59 def get_repository_file(self, path):
60 filename = os.path.abspath(path)
61 if os.path.isdir(path):
65 dir = os.path.dirname(path)
68 repodir = self._repository_dir_cache[dir]
70 repofn = os.path.join(dir, "CVS", "Repository")
71 repodir = open(repofn).readline().strip()
72 repodir = os.path.join(self.cvsroot_path, repodir)
73 self._repository_dir_cache[dir] = repodir
75 fn = os.path.join(repodir, os.path.basename(path))
78 return fn[len(self.cvsroot_path)+1:]
81 return "<RepositoryInfo for %s>" % `self.get_cvsroot()`