17
17
# along with this program; if not, write to the Free Software
18
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
25
if hasattr(sys, "frozen"):
26
# "hack in" our PyQt4 binaries
27
sys.path.append(os.path.join(os.path.dirname(__file__), '_lib'))
20
29
import bzrlib.plugins.qbzr.resources
21
from bzrlib.plugins.qbzr.browse import *
22
from bzrlib.plugins.qbzr.commit import *
23
from bzrlib.plugins.qbzr.diff import *
24
from bzrlib.plugins.qbzr.log import *
30
from bzrlib.option import Option
31
from bzrlib.commands import Command, register_command
32
from bzrlib.lazy_import import lazy_import
33
lazy_import(globals(), '''
34
from PyQt4 import QtGui
35
from bzrlib.branch import Branch
36
from bzrlib.bzrdir import BzrDir
37
from bzrlib.plugins.qbzr.annotate import AnnotateWindow
38
from bzrlib.plugins.qbzr.browse import BrowseWindow
39
from bzrlib.plugins.qbzr.commit import CommitWindow
40
from bzrlib.plugins.qbzr.diff import DiffWindow
41
from bzrlib.plugins.qbzr.log import LogWindow
42
from bzrlib.workingtree import WorkingTree
46
class cmd_qannotate(Command):
47
"""Show the origin of each line in a file."""
48
takes_args = ['filename?']
49
takes_options = ['revision']
50
aliases = ['qann', 'qblame']
52
def run(self, filename=None, revision=None):
53
from bzrlib.annotate import _annotate_file
54
tree, relpath = WorkingTree.open_containing(filename)
59
revision_id = branch.last_revision()
60
elif len(revision) != 1:
61
raise errors.BzrCommandError('bzr qannotate --revision takes exactly 1 argument')
63
revision_id = revision[0].in_history(branch).rev_id
64
file_id = tree.inventory.path2id(relpath)
65
tree = branch.repository.revision_tree(revision_id)
66
file_version = tree.inventory[file_id].revision
67
lines = list(_annotate_file(branch, file_version, file_id))
71
app = QtGui.QApplication(sys.argv)
72
win = AnnotateWindow(filename, lines)
77
class cmd_qbrowse(Command):
79
takes_args = ['location?']
80
takes_options = ['revision']
82
def run(self, revision=None, location=None):
83
branch, path = Branch.open_containing(location)
84
app = QtGui.QApplication(sys.argv)
85
win = BrowseWindow(branch)
90
class cmd_qcommit(Command):
91
"""GUI for committing revisions."""
92
takes_args = ['filename?']
95
def run(self, filename=None):
96
tree, filename = WorkingTree.open_containing(filename)
97
application = QtGui.QApplication(sys.argv)
98
window = CommitWindow(tree, filename)
103
class cmd_qdiff(Command):
104
"""Show differences in working tree in a GUI window."""
105
takes_args = ['filename?']
108
Option('inline', help='Show inline diff'),
109
Option('complete', help='Show complete files'),
113
def run(self, revision=None, filename=None, inline=False, complete=False):
114
wt, filename = WorkingTree.open_containing(filename)
116
if revision is not None:
117
if len(revision) == 1:
119
revision_id = revision[0].in_history(branch).rev_id
120
tree2 = branch.repository.revision_tree(revision_id)
121
elif len(revision) == 2:
122
revision_id_0 = revision[0].in_history(branch).rev_id
123
tree2 = branch.repository.revision_tree(revision_id_0)
124
revision_id_1 = revision[1].in_history(branch).rev_id
125
tree1 = branch.repository.revision_tree(revision_id_1)
128
tree2 = tree1.basis_tree()
129
specific_files = None
131
specific_files = (filename,)
132
application = QtGui.QApplication(sys.argv)
133
window = DiffWindow(tree2, tree1, inline=inline, complete=complete,
134
specific_files=specific_files)
139
class cmd_qlog(Command):
140
"""Show log of a branch, file, or directory in a Qt window.
142
By default show the log of the branch containing the working directory."""
144
takes_args = ['location?']
147
def run(self, location=None):
150
dir, path = BzrDir.open_containing(location)
151
branch = dir.open_branch()
154
inv = dir.open_workingtree().inventory
155
except (errors.NotBranchError, errors.NotLocalUrl):
156
inv = branch.basis_tree().inventory
157
file_id = inv.path2id(path)
159
dir, path = BzrDir.open_containing('.')
160
branch = dir.open_branch()
162
config = branch.get_config()
163
replace = config.get_user_option("qlog_replace")
165
replace = replace.split("\n")
166
replace = [tuple(replace[2*i:2*i+2])
167
for i in range(len(replace) // 2)]
169
app = QtGui.QApplication(sys.argv)
170
window = LogWindow(branch, location, file_id, replace)
175
register_command(cmd_qannotate)
176
register_command(cmd_qbrowse)
177
register_command(cmd_qcommit)
178
register_command(cmd_qdiff)
179
register_command(cmd_qlog)