1
1
# Copyright (C) 2005, 2006 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
# GNU General Public License for more details.
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
"""Command which looks for unsigned commits by the current user, and signs them.
20
from bzrlib.lazy_import import lazy_import
21
lazy_import(globals(), """
26
from bzrlib.bzrdir import BzrDir
20
28
from bzrlib.commands import Command
22
import bzrlib.errors as errors
24
29
from bzrlib.option import Option
36
41
# (both mainline and merged), but not other revisions that may be in the
39
takes_options = [Option('dry-run'
40
, help='Don\'t actually sign anything, just print'
41
' the revisions that would be signed')
46
help='Don\'t actually sign anything, just print'
47
' the revisions that would be signed.'),
43
49
takes_args = ['location?', 'committer?']
45
51
def run(self, location=None, committer=None, dry_run=False):
46
52
if location is None:
47
bzrdir = bzrlib.bzrdir.BzrDir.open_containing('.')[0]
53
bzrdir = BzrDir.open_containing('.')[0]
49
55
# Passed in locations should be exact
50
bzrdir = bzrlib.bzrdir.BzrDir.open(location)
56
bzrdir = BzrDir.open(location)
51
57
branch = bzrdir.open_branch()
52
58
repo = branch.repository
53
config = bzrlib.config.BranchConfig(branch)
59
branch_config = branch.get_config()
55
61
if committer is None:
56
committer = config.username()
58
gpg_strategy = bzrlib.gpg.GPGStrategy(config)
62
committer = branch_config.username()
63
gpg_strategy = gpg.GPGStrategy(branch_config)
63
for rev_id in repo.get_ancestry(branch.last_revision())[1:]:
64
if repo.has_signature_for_revision_id(rev_id):
66
rev = repo.get_revision(rev_id)
67
if rev.committer != committer:
69
# We have a revision without a signature who has a
70
# matching committer, start signing
74
repo.sign_revision(rev_id, gpg_strategy)
68
repo.start_write_group()
70
for rev_id in repo.get_ancestry(branch.last_revision())[1:]:
71
if repo.has_signature_for_revision_id(rev_id):
73
rev = repo.get_revision(rev_id)
74
if rev.committer != committer:
76
# We have a revision without a signature who has a
77
# matching committer, start signing
81
repo.sign_revision(rev_id, gpg_strategy)
83
repo.abort_write_group()
86
repo.commit_write_group()
77
89
print 'Signed %d revisions' % (count,)