~abentley/bzrtools/bzrtools.dev

124 by Aaron Bentley
Added docstring for bzrtools
1
"""\
2
Various useful plugins for working with bzr.
3
"""
93 by Aaron Bentley
Used the bzr 0.5+ plugin stuff
4
import bzrlib.commands
5
import push
6
import annotate
7
import shelf
119 by aaron.bentley at utoronto
Added conflict-awareness tools
8
import conflicts
132 by Aaron Bentley
brute-forced bzrtools path into sys.path so baz-import works
9
import sys
10
import os.path
11
sys.path.append(os.path.dirname(__file__))
118 by aaron.bentley at utoronto
Added clean-tree command
12
13
bzrlib.commands.OPTIONS['ignored'] = None
14
15
class cmd_clean_tree(bzrlib.commands.Command):
16
    """Remove unwanted files from working tree.
17
    Normally, ignored files are left alone.  The --ignored flag will cause them
18
    to be deleted as well.
19
    """
20
    takes_options = ['ignored']
21
    def run(self, ignored=False):
22
        import clean_tree
23
        clean_tree.clean_tree(ignored=ignored)
24
119 by aaron.bentley at utoronto
Added conflict-awareness tools
25
class cmd_conflicted(bzrlib.commands.Command):
26
    """List files that have conflicts
27
    """
28
    takes_options = ['ignored']
29
    def run(self, ignored=False):
30
        import clean_tree
31
        clean_tree.clean_tree(ignored=ignored)
118 by aaron.bentley at utoronto
Added clean-tree command
32
136 by Aaron Bentley
Allowed disabling ancestry collapsing
33
bzrlib.commands.OPTIONS['no-collapse'] = None
143 by Aaron Bentley
Used rsvga for nice antialiasing
34
bzrlib.commands.OPTIONS['no-antialias'] = None
178 by Aaron Bentley
Switched from clusters to forced ranking
35
bzrlib.commands.OPTIONS['cluster'] = None
160 by Aaron Bentley
Restored old graph-ancestry functionality
36
bzrlib.commands.OPTIONS['merge-branch'] = str
136 by Aaron Bentley
Allowed disabling ancestry collapsing
37
128 by Aaron Bentley
Got initial graphing functionality working
38
class cmd_graph_ancestry(bzrlib.commands.Command):
136 by Aaron Bentley
Allowed disabling ancestry collapsing
39
    """Produce ancestry graphs using dot.
40
    
41
    Output format is detected according to file extension.  Some of the more
137 by Aaron Bentley
Put dotted outlines on missing revisions
42
    common output formats are png, gif, svg, ps.  An extension of '.dot' will
43
    cause a dot graph file to be produced.
136 by Aaron Bentley
Allowed disabling ancestry collapsing
44
45
    Ancestry is usually collapsed by removing nodes with a single parent
46
    and descendant, but this can be disabled with --no-collapse.
137 by Aaron Bentley
Put dotted outlines on missing revisions
47
48
    The current branch's revisions are yellow and labeled R?, where ? is
49
    the revno.  Other revisions are labeled with essentially random numbers.
50
51
    Revisions that are not in branch storage have dotted outlines.
143 by Aaron Bentley
Used rsvga for nice antialiasing
52
53
    rsvg is used to antialias PNG and JPEG output, but this can be disabled
54
    with --no-antialias.
136 by Aaron Bentley
Allowed disabling ancestry collapsing
55
    """
131 by Aaron Bentley
Added required filename parameter
56
    takes_args = ['branch', 'file']
178 by Aaron Bentley
Switched from clusters to forced ranking
57
    takes_options = ['no-collapse', 'no-antialias', 'merge-branch', 'cluster']
160 by Aaron Bentley
Restored old graph-ancestry functionality
58
    def run(self, branch, file, no_collapse=False, no_antialias=False,
178 by Aaron Bentley
Switched from clusters to forced ranking
59
        merge_branch=None, cluster=False):
128 by Aaron Bentley
Got initial graphing functionality working
60
        import graph
178 by Aaron Bentley
Switched from clusters to forced ranking
61
        if cluster:
62
            ranking = "cluster"
63
        else:
64
            ranking = "forced"
143 by Aaron Bentley
Used rsvga for nice antialiasing
65
        graph.write_ancestry_file(branch, file, not no_collapse, 
178 by Aaron Bentley
Switched from clusters to forced ranking
66
                                  not no_antialias, merge_branch, ranking)
128 by Aaron Bentley
Got initial graphing functionality working
67
144 by aaron.bentley at utoronto
Added fetch-missing command
68
class cmd_fetch_missing(bzrlib.commands.Command):
150 by abentley
Made fetch_missing use the x-pull file
69
    """Attempt to retrieve missing ancestors from another branch.
70
    If the other branch is not supplied, the last-pulled branch is used.
144 by aaron.bentley at utoronto
Added fetch-missing command
71
    """
150 by abentley
Made fetch_missing use the x-pull file
72
    takes_args = ['branch?']
73
    def run(self, branch=None):
144 by aaron.bentley at utoronto
Added fetch-missing command
74
        from fetch_missing import fetch_missing
75
        fetch_missing(branch)
76
152 by Aaron Bentley
Added new bzr patch command
77
class cmd_patch(bzrlib.commands.Command):
78
    """Apply a named patch to the current tree.
79
    """
80
    takes_args = ['filename?']
81
    takes_options = ['strip']
82
    def run(self, filename=None, strip=0):
83
        from patch import patch
84
        from bzrlib.branch import Branch
158 by Aaron Bentley
Updated to match API changes
85
        b = Branch.open_containing('.')
152 by Aaron Bentley
Added new bzr patch command
86
        return patch(b, filename, strip)
87
88
89
100 by Aaron Bentley
Fixed up the baz-import plugin
90
commands = [push.cmd_push, annotate.cmd_annotate, shelf.cmd_shelve, 
122 by aaron.bentley at utoronto
Added resolve command
91
            shelf.cmd_unshelve, cmd_clean_tree, conflicts.cmd_conflicts,
152 by Aaron Bentley
Added new bzr patch command
92
            conflicts.cmd_resolve, cmd_graph_ancestry, cmd_fetch_missing,
93
            cmd_patch]
105 by Aaron Bentley
Fixed NoPyBaz detection
94
from errors import NoPyBaz
100 by Aaron Bentley
Fixed up the baz-import plugin
95
try:
96
    import baz_import
97
    commands.append(baz_import.cmd_baz_import)
105 by Aaron Bentley
Fixed NoPyBaz detection
98
99
except NoPyBaz:
100 by Aaron Bentley
Fixed up the baz-import plugin
100
    class cmd_baz_import(bzrlib.commands.Command):
101
        """Disabled. (Requires PyBaz)"""
102
    commands.append(cmd_baz_import)
103
94 by Aaron Bentley
Adjsted to match plugin api
104
if hasattr(bzrlib.commands, 'register_command'):
93 by Aaron Bentley
Used the bzr 0.5+ plugin stuff
105
    for command in commands:
94 by Aaron Bentley
Adjsted to match plugin api
106
        bzrlib.commands.register_command(command)
147 by Robert Collins
make bzr selftest run the plugins tests, and fix them
107
108
def test_suite():
109
    from doctest import DocTestSuite
110
    return DocTestSuite(bzrtools)