1
# Copyright (C) 2006, 2007, 2009, 2010 Canonical Ltd
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
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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
28
20
from bzrlib.commands import Command
22
import bzrlib.errors as errors
29
24
from bzrlib.option import Option
32
27
class cmd_sign_my_commits(Command):
33
__doc__ = """Sign all commits by a given committer.
28
"""Sign all commits by a given committer.
35
30
If location is not specified the local tree is used.
36
31
If committer is not specified the default committer is used.
41
36
# (both mainline and merged), but not other revisions that may be in the
46
help='Don\'t actually sign anything, just print'
47
' the revisions that would be signed.'),
39
takes_options = [Option('dry-run'
40
, help='Don\'t actually sign anything, just print'
41
' the revisions that would be signed')
49
43
takes_args = ['location?', 'committer?']
51
45
def run(self, location=None, committer=None, dry_run=False):
52
46
if location is None:
53
bzrdir = BzrDir.open_containing('.')[0]
47
bzrdir = bzrlib.bzrdir.BzrDir.open_containing('.')[0]
55
49
# Passed in locations should be exact
56
bzrdir = BzrDir.open(location)
50
bzrdir = bzrlib.bzrdir.BzrDir.open(location)
57
51
branch = bzrdir.open_branch()
58
52
repo = branch.repository
59
branch_config = branch.get_config()
53
config = bzrlib.config.BranchConfig(branch)
61
55
if committer is None:
62
committer = branch_config.username()
63
gpg_strategy = gpg.GPGStrategy(branch_config)
56
committer = config.username()
58
gpg_strategy = bzrlib.gpg.GPGStrategy(config)
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()
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)
89
77
print 'Signed %d revisions' % (count,)