56
53
from bzrlib.plugins.gtk.conflicts import ConflictsDialog
57
54
from bzrlib.plugins.gtk.initialize import InitDialog
58
55
from bzrlib.plugins.gtk.push import PushDialog
59
from bzrlib.plugins.gtk.revbrowser import RevisionBrowser
62
""" Display the AboutDialog. """
63
from bzrlib.plugins.gtk import __version__
64
from bzrlib.plugins.gtk.olive.guifiles import GLADEFILENAME
66
# Load AboutDialog description
67
dglade = gtk.glade.XML(GLADEFILENAME, 'aboutdialog')
68
dialog = dglade.get_widget('aboutdialog')
71
dialog.set_version(__version__)
72
dialog.set_authors([ _i18n("Lead Developer:"),
73
"Szilveszter Farkas <szilveszter.farkas@gmail.com>",
74
_i18n("Contributors:"),
75
"Jelmer Vernooij <jelmer@samba.org>",
76
"Mateusz Korniak <mateusz.korniak@ant.gliwice.pl>",
77
"Gary van der Merwe <garyvdm@gmail.com>" ])
78
dialog.set_artists([ "Simon Pascal Klein <klepas@klepas.org>",
79
"Jakub Steiner <jimmac@novell.com>" ])
86
58
""" The main Olive GTK frontend class. This is called when launching the
106
78
# Get some important menu items
107
79
self.menuitem_add_files = self.toplevel.get_widget('menuitem_add_files')
108
80
self.menuitem_remove_files = self.toplevel.get_widget('menuitem_remove_file')
109
self.menuitem_file_bookmark = self.toplevel.get_widget('menuitem_file_bookmark')
110
81
self.menuitem_file_make_directory = self.toplevel.get_widget('menuitem_file_make_directory')
111
82
self.menuitem_file_rename = self.toplevel.get_widget('menuitem_file_rename')
112
83
self.menuitem_file_move = self.toplevel.get_widget('menuitem_file_move')
113
84
self.menuitem_file_annotate = self.toplevel.get_widget('menuitem_file_annotate')
114
85
self.menuitem_view_show_hidden_files = self.toplevel.get_widget('menuitem_view_show_hidden_files')
115
self.menuitem_view_show_ignored_files = self.toplevel.get_widget('menuitem_view_show_ignored_files')
116
86
self.menuitem_branch = self.toplevel.get_widget('menuitem_branch')
117
87
self.menuitem_branch_init = self.toplevel.get_widget('menuitem_branch_initialize')
118
88
self.menuitem_branch_get = self.toplevel.get_widget('menuitem_branch_get')
119
89
self.menuitem_branch_checkout = self.toplevel.get_widget('menuitem_branch_checkout')
120
90
self.menuitem_branch_pull = self.toplevel.get_widget('menuitem_branch_pull')
121
91
self.menuitem_branch_push = self.toplevel.get_widget('menuitem_branch_push')
122
self.menuitem_branch_update = self.toplevel.get_widget('menuitem_branch_update')
123
92
self.menuitem_branch_revert = self.toplevel.get_widget('menuitem_branch_revert')
124
93
self.menuitem_branch_merge = self.toplevel.get_widget('menuitem_branch_merge')
125
94
self.menuitem_branch_commit = self.toplevel.get_widget('menuitem_branch_commit')
163
126
"on_about_activate": self.on_about_activate,
164
127
"on_menuitem_add_files_activate": self.on_menuitem_add_files_activate,
165
128
"on_menuitem_remove_file_activate": self.on_menuitem_remove_file_activate,
166
"on_menuitem_file_bookmark_activate": self.on_menuitem_file_bookmark_activate,
167
129
"on_menuitem_file_make_directory_activate": self.on_menuitem_file_make_directory_activate,
168
130
"on_menuitem_file_move_activate": self.on_menuitem_file_move_activate,
169
131
"on_menuitem_file_rename_activate": self.on_menuitem_file_rename_activate,
170
132
"on_menuitem_file_annotate_activate": self.on_menuitem_file_annotate_activate,
171
133
"on_menuitem_view_show_hidden_files_activate": self.on_menuitem_view_show_hidden_files_activate,
172
"on_menuitem_view_show_ignored_files_activate": self.on_menuitem_view_show_ignored_files_activate,
173
134
"on_menuitem_view_refresh_activate": self.on_menuitem_view_refresh_activate,
174
135
"on_menuitem_branch_initialize_activate": self.on_menuitem_branch_initialize_activate,
175
136
"on_menuitem_branch_get_activate": self.on_menuitem_branch_get_activate,
179
140
"on_menuitem_branch_commit_activate": self.on_menuitem_branch_commit_activate,
180
141
"on_menuitem_branch_push_activate": self.on_menuitem_branch_push_activate,
181
142
"on_menuitem_branch_pull_activate": self.on_menuitem_branch_pull_activate,
182
"on_menuitem_branch_update_activate": self.on_menuitem_branch_update_activate,
183
143
"on_menuitem_branch_tags_activate": self.on_menuitem_branch_tags_activate,
184
144
"on_menuitem_branch_status_activate": self.on_menuitem_branch_status_activate,
185
145
"on_menuitem_branch_missing_revisions_activate": self.on_menuitem_branch_missing_revisions_activate,
194
154
"on_toolbutton_commit_clicked": self.on_menuitem_branch_commit_activate,
195
155
"on_toolbutton_pull_clicked": self.on_menuitem_branch_pull_activate,
196
156
"on_toolbutton_push_clicked": self.on_menuitem_branch_push_activate,
197
"on_toolbutton_update_clicked": self.on_menuitem_branch_update_activate,
198
157
"on_treeview_right_button_press_event": self.on_treeview_right_button_press_event,
199
158
"on_treeview_right_row_activated": self.on_treeview_right_row_activated,
200
159
"on_treeview_left_button_press_event": self.on_treeview_left_button_press_event,
201
"on_treeview_left_button_release_event": self.on_treeview_left_button_release_event,
202
160
"on_treeview_left_row_activated": self.on_treeview_left_row_activated,
203
161
"on_button_location_up_clicked": self.on_button_location_up_clicked,
204
162
"on_button_location_jump_clicked": self.on_button_location_jump_clicked,
205
"on_entry_location_key_press_event": self.on_entry_location_key_press_event,
206
"on_checkbutton_history_toggled": self.on_checkbutton_history_toggled,
207
"on_entry_history_revno_key_press_event": self.on_entry_history_revno_key_press_event,
208
"on_button_history_browse_clicked": self.on_button_history_browse_clicked
163
"on_entry_location_key_press_event": self.on_entry_location_key_press_event
211
166
# Connect the signals to the handlers
243
198
# Apply menu state
244
199
self.menuitem_view_show_hidden_files.set_active(self.pref.get_preference('dotted_files', 'bool'))
245
self.menuitem_view_show_ignored_files.set_active(self.pref.get_preference('ignored_files', 'bool'))
247
201
# We're starting local
248
202
self.remote = False
249
203
self.remote_branch = None
250
204
self.remote_path = None
251
self.remote_revision = None
253
206
self.set_path(os.getcwd())
254
207
self._load_right()
256
209
self._just_started = False
258
def set_path(self, path, force_remote=False):
211
def set_path(self, path):
259
212
self.notbranch = False
262
# Forcing remote mode (reading data from inventory)
214
if os.path.isdir(path):
215
self.image_location_error.destroy()
220
self.wt, self.wtpath = WorkingTree.open_containing(path)
221
except (bzrerrors.NotBranchError, bzrerrors.NoWorkingTree):
222
self.notbranch = True
224
# If we're in the root, we cannot go up anymore
225
if sys.platform == 'win32':
226
drive, tail = os.path.splitdrive(path)
227
if tail in ('', '/', '\\'):
228
self.button_location_up.set_sensitive(False)
230
self.button_location_up.set_sensitive(True)
233
self.button_location_up.set_sensitive(False)
235
self.button_location_up.set_sensitive(True)
236
elif not os.path.isfile(path):
237
# Doesn't seem to be a file nor a directory, trying to open a
263
239
self._show_stock_image(gtk.STOCK_DISCONNECT)
265
241
br = Branch.open_containing(path)[0]
266
242
except bzrerrors.NotBranchError:
267
243
self._show_stock_image(gtk.STOCK_DIALOG_ERROR)
268
self.check_history.set_active(False)
269
self.check_history.set_sensitive(False)
271
245
except bzrerrors.UnsupportedProtocol:
272
246
self._show_stock_image(gtk.STOCK_DIALOG_ERROR)
273
self.check_history.set_active(False)
274
self.check_history.set_sensitive(False)
277
249
self._show_stock_image(gtk.STOCK_CONNECT)
301
270
self.button_location_up.set_sensitive(False)
303
272
self.button_location_up.set_sensitive(True)
305
if os.path.isdir(path):
306
self.image_location_error.destroy()
311
self.wt, self.wtpath = WorkingTree.open_containing(path)
312
except (bzrerrors.NotBranchError, bzrerrors.NoWorkingTree):
313
self.notbranch = True
315
# If we're in the root, we cannot go up anymore
316
if sys.platform == 'win32':
317
drive, tail = os.path.splitdrive(path)
318
if tail in ('', '/', '\\'):
319
self.button_location_up.set_sensitive(False)
321
self.button_location_up.set_sensitive(True)
324
self.button_location_up.set_sensitive(False)
326
self.button_location_up.set_sensitive(True)
327
elif not os.path.isfile(path):
328
# Doesn't seem to be a file nor a directory, trying to open a
330
self._show_stock_image(gtk.STOCK_DISCONNECT)
332
br = Branch.open_containing(path)[0]
333
except bzrerrors.NotBranchError:
334
self._show_stock_image(gtk.STOCK_DIALOG_ERROR)
335
self.check_history.set_active(False)
336
self.check_history.set_sensitive(False)
338
except bzrerrors.UnsupportedProtocol:
339
self._show_stock_image(gtk.STOCK_DIALOG_ERROR)
340
self.check_history.set_active(False)
341
self.check_history.set_sensitive(False)
344
self._show_stock_image(gtk.STOCK_CONNECT)
349
self.remote_branch, self.remote_path = Branch.open_containing(path)
351
if self.remote_revision is None:
352
self.remote_revision = self.remote_branch.last_revision()
354
self.remote_entries = self.remote_branch.repository.get_inventory(self.remote_revision).entries()
356
if len(self.remote_path) == 0:
357
self.remote_parent = self.remote_branch.repository.get_inventory(self.remote_branch.last_revision()).iter_entries_by_dir().next()[1].file_id
359
for (name, type) in self.remote_entries:
360
if name == self.remote_path:
361
self.remote_parent = type.file_id
364
if not path.endswith('/'):
367
if self.remote_branch.base == path:
368
self.button_location_up.set_sensitive(False)
370
self.button_location_up.set_sensitive(True)
373
self.check_history.set_active(False)
374
self.check_history.set_sensitive(False)
376
self.check_history.set_sensitive(True)
378
274
self.statusbar.push(self.context_id, path)
379
275
self.entry_location.set_text(path)
391
287
return self.remote_branch.base
393
289
def on_about_activate(self, widget):
290
from bzrlib.plugins.gtk.dialog import about
396
def on_button_history_browse_clicked(self, widget):
397
""" Browse for revision button handler. """
399
br = self.remote_branch
403
revb = RevisionBrowser(br, self.window)
404
response = revb.run()
405
if response != gtk.RESPONSE_NONE:
408
if response == gtk.RESPONSE_OK:
409
if revb.selected_revno is not None:
410
self.entry_history.set_text(revb.selected_revno)
414
def on_button_location_jump_clicked(self, widget):
415
""" Location Jump button handler. """
416
location = self.entry_location.get_text()
418
if self.set_path(location):
421
293
def on_button_location_up_clicked(self, widget):
422
294
""" Location Up button handler. """
423
295
if not self.remote:
433
305
self.refresh_right()
435
def on_checkbutton_history_toggled(self, widget):
436
""" History Mode toggle handler. """
437
if self.check_history.get_active():
438
# History Mode activated
439
self.entry_history.set_sensitive(True)
440
self.button_history.set_sensitive(True)
442
# History Mode deactivated
443
self.entry_history.set_sensitive(False)
444
self.button_history.set_sensitive(False)
447
def on_entry_history_revno_key_press_event(self, widget, event):
448
""" Key pressed handler for the history entry. """
449
if event.keyval == gtk.gdk.keyval_from_name('Return') or event.keyval == gtk.gdk.keyval_from_name('KP_Enter'):
450
# Return was hit, so we have to load that specific revision
451
# Emulate being remote, so inventory should be used
452
path = self.get_path()
455
self.remote_branch = self.wt.branch
457
revno = int(self.entry_history.get_text())
458
self.remote_revision = self.remote_branch.get_rev_id(revno)
459
if self.set_path(path, True):
307
def on_button_location_jump_clicked(self, widget):
308
""" Location Jump button handler. """
309
location = self.entry_location.get_text()
311
if self.set_path(location):
462
314
def on_entry_location_key_press_event(self, widget, event):
463
315
""" Key pressed handler for the location entry. """
464
if event.keyval == gtk.gdk.keyval_from_name('Return') or event.keyval == gtk.gdk.keyval_from_name('KP_Enter'):
316
if event.keyval == 65293:
465
317
# Return was hit, so we have to jump
466
318
self.on_button_location_jump_clicked(widget)
509
361
def on_menuitem_branch_commit_activate(self, widget):
510
362
""" Branch/Commit... menu handler. """
511
# def __init__(self, wt, wtpath, notbranch, selected=None, parent=None):
512
selected = self.get_selected_right()
514
selected = os.path.join(self.wtpath, selected)
515
commit = CommitDialog(wt=self.wt,
363
commit = CommitDialog(self.wt, self.wtpath, self.notbranch, self.get_selected_right(), self.window)
519
364
response = commit.run()
520
365
if response != gtk.RESPONSE_NONE:
537
382
from bzrlib.plugins.gtk.merge import MergeDialog
539
384
if self.check_for_changes():
540
error_dialog(_i18n('There are local changes in the branch'),
541
_i18n('Please commit or revert the changes before merging.'))
385
error_dialog(_('There are local changes in the branch'),
386
_('Please commit or revert the changes before merging.'))
543
parent_branch_path = self.wt.branch.get_parent()
544
merge = MergeDialog(self.wt, self.wtpath,default_branch_path=parent_branch_path )
388
merge = MergeDialog(self.wt, self.wtpath)
548
392
def on_menuitem_branch_missing_revisions_activate(self, widget):
549
393
""" Branch/Missing revisions menu handler. """
551
from bzrlib.missing import find_unmerged, iter_log_revisions
553
394
local_branch = self.wt.branch
554
parent_branch_path = local_branch.get_parent()
555
if parent_branch_path is None:
556
error_dialog(_i18n('Parent location is unknown'),
557
_i18n('Cannot determine missing revisions if no parent location is known.'))
396
other_branch = local_branch.get_parent()
397
if other_branch is None:
398
error_dialog(_('Parent location is unknown'),
399
_('Cannot determine missing revisions if no parent location is known.'))
560
parent_branch = Branch.open(parent_branch_path)
562
if parent_branch.base == local_branch.base:
563
parent_branch = local_branch
565
local_extra, remote_extra = find_unmerged(local_branch,parent_branch)
567
if local_extra or remote_extra:
569
## def log_revision_one_line_text(log_revision):
570
## """ Generates one line description of log_revison ended with end of line."""
571
## revision = log_revision.rev
572
## txt = "- %s (%s)\n" % (revision.get_summary(), revision.committer, )
573
## txt = txt.replace("<"," ") # Seems < > chars are expected to be xml tags ...
574
## txt = txt.replace(">"," ")
579
dlg_txt += _i18n('%d local extra revision(s). \n') % (len(local_extra),)
580
## NOTE: We do not want such ugly info about missing revisions
581
## Revision Browser should be used there
582
## max_revisions = 10
583
## for log_revision in iter_log_revisions(local_extra, local_branch.repository, verbose=1):
584
## dlg_txt += log_revision_one_line_text(log_revision)
585
## if max_revisions <= 0:
586
## dlg_txt += _i18n("more ... \n")
588
## max_revisions -= 1
591
dlg_txt += _i18n('%d local missing revision(s).\n') % (len(remote_extra),)
592
## max_revisions = 10
593
## for log_revision in iter_log_revisions(remote_extra, parent_branch.repository, verbose=1):
594
## dlg_txt += log_revision_one_line_text(log_revision)
595
## if max_revisions <= 0:
596
## dlg_txt += _i18n("more ... \n")
598
## max_revisions -= 1
600
info_dialog(_i18n('There are missing revisions'),
402
remote_branch = Branch.open(other_branch)
404
if remote_branch.base == local_branch.base:
405
remote_branch = local_branch
407
ret = len(local_branch.missing_revisions(remote_branch))
410
info_dialog(_('There are missing revisions'),
411
_('%d revision(s) missing.') % ret)
603
info_dialog(_i18n('Local branch up to date'),
604
_i18n('There are no missing revisions.'))
413
info_dialog(_('Local branch up to date'),
414
_('There are no missing revisions.'))
607
417
def on_menuitem_branch_pull_activate(self, widget):
622
432
ret = branch_to.pull(branch_from)
624
info_dialog(_i18n('Pull successful'), _i18n('%d revision(s) pulled.') % ret)
627
def on_menuitem_branch_update_activate(self, widget):
628
""" Brranch/checkout update menu handler. """
630
ret = self.wt.update()
631
conflicts = self.wt.conflicts()
633
info_dialog(_i18n('Update successful but conflicts generated'), _i18n('Number of conflicts generated: %d.') % (len(conflicts),) )
635
info_dialog(_i18n('Update successful'), _i18n('No conflicts generated.') )
434
info_dialog(_('Pull successful'), _('%d revision(s) pulled.') % ret)
637
436
def on_menuitem_branch_push_activate(self, widget):
638
437
""" Branch/Push... menu handler. """
639
push = PushDialog(repository=None,revid=None,branch=self.wt.branch, parent=self.window)
438
push = PushDialog(self.wt.branch, self.window)
640
439
response = push.run()
641
440
if response != gtk.RESPONSE_NONE:
646
445
""" Branch/Revert all changes menu handler. """
647
446
ret = self.wt.revert([])
649
warning_dialog(_i18n('Conflicts detected'),
650
_i18n('Please have a look at the working tree before continuing.'))
448
warning_dialog(_('Conflicts detected'),
449
_('Please have a look at the working tree before continuing.'))
652
info_dialog(_i18n('Revert successful'),
653
_i18n('All files reverted to last revision.'))
451
info_dialog(_('Revert successful'),
452
_('All files reverted to last revision.'))
654
453
self.refresh_right()
656
455
def on_menuitem_branch_status_activate(self, widget):
685
484
def on_menuitem_file_annotate_activate(self, widget):
686
485
""" File/Annotate... menu handler. """
687
486
if self.get_selected_right() is None:
688
error_dialog(_i18n('No file was selected'),
689
_i18n('Please select a file from the list.'))
487
error_dialog(_('No file was selected'),
488
_('Please select a file from the list.'))
692
491
branch = self.wt.branch
693
492
file_id = self.wt.path2id(self.wt.relpath(os.path.join(self.path, self.get_selected_right())))
695
window = GAnnotateWindow(all=False, plain=False, parent=self.window)
494
window = GAnnotateWindow(all=False, plain=False)
696
495
window.set_title(os.path.join(self.path, self.get_selected_right()) + " - Annotate")
697
496
config = GAnnotateConfig(window)
705
def on_menuitem_file_bookmark_activate(self, widget):
706
""" File/Bookmark current directory menu handler. """
707
if self.pref.add_bookmark(self.path):
708
info_dialog(_i18n('Bookmark successfully added'),
709
_i18n('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
712
warning_dialog(_i18n('Location already bookmarked'),
713
_i18n('The current directory is already bookmarked.\nSee the left panel for reference.'))
717
504
def on_menuitem_file_make_directory_activate(self, widget):
718
505
""" File/Make directory... menu handler. """
719
506
from mkdir import OliveMkdir
768
555
def on_menuitem_stats_log_activate(self, widget):
769
556
""" Statistics/Log... menu handler. """
557
window = branchwin.BranchWindow()
771
558
if not self.remote:
772
branch = self.wt.branch
559
window.set_branch(self.wt.branch, self.wt.branch.last_revision(), None)
774
branch = self.remote_branch
776
window = branchwin.BranchWindow(branch, branch.last_revision(), None, parent=self.window)
561
window.set_branch(self.remote_branch, self.remote_branch.last_revision(), None)
779
564
def on_menuitem_view_refresh_activate(self, widget):
811
590
menu.left_context_menu().popup(None, None, None, 0,
814
def on_treeview_left_button_release_event(self, widget, event):
815
""" Occurs when somebody just clicks a bookmark. """
816
if event.button != 3:
817
# Allow one-click bookmark opening
818
if self.get_selected_left() == None:
821
newdir = self.get_selected_left()
825
if self.set_path(newdir):
828
593
def on_treeview_left_row_activated(self, treeview, path, view_column):
829
594
""" Occurs when somebody double-clicks or enters an item in the
830
595
bookmark list. """
885
650
m_annotate.set_sensitive(False)
886
651
m_diff.set_sensitive(False)
889
menu.right_context_menu().popup(None, None, None, 0,
892
menu.remote_context_menu().popup(None, None, None, 0,
653
menu.right_context_menu().popup(None, None, None, 0,
895
656
def on_treeview_right_row_activated(self, treeview, path, view_column):
896
657
""" Occurs when somebody double-clicks or enters an item in the
940
701
bookmarks = self.pref.get_bookmarks()
942
703
# Add them to the TreeStore
943
titer = treestore.append(None, [_i18n('Bookmarks'), None])
704
titer = treestore.append(None, [_('Bookmarks'), None])
944
705
for item in bookmarks:
945
706
title = self.pref.get_bookmark_title(item)
946
707
treestore.append(titer, [title, item])
948
709
# Create the column and add it to the TreeView
949
710
self.treeview_left.set_model(treestore)
950
tvcolumn_bookmark = gtk.TreeViewColumn(_i18n('Bookmark'))
711
tvcolumn_bookmark = gtk.TreeViewColumn(_('Bookmark'))
951
712
self.treeview_left.append_column(tvcolumn_bookmark)
953
714
# Set up the cells
961
722
def _load_right(self):
962
723
""" Load data into the right panel. (Filelist) """
963
724
# Create ListStore
964
# Model: [ icon, dir, name, status text, status, size (int), size (human), mtime (int), mtime (local), fileid ]
965
liststore = gtk.ListStore(gobject.TYPE_STRING,
966
gobject.TYPE_BOOLEAN,
725
# Model: [icon, dir, name, status text, status, size (int), size (human), mtime (int), mtime (local)]
726
liststore = gtk.ListStore(str, gobject.TYPE_BOOLEAN, str, str, str, gobject.TYPE_INT, gobject.TYPE_STRING, gobject.TYPE_INT, gobject.TYPE_STRING)
995
747
# Add'em to the ListStore
996
748
for item in dirs:
998
statinfo = os.stat(self.path + os.sep + item)
1004
liststore.append([ gtk.STOCK_DIRECTORY,
1012
self._format_date(statinfo.st_mtime),
749
statinfo = os.stat(self.path + os.sep + item)
750
liststore.append([gtk.STOCK_DIRECTORY, True, item, '', '', statinfo.st_size, self._format_size(statinfo.st_size), statinfo.st_mtime, self._format_date(statinfo.st_mtime)])
1014
751
for item in files:
1015
752
status = 'unknown'
1017
753
if not self.notbranch:
1018
754
filename = self.wt.relpath(self.path + os.sep + item)
1023
759
for rpath, rpathnew, id, kind, text_modified, meta_modified in delta.renamed:
1024
760
if rpathnew == filename:
1025
761
status = 'renamed'
1027
762
for rpath, id, kind in delta.added:
1028
763
if rpath == filename:
1029
764
status = 'added'
1031
765
for rpath, id, kind in delta.removed:
1032
766
if rpath == filename:
1033
767
status = 'removed'
1035
768
for rpath, id, kind, text_modified, meta_modified in delta.modified:
1036
769
if rpath == filename:
1037
770
status = 'modified'
1039
771
for rpath, id, kind in delta.unchanged:
1040
772
if rpath == filename:
1041
773
status = 'unchanged'
1043
774
for rpath, file_class, kind, id, entry in self.wt.list_files():
1044
775
if rpath == filename and file_class == 'I':
1045
776
status = 'ignored'
1047
778
self.wt.unlock()
781
# status = fileops.status(path + os.sep + item)
782
#except errors.PermissionDenied:
1049
785
if status == 'renamed':
1050
st = _i18n('renamed')
1051
787
elif status == 'removed':
1052
st = _i18n('removed')
1053
789
elif status == 'added':
1055
791
elif status == 'modified':
1056
st = _i18n('modified')
1057
793
elif status == 'unchanged':
1058
st = _i18n('unchanged')
1059
795
elif status == 'ignored':
1060
st = _i18n('ignored')
1062
st = _i18n('unknown')
1065
statinfo = os.stat(self.path + os.sep + item)
1071
liststore.append([gtk.STOCK_FILE,
1076
str(statinfo.st_size), # NOTE: if int used there it will fail for large files (size expressed as long int)
1077
self._format_size(statinfo.st_size),
1079
self._format_date(statinfo.st_mtime),
800
statinfo = os.stat(self.path + os.sep + item)
801
liststore.append([gtk.STOCK_FILE, False, item, st, status, statinfo.st_size, self._format_size(statinfo.st_size), statinfo.st_mtime, self._format_date(statinfo.st_mtime)])
1082
803
# Create the columns and add them to the TreeView
1083
804
self.treeview_right.set_model(liststore)
1084
self._tvcolumn_filename = gtk.TreeViewColumn(_i18n('Filename'))
1085
self._tvcolumn_status = gtk.TreeViewColumn(_i18n('Status'))
1086
self._tvcolumn_size = gtk.TreeViewColumn(_i18n('Size'))
1087
self._tvcolumn_mtime = gtk.TreeViewColumn(_i18n('Last modified'))
805
self._tvcolumn_filename = gtk.TreeViewColumn(_('Filename'))
806
self._tvcolumn_status = gtk.TreeViewColumn(_('Status'))
807
self._tvcolumn_size = gtk.TreeViewColumn(_('Size'))
808
self._tvcolumn_mtime = gtk.TreeViewColumn(_('Last modified'))
1088
809
self.treeview_right.append_column(self._tvcolumn_filename)
1089
810
self.treeview_right.append_column(self._tvcolumn_status)
1090
811
self.treeview_right.append_column(self._tvcolumn_size)
1300
1005
# Add'em to the ListStore
1301
1006
for item in dirs:
1303
statinfo = os.stat(self.path + os.sep + item)
1309
liststore.append([gtk.STOCK_DIRECTORY,
1317
self._format_date(statinfo.st_mtime),
1007
statinfo = os.stat(self.path + os.sep + item)
1008
liststore.append([gtk.STOCK_DIRECTORY, True, item, '', '', statinfo.st_size, self._format_size(statinfo.st_size), statinfo.st_mtime, self._format_date(statinfo.st_mtime)])
1319
1009
for item in files:
1320
1010
status = 'unknown'
1322
1011
if not notbranch:
1323
1012
filename = tree1.relpath(path + os.sep + item)
1328
1017
for rpath, rpathnew, id, kind, text_modified, meta_modified in delta.renamed:
1329
1018
if rpathnew == filename:
1330
1019
status = 'renamed'
1332
1020
for rpath, id, kind in delta.added:
1333
1021
if rpath == filename:
1336
1023
for rpath, id, kind in delta.removed:
1337
1024
if rpath == filename:
1338
1025
status = 'removed'
1340
1026
for rpath, id, kind, text_modified, meta_modified in delta.modified:
1341
1027
if rpath == filename:
1342
1028
status = 'modified'
1344
1029
for rpath, id, kind in delta.unchanged:
1345
1030
if rpath == filename:
1346
1031
status = 'unchanged'
1348
1032
for rpath, file_class, kind, id, entry in self.wt.list_files():
1349
1033
if rpath == filename and file_class == 'I':
1350
1034
status = 'ignored'
1352
1036
self.wt.unlock()
1354
1038
if status == 'renamed':
1355
st = _i18n('renamed')
1356
1040
elif status == 'removed':
1357
st = _i18n('removed')
1358
1042
elif status == 'added':
1360
1044
elif status == 'modified':
1361
st = _i18n('modified')
1362
1046
elif status == 'unchanged':
1363
st = _i18n('unchanged')
1364
1048
elif status == 'ignored':
1365
st = _i18n('ignored')
1366
if not ignored_files:
1369
st = _i18n('unknown')
1372
statinfo = os.stat(self.path + os.sep + item)
1378
liststore.append([gtk.STOCK_FILE,
1383
str(statinfo.st_size),
1384
self._format_size(statinfo.st_size),
1386
self._format_date(statinfo.st_mtime),
1053
statinfo = os.stat(self.path + os.sep + item)
1054
liststore.append([gtk.STOCK_FILE, False, item, st, status, statinfo.st_size, self._format_size(statinfo.st_size), statinfo.st_mtime, self._format_date(statinfo.st_mtime)])