#
#
# add_file "mtn-browse.png"
# content [015b81c2dde37dcaaa342238356ecc0b2fc3240b]
#
# patch "mtn-browse"
# from [5614bde862182fcdb857be110eefe99653960567]
# to [b4a8b034eaf0b66da10a8dea20a3723bd27fd957]
#
# patch "mtn-browse.glade"
# from [a8aaa0db486372c57d0fefd51525db57d2e3a8d9]
# to [7bfd4f4265074efd078c8424b6658c838942693b]
#
# set "mtn-browse.png"
# attr "mtn:manual_merge"
# value "true"
#
============================================================
# mtn-browse.png is binary
============================================================
--- mtn-browse 5614bde862182fcdb857be110eefe99653960567
+++ mtn-browse b4a8b034eaf0b66da10a8dea20a3723bd27fd957
@@ -56,6 +56,7 @@ use Gtk2::Helper;
init Gtk2;
use Gtk2::GladeXML;
use Gtk2::Helper;
+use Gtk2::Pango;
use Gtk2::SourceView;
use IPC::Open3;
use Monotone::AutomateStdio;
@@ -69,27 +70,31 @@ use Data::Dumper;
# Constants used to represent the different groups of widgets.
-use constant BRANCH => 0x01;
-use constant DIRECTORY => 0x02;
-use constant DIRECTORY_VIEW => 0x04;
-use constant DISPLAY_OF_FILE => 0x08;
-use constant FILE => 0x10;
-use constant REVISION => 0x20;
-use constant REVISION_LIST => 0x02;
+use constant BRANCH => 0x01;
+use constant DIRECTORY => 0x02;
+use constant DIRECTORY_VIEW => 0x04;
+use constant DISPLAY_OF_FILE => 0x08;
+use constant FILE => 0x10;
+use constant REVISION => 0x20;
+use constant REVISION_LIST => 0x02;
+use constant REVISION_DETAILS => 0x04;
# Constants used to represent the different state changes. Read this as
# `what has just been changed' => `what needs to be updated'.
-use constant BRANCH_CHANGED => (REVISION | DIRECTORY | DIRECTORY_VIEW
- | FILE | DISPLAY_OF_FILE);
-use constant DATABASE_CHANGED => 0xff;
-use constant DIRECTORY_CHANGED => (DIRECTORY_VIEW | FILE
- | DISPLAY_OF_FILE);
-use constant DISPLAY_OF_FILE_CHANGED => 0x00;
-use constant FILE_CHANGED => (DISPLAY_OF_FILE);
-use constant NEW_FIND => 0xff;
-use constant REVISION_CHANGED => (DIRECTORY | DIRECTORY_VIEW | FILE
- | DISPLAY_OF_FILE);
+use constant BRANCH_CHANGED => (REVISION | DIRECTORY
+ | DIRECTORY_VIEW | FILE
+ | DISPLAY_OF_FILE);
+use constant DATABASE_CHANGED => 0xff;
+use constant DIRECTORY_CHANGED => (DIRECTORY_VIEW | FILE
+ | DISPLAY_OF_FILE);
+use constant DISPLAY_OF_FILE_CHANGED => 0x00;
+use constant FILE_CHANGED => (DISPLAY_OF_FILE);
+use constant NEW_FIND => 0xff;
+use constant REVISION_CHANGED => (DIRECTORY | REVISION_LIST
+ | DIRECTORY_VIEW | FILE
+ | DISPLAY_OF_FILE);
+use constant SELECTED_REVISION_CHANGED => (REVISION_DETAILS);
# Constants for the columns within the manifest ListStore widget.
@@ -162,10 +167,14 @@ my @browsers;
my @browsers;
-# The advanced find management record.
+# The advanced find window management record.
my $advanced_find;
+# The pixmap for the application's icon.
+
+my $app_icon;
+
# The tooltips widget.
my $tooltips;
@@ -187,13 +196,16 @@ sub make_busy($$);
sub get_revision_ids($$);
sub gtk2_update();
sub make_busy($$);
-sub manifest_treeview_cursor_changed_cb($$);
-sub manifest_treeview_row_activated_cb($$$$);
+sub manifest_browser_treeview_cursor_changed_cb($$);
+sub manifest_browser_treeview_row_activated_cb($$$$);
sub mtn_error_handler($$);
sub new_browser_instance();
+sub revisions_treeview_cursor_changed_cb($$);
+sub revisions_treeview_row_activated_cb($$$$);
sub set_label_value($$);
sub setup_sigchld_handler($);
sub sigchld_handler();
+sub simple_query_radiobutton_toggled_cb($$);
sub update_advanced_find_state($$);
sub update_browser_state($$);
#
@@ -219,6 +231,7 @@ sub update_browser_state($$);
\&mtn_error_handler);
setup_sigchld_handler(\&sigchld_handler);
$tooltips = Gtk2::Tooltips->new();
+ $app_icon = Gtk2::Gdk::Pixbuf->new_from_file("../mtn-browse.png");
push(@browsers, new_browser_instance());
# Hand control over to Gtk2.
@@ -227,6 +240,15 @@ sub update_browser_state($$);
# Cleanup.
+ if (defined($advanced_find))
+ {
+ $advanced_find->{window}->destroy();
+ $advanced_find = undef;
+ }
+ foreach my $browser (@browsers)
+ {
+ $browser->{window}->destroy();
+ }
Gnome2::VFS->shutdown();
$SIG{CHLD} = "IGNORE";
@browsers = ();
@@ -290,6 +312,7 @@ sub new_browser_instance()
# Get the widgets that we are interested in.
$browser->{window} = $browser->{glade}->get_widget("main_window");
+ $browser->{window}->set_icon($app_icon);
$browser->{appbar} = $browser->{glade}->get_widget("appbar");
$browser->{branch_combo} =
$browser->{glade}->get_widget("branch_comboboxentry");
@@ -787,7 +810,7 @@ sub directory_up_button_clicked_cb($$)
#
##############################################################################
#
-# Routine - manifest_treeview_cursor_changed_cb
+# Routine - manifest_browser_treeview_cursor_changed_cb
#
# Description - Callback routine called when the user selects an entry in
# the manifest treeview.
@@ -800,7 +823,7 @@ sub directory_up_button_clicked_cb($$)
-sub manifest_treeview_cursor_changed_cb($$)
+sub manifest_browser_treeview_cursor_changed_cb($$)
{
my($widget, $browser) = @_;
@@ -824,7 +847,7 @@ sub manifest_treeview_cursor_changed_cb(
# If the item is a file then display its contents, otherwise if it is a
# directory then just ignore it.
- if ($manifest_entry->{type} eq "file")
+ if (defined($manifest_entry) && $manifest_entry->{type} eq "file")
{
$browser->{file_being_viewed} = {short_name => $short_name,
manifest_entry => $manifest_entry};
@@ -836,7 +859,7 @@ sub manifest_treeview_cursor_changed_cb(
#
##############################################################################
#
-# Routine - manifest_treeview_row_activated_cb
+# Routine - manifest_browser_treeview_row_activated_cb
#
# Description - Callback routine called when the user double clicks on an
# entry in the manifest treeview.
@@ -854,7 +877,7 @@ sub manifest_treeview_cursor_changed_cb(
-sub manifest_treeview_row_activated_cb($$$$)
+sub manifest_browser_treeview_row_activated_cb($$$$)
{
my($widget, $tree_path, $tree_view_column, $browser) = @_;
@@ -878,7 +901,7 @@ sub manifest_treeview_row_activated_cb($
# If the item is a directory then change to it, otherwise if it is a file
# then just ignore it.
- if ($manifest_entry->{type} eq "directory")
+ if (defined($manifest_entry) && $manifest_entry->{type} eq "directory")
{
$browser->{directory_combo_details}->{value} = $manifest_entry->{name};
$browser->{directory_combo_details}->{completed} = 1;
@@ -892,6 +915,153 @@ sub manifest_treeview_row_activated_cb($
#
##############################################################################
#
+# Routine - simple_query_radiobutton_toggled_cb
+#
+# Description - Callback routine called when the user changes the advanced
+# find mode radio button.
+#
+# Data - $widget : The widget object that received the
+# signal.
+# $advanced_find : The advanced find dialog window instance
+# that is associated with this widget.
+#
+##############################################################################
+
+
+
+sub simple_query_radiobutton_toggled_cb($$)
+{
+
+ my($widget, $advanced_find) = @_;
+
+ my($len,
+ $value);
+
+ return if ($advanced_find->{in_cb});
+ local $advanced_find->{in_cb} = 1;
+
+ # Simply enable the relevant find widgets depending upon whether simple or
+ # advanced mode is selected.
+
+ if ($advanced_find->{simple_query_radiobutton}->get_active())
+ {
+ $advanced_find->{simple_frame}->set_sensitive(TRUE);
+ $advanced_find->{advanced_frame}->set_sensitive(FALSE);
+ }
+ else
+ {
+ $advanced_find->{simple_frame}->set_sensitive(FALSE);
+ $advanced_find->{advanced_frame}->set_sensitive(TRUE);
+ }
+
+}
+#
+##############################################################################
+#
+# Routine - revisions_treeview_cursor_changed_cb
+#
+# Description - Callback routine called when the user selects an entry in
+# the advanced find's revisions treeview.
+#
+# Data - $widget : The widget object that received the
+# signal.
+# $advanced_find : The advanced find dialog window instance
+# that is associated with this widget.
+#
+##############################################################################
+
+
+
+sub revisions_treeview_cursor_changed_cb($$)
+{
+
+ my($widget, $advanced_find) = @_;
+
+ my $revision_id;
+
+ return if ($advanced_find->{in_cb});
+ local $advanced_find->{in_cb} = 1;
+
+ # Get the selected revision id.
+
+ $widget->get_selection()->selected_foreach
+ (sub
+ {
+ my($model, $path, $iter) = @_;
+ $revision_id = $model->get($iter, 0);
+ });
+
+ if (defined($revision_id))
+ {
+ $advanced_find->{revisions_treeview_details}->{value} = $revision_id;
+ $advanced_find->{appbar}->clear_stack();
+ &{$advanced_find->{update_handler}}($advanced_find,
+ SELECTED_REVISION_CHANGED);
+ }
+
+}
+#
+##############################################################################
+#
+# Routine - revisions_treeview_row_activated_cb
+#
+# Description - Callback routine called when the user double clicks on an
+# entry in the advanced find's revisions treeview.
+#
+# Data - $widget : The widget object that received the
+# signal.
+# $tree_path : A Gtk2::TreePath object for the
+# selected item.
+# $tree_view_column : A Gtk2::TreeViewColumn object for the
+# selected item.
+# $advanced_find : The advanced find dialog window
+# instance that is associated with this
+# widget.
+#
+##############################################################################
+
+
+
+sub revisions_treeview_row_activated_cb($$$$)
+{
+
+ my($widget, $tree_path, $tree_view_column, $advanced_find) = @_;
+
+ my($manifest_entry,
+ $short_name);
+
+ return if ($advanced_find->{in_cb});
+ local $advanced_find->{in_cb} = 1;
+
+ return;
+
+ # Get the manifest entry details for the item that was double-clicked.
+
+ $widget->get_selection()->selected_foreach
+ (sub
+ {
+ my($model, $path, $iter) = @_;
+ $short_name = $model->get($iter, MLS_NAME_COLUMN);
+ $manifest_entry = $model->get($iter, MLS_MANIFEST_ENTRY_COLUMN);
+ });
+
+ # If the item is a directory then change to it, otherwise if it is a file
+ # then just ignore it.
+
+ if ($manifest_entry->{type} eq "directory")
+ {
+ $advanced_find->{directory_combo_details}->{value} = $manifest_entry->{name};
+ $advanced_find->{directory_combo_details}->{completed} = 1;
+ $advanced_find->{directory_combo}->child()->
+ set_text($manifest_entry->{name});
+ $advanced_find->{appbar}->clear_stack();
+ &{$advanced_find->{update_handler}}($advanced_find, DIRECTORY_CHANGED);
+ }
+
+}
+#
+##############################################################################
+#
# Routine - delete_event_cb
#
# Description - Callback routine called when the used has attempted to
@@ -916,7 +1086,14 @@ sub delete_event_cb($$$)
my($widget, $event, $browser) = @_;
- return FALSE;
+ if ($browser->{in_cb})
+ {
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
}
#
@@ -1036,6 +1213,7 @@ sub create_advanced_find_window()
{
my(@branch_list,
+ $font,
$instance,
$renderer,
$tv_column);
@@ -1062,7 +1240,7 @@ sub create_advanced_find_window()
},
$instance);
- # Link in the update handler for the browser.
+ # Link in the update handler for the advanced find window.
$instance->{update_handler} = \&update_advanced_find_state;
@@ -1070,6 +1248,7 @@ sub create_advanced_find_window()
$instance->{window} =
$instance->{glade}->get_widget("advanced_find_window");
+ $instance->{window}->set_icon($app_icon);
$instance->{appbar} = $instance->{glade}->get_widget("appbar");
$instance->{simple_query_radiobutton} =
$instance->{glade}->get_widget("simple_query_radiobutton");
@@ -1087,8 +1266,8 @@ sub create_advanced_find_window()
$instance->{glade}->get_widget("date_dateedit");
$instance->{revisions_treeview} =
$instance->{glade}->get_widget("revisions_treeview");
- $instance->{details_treeview} =
- $instance->{glade}->get_widget("details_treeview");
+ $instance->{details_textview} =
+ $instance->{glade}->get_widget("details_textview");
$instance->{details_scrolledwindow} =
$instance->{glade}->get_widget("details_scrolledwindow");
$instance->{selected_branch_label} =
@@ -1100,7 +1279,9 @@ sub create_advanced_find_window()
# Setup the advanced find window deletion handlers.
$instance->{window}->signal_connect
- ("delete_event", sub { $_[2]->{done} = 1; return TRUE; }, $instance);
+ ("delete_event",
+ sub { $_[2]->{done} = 1 unless ($_[2]->{in_cb}); return TRUE; },
+ $instance);
$instance->{glade}->get_widget("cancel_button")->signal_connect
("clicked", sub { $_[1]->{done} = 1; }, $instance);
@@ -1143,43 +1324,16 @@ sub create_advanced_find_window()
# Setup the revision details viewer.
- $instance->{details_liststore} = Gtk2::ListStore->new("Glib::String",
- "Glib::String",
- "Glib::String");
- $instance->{details_treeview}->set_model($instance->{details_liststore});
+ $instance->{details_buffer} = $instance->{details_textview}->get_buffer();
+ $instance->{details_buffer}->create_tag("bold",
+ weight => PANGO_WEIGHT_BOLD);
+ $instance->{details_buffer}->create_tag("italics", style => "italic");
+ $instance->{details_buffer}->create_tag("bold-italics",
+ weight => PANGO_WEIGHT_BOLD,
+ style => "italic");
+ $font = Gtk2::Pango::FontDescription->from_string("monospace 10");
+ $instance->{details_textview}->modify_font($font) if (defined($font));
- $tv_column = Gtk2::TreeViewColumn->new();
- $tv_column->set_resizable(FALSE);
- $tv_column->set_sizing("fixed");
- $tv_column->set_fixed_width(30);
- $tv_column->set_sort_column_id(DLS_ICON_COLUMN);
- $renderer = Gtk2::CellRendererPixbuf->new();
- $tv_column->pack_start($renderer, TRUE);
- $tv_column->set_attributes($renderer, "stock-id" => DLS_ICON_COLUMN);
- $instance->{details_treeview}->append_column($tv_column);
-
- $tv_column = Gtk2::TreeViewColumn->new();
- $tv_column->set_title("Cert Name");
- $tv_column->set_resizable(TRUE);
- $tv_column->set_sizing("grow-only");
- $tv_column->set_sort_column_id(DLS_NAME_COLUMN);
- $renderer = Gtk2::CellRendererText->new();
- $tv_column->pack_start($renderer, FALSE);
- $tv_column->set_attributes($renderer, "text" => DLS_NAME_COLUMN);
- $instance->{details_treeview}->append_column($tv_column);
-
- $tv_column = Gtk2::TreeViewColumn->new();
- $tv_column->set_title("Value");
- $tv_column->set_resizable(TRUE);
- $tv_column->set_sizing("grow-only");
- $tv_column->set_sort_column_id(DLS_VALUE_COLUMN);
- $renderer = Gtk2::CellRendererText->new();
- $tv_column->pack_start($renderer, FALSE);
- $tv_column->set_attributes($renderer, "text" => DLS_VALUE_COLUMN);
- $instance->{details_treeview}->append_column($tv_column);
-
- $instance->{details_treeview}->set_search_column(DLS_VALUE_COLUMN);
-
return $instance;
}
@@ -1393,8 +1547,11 @@ sub update_browser_state($$)
{
$author = $cert->{value}
if ($cert->{name} eq "author");
- $change_log = $cert->{value}
- if ($cert->{name} eq "changelog");
+ if ($cert->{name} eq "changelog")
+ {
+ $change_log = $cert->{value};
+ $change_log =~ s/\s+$//os;
+ }
}
set_label_value($browser->{revision_id_label},
$revision_ids[0]);
@@ -1938,6 +2095,7 @@ sub update_advanced_find_state($$)
# Reset the revisions tree view.
$advanced_find->{revisions_liststore}->clear();
+ $advanced_find->{revisions_treeview_details}->{value} = "";
# Get the list of matching revisions.
@@ -1970,317 +2128,155 @@ sub update_advanced_find_state($$)
}
- # The list of displayed revisions has changed.
+ # The selected revision has changed.
- if ($changed && 1 == 0)
+ if ($changed & REVISION_DETAILS)
{
- my($author,
- @certs_list,
- $counter,
- @directory_entry_list,
- $last_update,
- @revision_ids,
- @revision_list,
- $taking_our_time);
-
- # Reset the manifest tree view.
-
- $advanced_find->{revisions_liststore}->clear();
-
- # Get the contents of the new directory.
-
- if ($advanced_find->{directory_combo_details}->{completed}
- || $advanced_find->{directory_combo_details}->{value} eq "")
+ $advanced_find->{details_buffer}->set_text("");
+ if ($advanced_find->{revisions_treeview_details}->{value} ne "")
{
- get_dir_contents($advanced_find->{directory_combo_details}->{value},
- $advanced_find->{manifest},
- address@hidden);
- }
- # Disable the directory up button if we are already at the top level,
- # otherwise make sure it is enabled.
+ my($buf,
+ @certs_list,
+ $change_log,
+ $manifest_id,
+ @parent_revision_ids,
+ %revision_data,
+ @revision_details,
+ %seen,
+ @unique);
+ my @types =
+ ("Added", "Removed", "Changed", "Renamed", "Attributes");
- $advanced_find->{directory_up_button}->set_sensitive
- (($advanced_find->{directory_combo_details}->{value} eq "")
- ? FALSE : TRUE);
+ # Get all the information about the selected revision.
- # Update the directory tree view.
+ $advanced_find->{mtn}->certs
+ (address@hidden,
+ $advanced_find->{revisions_treeview_details}->{value});
+ $advanced_find->{mtn}->get_revision
+ (address@hidden,
+ $advanced_find->{revisions_treeview_details}->{value});
- $advanced_find->{appbar}->set_status("Populating file details");
- $counter = 1;
- $taking_our_time = 0;
- get_revision_ids($advanced_find, address@hidden);
- foreach my $item (@directory_entry_list)
- {
+ # Pretty print it into the details buffer.
- # Get the latest modification time and the author if the entry is a
- # file (caching the result in the manifest for future reference if
- # we have to work it out).
-
- if ($item->{manifest_entry}->{type} eq "file")
+ $buf = $advanced_find->{details_buffer};
+ foreach my $cert (@certs_list)
{
- if (! exists($item->{manifest_entry}->{author}))
+ if ($cert->{name} eq "changelog")
{
- $taking_our_time = 1;
- $advanced_find->{mtn}->get_content_changed
- (address@hidden,
- $revision_ids[0],
- $item->{manifest_entry}->{name});
- $item->{manifest_entry}->{last_changed_revision} =
- $revision_list[0];
- $advanced_find->{mtn}->certs(address@hidden, $revision_list[0]);
- $author = $last_update = "";
- foreach my $cert (@certs_list)
- {
- if ($cert->{name} eq "author")
- {
- $author = $cert->{value};
- $item->{manifest_entry}->{author} = $author;
- }
- if ($cert->{name} eq "date")
- {
- $last_update = $cert->{value};
- $last_update =~ s/T/ /o;
- $item->{manifest_entry}->{last_update} =
- $last_update;
- }
- last if ($author ne "" && $last_update ne "");
- }
+ $change_log = $cert->{value};
+ $change_log =~ s/\s+$//os;
}
else
{
- $author = $item->{manifest_entry}->{author};
- $last_update = $item->{manifest_entry}->{last_update};
+ $cert->{value} =~ s/T/ /o if ($cert->{name} eq "date");
+ $buf->insert_with_tags_by_name
+ ($buf->get_end_iter(),
+ sprintf("%s:\t", ucfirst($cert->{name})),
+ "bold");
+ $buf->insert($buf->get_end_iter(),
+ sprintf("%s\n", $cert->{value}));
}
}
- else
+ $buf->insert_with_tags_by_name
+ ($buf->get_end_iter(), "\nChange Log:\n", "bold");
+ $buf->insert($buf->get_end_iter(), sprintf("%s\n", $change_log));
+ $buf->insert_with_tags_by_name
+ ($buf->get_end_iter(), "\nChanges Made:\n", "bold");
+ foreach my $type (@types)
{
- $author = "";
- $last_update = "";
+ $revision_data{$type} = [];
}
-
- # Put the entry into the liststore.
-
- $advanced_find->{manifest_liststore}->
- set($advanced_find->{manifest_liststore}->append(),
- MLS_ICON_COLUMN,
- ($item->{manifest_entry}->{type} eq "directory")
- ? "gtk-open" : "gtk-file",
- MLS_NAME_COLUMN, $item->{name},
- MLS_DATE_COLUMN, $last_update,
- MLS_AUTHOR_COLUMN, $author,
- MLS_MANIFEST_ENTRY_COLUMN, $item->{manifest_entry});
-
- if ($taking_our_time)
+ foreach my $change (@revision_details)
{
- $advanced_find->{appbar}->set_progress_percentage
- ($counter / scalar(@directory_entry_list));
- gtk2_update();
- }
- ++ $counter;
-
- }
-
- $advanced_find->{manifest_treeview}->scroll_to_point(0, 0)
- if ($advanced_find->{manifest_treeview}->realized());
-
- $advanced_find->{appbar}->set_progress_percentage(0);
- $advanced_find->{appbar}->set_status("");
- gtk2_update();
-
- }
-
- # The displayed file contents has changed.
-
- if ($changed & DISPLAY_OF_FILE && 1 == 0)
- {
-
- # Load up the selected file's contents into the file viewer.
-
- if (exists($advanced_find->{file_being_viewed}->{manifest_entry}))
- {
- my $manifest_entry;
- $manifest_entry =
- $advanced_find->{file_being_viewed}->{manifest_entry};
- if ($advanced_find->{file_id_label}->get_text()
- ne $manifest_entry->{file_id})
- {
-
- my($contents,
- $lang,
- $mime_type,
- $scrolled_window);
-
- # Reset the file view buffer.
-
- $advanced_find->{file_button_vbox}->set_sensitive(TRUE);
- foreach my $widget (@{$advanced_find->{text_file_sensitive_group}})
+ if ($change->{type} eq "add_dir")
{
- $widget->set_sensitive(FALSE);
+ push(@{$revision_data{"Added"}}, $change->{name} . "/");
}
- $advanced_find->{file_view_svbuffer}->set_text("");
- $advanced_find->{file_view_svbuffer}->set("highlight", FALSE);
-
- # Get contents.
-
- $manifest_entry =
- $advanced_find->{file_being_viewed}->{manifest_entry};
- $advanced_find->{mtn}->get_file(\$contents,
- $manifest_entry->{file_id});
-
- # Try and work out the mime type, first based on contents and
- # then based on the file name extension.
-
- if (! defined($mime_type =
- Gnome2::VFS->get_mime_type_for_data($contents))
- || $mime_type eq "text/plain")
+ elsif ($change->{type} eq "add_file")
{
- my $name = $advanced_find->{file_being_viewed}->{short_name};
- foreach my $item (@text_mime_types)
- {
- if ($name =~ m/$item->{pattern}/)
- {
- $mime_type = $item->{type};
- last;
- }
- }
+ push(@{$revision_data{"Added"}}, $change->{name});
}
-
- # Override some mis-identified types.
-
- $mime_type = "image/svg+xml"
- if ($mime_type eq "text/xml"
- && $advanced_find->{file_being_viewed}->{short_name}
- =~ m/.*\.svg$/o);
-
- # If it's image data then attempt to render it.
-
- if ($mime_type =~ m/^image\/.+$/o)
+ elsif ($change->{type} eq "delete")
{
- eval
- {
- my $loader = Gtk2::Gdk::PixbufLoader->new();
- $loader->write($contents);
- $loader->close();
- $advanced_find->{file_view_svbuffer}->insert_pixbuf
- ($advanced_find->{file_view_svbuffer}->get_start_iter(),
- $loader->get_pixbuf());
- };
- $advanced_find->{file_view_svbuffer}->
- set_text("<" . $mime_type . ">\n") if ($@ ne "");
+ push(@{$revision_data{"Removed"}}, $change->{name});
}
- else
+ elsif ($change->{type} eq "patch")
{
-
- my $ok_to_render = 0;
-
- # Attempt to syntax highlight the file if it looks safe.
-
- if ($mime_type =~ m/^application\/.+$/o)
- {
- my $part;
- ($part) = ($mime_type =~ m/^application\/(.+)$/o);
- foreach my $item (@text_viewable_app_mime_types)
- {
- if ($part eq $item)
- {
- $ok_to_render = 1;
- last;
- }
- }
- }
-
- if ($mime_type =~ m/^text\/.+$/o || $ok_to_render)
- {
- if (defined($lang = $advanced_find->{file_view_svlangmgr}->
- get_language_from_mime_type($mime_type)))
- {
- $advanced_find->{file_view_svbuffer}->
- set("highlight", TRUE);
- $advanced_find->{file_view_svbuffer}->
- set_language($lang);
- }
-
- # Load in the contents.
-
- $advanced_find->{file_view_svbuffer}->set_text($contents);
- foreach my $widget
- (@{$advanced_find->{text_file_sensitive_group}})
- {
- $widget->set_sensitive(TRUE);
- }
- }
- else
- {
- $advanced_find->{file_view_svbuffer}->
- set("highlight", FALSE);
- $advanced_find->{file_view_svbuffer}->
- set_text("<" . $mime_type . ">\n");
- }
-
+ push(@{$revision_data{"Changed"}}, $change->{name});
}
-
- # Scroll back up to the top left.
-
- if ($advanced_find->{file_view_scrolledwindow}->realized())
+ elsif ($change->{type} eq "rename")
{
- $advanced_find->{file_view_scrolledwindow}->
- get_vadjustment()->set_value(0);
- $advanced_find->{file_view_scrolledwindow}->
- get_hadjustment()->set_value(0);
+ push(@{$revision_data{"Renamed"}},
+ $change->{from_name} . " -> " . $change->{to_name});
}
-
- # Update the file details labels.
-
- if (! exists($manifest_entry->{last_changed_revision}))
+ elsif ($change->{type} eq "clear")
{
- my(@certs_list,
- @revision_ids,
- @revision_list);
- get_revision_ids($advanced_find, address@hidden);
- $advanced_find->{mtn}->
- get_content_changed(address@hidden,
- $revision_ids[0],
- $manifest_entry->{name});
- $manifest_entry->{last_changed_revision} =
- $revision_list[0];
- $advanced_find->{mtn}->certs(address@hidden, $revision_list[0]);
- foreach my $cert (@certs_list)
+ push(@{$revision_data{"Attributes"}},
+ sprintf("%s: %s was cleared",
+ $change->{name},
+ $change->{attribute}));
+ }
+ elsif ($change->{type} eq "clear" || $change->{type} eq "set")
+ {
+ push(@{$revision_data{"Attributes"}},
+ sprintf("%s: %s = %s",
+ $change->{name},
+ $change->{attribute},
+ $change->{value}));
+ }
+ elsif ($change->{type} eq "old_revision")
+ {
+ push(@parent_revision_ids, $change->{revision_id});
+ }
+ elsif ($change->{type} eq "new_manifest")
+ {
+ $manifest_id = $change->{manifest_id};
+ }
+ }
+ foreach my $type (@types)
+ {
+ if (scalar(@{$revision_data{$type}}) > 0)
+ {
+ $buf->insert_with_tags_by_name
+ ($buf->get_end_iter(),
+ " " . $type . ":\n", "italics");
+ %seen = ();
+ @unique = sort(grep { ! $seen{$_} ++ }
+ @{$revision_data{$type}});
+ foreach my $line (@unique)
{
- if ($cert->{name} eq "date")
- {
- my $last_update;
- $last_update = $cert->{value};
- $last_update =~ s/T/ /o;
- $manifest_entry->{last_update} = $last_update;
- last;
- }
+ $buf->insert($buf->get_end_iter(),
+ "\t" . $line . "\n");
}
}
- set_label_value($advanced_find->{file_name_label},
- $manifest_entry->{name});
- set_label_value($advanced_find->{file_id_label},
- $manifest_entry->{file_id});
- set_label_value($advanced_find->{last_update_label},
- $manifest_entry->{last_update});
- set_label_value($advanced_find->{file_revision_id_label},
- $manifest_entry->{last_changed_revision});
}
+ $buf->insert_with_tags_by_name
+ ($buf->get_end_iter(), "\nParent revision id(s):\t", "bold");
+ $buf->insert($buf->get_end_iter(),
+ join(" ", @parent_revision_ids) . "\n");
+ $buf->insert_with_tags_by_name
+ ($buf->get_end_iter(), "Manifest id:\t\t", "bold");
+ $buf->insert($buf->get_end_iter(), $manifest_id);
+
+ # Scroll back up to the top left.
+
+ if ($advanced_find->{details_scrolledwindow}->realized())
+ {
+ $advanced_find->{details_scrolledwindow}->get_vadjustment()->
+ set_value(0);
+ $advanced_find->{details_scrolledwindow}->get_hadjustment()->
+ set_value(0);
+ }
+
+ set_label_value($advanced_find->{selected_revision_label},
+ $advanced_find->{revisions_treeview_details}->
+ {value});
}
else
{
-
- # Reset the file view buffer.
-
- $advanced_find->{file_button_vbox}->set_sensitive(FALSE);
- $advanced_find->{file_view_svbuffer}->set_text("");
- $advanced_find->{file_view_svbuffer}->set("highlight", FALSE);
- set_label_value($advanced_find->{file_name_label}, "");
- set_label_value($advanced_find->{file_id_label}, "");
- set_label_value($advanced_find->{last_update_label}, "");
- set_label_value($advanced_find->{file_revision_id_label}, "");
-
+ set_label_value($advanced_find->{selected_revision_label}, "");
}
}
============================================================
--- mtn-browse.glade a8aaa0db486372c57d0fefd51525db57d2e3a8d9
+++ mtn-browse.glade 7bfd4f4265074efd078c8424b6658c838942693b
@@ -734,8 +734,6 @@ with another revision
- 25
- 25
True
Go up one directory level
True
@@ -786,8 +784,8 @@ with another revision
False
True
True
-
-
+
+
@@ -2020,6 +2018,8 @@ with another version
GTK_WINDOW_TOPLEVEL
GTK_WIN_POS_CENTER_ON_PARENT
True
+ 750
+ 550
True
False
True
@@ -2658,6 +2658,8 @@ Separator
False
False
True
+
+
@@ -2720,13 +2722,22 @@ Separator
GTK_CORNER_TOP_LEFT
-
+
True
True
- True
- False
- True
- True
+ False
+ False
+ True
+ GTK_JUSTIFY_LEFT
+ GTK_WRAP_NONE
+ True
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+