e54eed5ae04c4330cf9c95872d5b66980bed2d0c
[update-copyright.git] / update_copyright / vcs / bazaar.py
1 # Copyright
2
3 import StringIO as _StringIO
4
5 import bzrlib as _bzrlib
6 import bzrlib.builtins as _bzrlib_builtins
7 import bzrlib.log as _bzrlib_log
8
9 from . import VCSBackend as _VCSBackend
10
11
12 class _LogFormatter (_bzrlib_log.LogFormatter):
13     supports_merge_revisions = True
14     preferred_levels = 0
15     supports_deta = False
16     supports_tags = False
17     supports_diff = False
18
19     def log_revision(self, revision):
20         raise NotImplementedError
21
22
23 class _YearLogFormatter (_LogFormatter):
24     def log_revision(self, revision):
25         self.to_file.write(
26             time.strftime('%Y', time.gmtime(revision.rev.timestamp))
27             +'\n')
28
29
30 class _AuthorLogFormatter (_LogFormatter):
31     def log_revision(self, revision):
32         authors = revision.rev.get_apparent_authors()
33         self.to_file.write('\n'.join(authors)+'\n')
34
35
36 class BazaarBackend (_VCSBackend):
37     name = 'Bazaar'
38
39     def __init__(self, **kwargs):
40         super(BazaarBackend, self).__init__(**kwargs)
41         self._version = _bzrlib.__version__
42
43     def _years(self, filename=None):
44         cmd = _bzrlib_builtins.cmd_log()
45         cmd.outf = _StringIO.StringIO()
46         kwargs = {'log_format':_YearLogFormatter, 'levels':0}
47         if filename is not None:
48             kwargs['file_list'] = [filename]
49         cmd.run(**kwargs)
50         years = set(int(year) for year in cmd.outf.getvalue().splitlines())
51         return years
52
53     def _authors(self, filename=None):
54         cmd = _bzrlib_builtins.cmd_log()
55         cmd.outf = _StringIO.StringIO()
56         kwargs = {'log_format':_AuthorLogFormatter, 'levels':0}
57         if filename is not None:
58             kwargs['file_list'] = [filename]
59         cmd.run(**kwargs)
60         authors = set(cmd.outf.getvalue().splitlines())
61         return authors
62
63     def is_versioned(self, filename):
64         cmd = _bzrlib_builtins.cmd_log()
65         cmd.outf = StringIO.StringIO()
66         cmd.run(file_list=[filename])
67         return True