~exarkun/pyopenssl/trunk

« back to all changes in this revision

Viewing changes to doc/tools/cvsinfo.py

  • Committer: Jean-Paul Calderone
  • Date: 2011-09-11 19:49:43 UTC
  • mfrom: (156.3.22 sphinx-doc)
  • Revision ID: exarkun@divmod.com-20110911194943-ucaan2tzidk7ek5l
Convert the documentation from LaTeX/epytext to Sphinx/ReST

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
"""Utility class and function to get information about the CVS repository
2
 
based on checked-out files.
3
 
"""
4
 
 
5
 
import os
6
 
 
7
 
 
8
 
def get_repository_list(paths):
9
 
    d = {}
10
 
    for name in paths:
11
 
        if os.path.isfile(name):
12
 
            dir = os.path.dirname(name)
13
 
        else:
14
 
            dir = 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]
19
 
        else:
20
 
            d[root][1].append(name)
21
 
    return d.values()
22
 
 
23
 
 
24
 
class RepositoryInfo:
25
 
    """Record holding information about the repository we want to talk to."""
26
 
    cvsroot_path = None
27
 
    branch = None
28
 
 
29
 
    # type is '', ':ext', or ':pserver:'
30
 
    type = ""
31
 
 
32
 
    def __init__(self, dir=None):
33
 
        if dir is None:
34
 
            dir = os.getcwd()
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:"):]
40
 
        elif ":" in root:
41
 
            if root.startswith(":ext:"):
42
 
                root = root[len(":ext:"):]
43
 
            self.type = ":ext:"
44
 
        self.repository = root
45
 
        if ":" in root:
46
 
            host, path = root.split(":", 1)
47
 
            self.cvsroot_path = path
48
 
        else:
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:]
53
 
 
54
 
    def get_cvsroot(self):
55
 
        return self.type + self.repository
56
 
 
57
 
    _repository_dir_cache = {}
58
 
 
59
 
    def get_repository_file(self, path):
60
 
        filename = os.path.abspath(path)
61
 
        if os.path.isdir(path):
62
 
            dir = path
63
 
            join = 0
64
 
        else:
65
 
            dir = os.path.dirname(path)
66
 
            join = 1
67
 
        try:
68
 
            repodir = self._repository_dir_cache[dir]
69
 
        except KeyError:
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
74
 
        if join:
75
 
            fn = os.path.join(repodir, os.path.basename(path))
76
 
        else:
77
 
            fn = repodir
78
 
        return fn[len(self.cvsroot_path)+1:]
79
 
 
80
 
    def __repr__(self):
81
 
        return "<RepositoryInfo for %s>" % `self.get_cvsroot()`