# # # patch "mtn-browse" # from [ba78e71877d105f0484eb1d505cad36eb161d451] # to [4a511ca4c8b4a378638344f77104407a4b3a5f45] # # patch "mtn-browse.glade" # from [311b38cbc93fdeaee476ea3cd17d0350da1c37a7] # to [fb6802ab22bb5380029fa6b296cb3411d47ca826] # ============================================================ --- mtn-browse ba78e71877d105f0484eb1d505cad36eb161d451 +++ mtn-browse 4a511ca4c8b4a378638344f77104407a4b3a5f45 @@ -277,7 +277,40 @@ sub new_browser_instance() $browser->{glade}->get_widget("manifest_browser_treeview"); $browser->{file_view_scrolledwindow} = $browser->{glade}->get_widget("file_view_scrolledwindow"); + $browser->{file_name_label} = + $browser->{glade}->get_widget("file_name_value_label"); + $browser->{file_id_label} = + $browser->{glade}->get_widget("file_id_value_label"); + $browser->{last_update_label} = + $browser->{glade}->get_widget("last_update_value_label"); + $browser->{file_revision_id_label} = + $browser->{glade}->get_widget("file_revision_id_value_label"); + $browser->{file_button_vbox} = + $browser->{glade}->get_widget("file_button_vbox"); + $browser->{database_name_label} = + $browser->{glade}->get_widget("database_name_value_label"); + $browser->{revision_id_label} = + $browser->{glade}->get_widget("revision_id_value_label"); + $browser->{author_label} = + $browser->{glade}->get_widget("author_value_label"); + $browser->{change_log_label} = + $browser->{glade}->get_widget("change_log_value_label"); + # Setup button sensitive groups. + + $browser->{text_file_sensitive_group} = (); + foreach my $item ("search_text", "annotate", "file_compare") + { + push(@{$browser->{text_file_sensitive_group}}, + $browser->{glade}->get_widget($item . "_button")); + } + $browser->{revision_sensitive_group} = (); + foreach my $item ("revision_information", "revision_compare") + { + push(@{$browser->{revision_sensitive_group}}, + $browser->{glade}->get_widget($item . "_button")); + } + # Setup the comboboxentry key release signal handlers. $browser->{branch_combo}->child()-> @@ -878,6 +911,7 @@ sub update_browser_state($$) $browser->{branch_combo_details}->{completion_cache} = {}; $browser->{branch_combo_details}->{completed} = 0; $browser->{branch_combo_details}->{value} = ""; + $browser->{database_name_label}->set_text(""); # Get the new list of branches. @@ -937,7 +971,7 @@ sub update_browser_state($$) tags(address@hidden, $browser->{branch_combo_details}->{value}); $browser->{main_appbar}->set_progress_percentage(0.5); gtk2_update(); - for my $item (@list) + foreach my $item (@list) { if (! exists($dup_list{$item->{tag}})) { @@ -999,6 +1033,9 @@ sub update_browser_state($$) $browser->{directory_combo_details}->{completed} = 0; $browser->{directory_combo_details}->{last_typed_len} = 0; $browser->{directory_combo_details}->{value} = ""; + $browser->{revision_id_label}->set_text(""); + $browser->{author_label}->set_text(""); + $browser->{change_log_label}->set_text(""); # Reset the name of the file being viewed. @@ -1022,7 +1059,7 @@ sub update_browser_state($$) . "or use the Advanced Find feature.\n" . "The matching revision ids are:", $browser->{revision_combo_details}->{value}); - for my $item (@revision_ids) + foreach my $item (@revision_ids) { $message .= "\n" . Glib::Markup::escape_text($item); } @@ -1040,8 +1077,23 @@ sub update_browser_state($$) } else { + my($author, + @certs_list, + $change_log); $browser->{mtn}->get_manifest_of(address@hidden, $revision_ids[0]); + $browser->{mtn}->certs(address@hidden, $revision_ids[0]); + $author = $change_log = ""; + foreach my $cert (@certs_list) + { + $author = $cert->{value} + if ($cert->{name} eq "author"); + $change_log = $cert->{value} + if ($cert->{name} eq "changelog"); + } + $browser->{revision_id_label}->set_text($revision_ids[0]); + $browser->{author_label}->set_text($author); + $browser->{change_log_label}->set_text($change_log); } } $browser->{manifest} = address@hidden; @@ -1076,6 +1128,11 @@ sub update_browser_state($$) $browser->{directory_combo}->child()->set_text(""); $browser->{main_appbar}->set_progress_percentage(0); $browser->{main_appbar}->set_status(""); + foreach my $widget (@{$browser->{revision_sensitive_group}}) + { + $widget-> + set_sensitive($browser->{revision_combo_details}->{completed}); + } gtk2_update(); } @@ -1124,9 +1181,9 @@ sub update_browser_state($$) foreach my $item (@directory_entry_list) { - # Get the latest modification time if the entry is a file (caching - # the result in the manifest for future reference if we have to - # work it out). + # 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") { @@ -1137,6 +1194,8 @@ sub update_browser_state($$) (address@hidden, $revision_ids[0], $item->{manifest_entry}->{name}); + $item->{manifest_entry}->{last_changed_revision} = + $revision_list[0]; $browser->{mtn}->certs(address@hidden, $revision_list[0]); $author = $last_update = ""; foreach my $cert (@certs_list) @@ -1183,9 +1242,10 @@ sub update_browser_state($$) if ($taking_our_time) { $browser->{main_appbar}->set_progress_percentage - ($counter ++ / scalar(@directory_entry_list)); + ($counter / scalar(@directory_entry_list)); gtk2_update(); } + ++ $counter; } @@ -1203,120 +1263,189 @@ sub update_browser_state($$) if ($changed & DISPLAY_OF_FILE) { - my($contents, - $lang, - $mime_type, - $scrolled_window); + # Load up the selected file's contents into the file viewer. - # Reset the file view buffer. + if (exists($browser->{file_being_viewed}->{manifest_entry})) + { + my $manifest_entry; + $manifest_entry = + $browser->{file_being_viewed}->{manifest_entry}; + if ($browser->{file_id_label}->get_text() + ne $manifest_entry->{file_id}) + { - $browser->{file_view_svbuffer}->set_text(""); - $browser->{file_view_svbuffer}->set("highlight", FALSE); + my($contents, + $lang, + $mime_type, + $scrolled_window); - # Load up the selected file's contents into the file viewer. + # Reset the file view buffer. - if (exists($browser->{file_being_viewed}->{short_name})) - { + $browser->{file_button_vbox}->set_sensitive(TRUE); + foreach my $widget (@{$browser->{text_file_sensitive_group}}) + { + $widget->set_sensitive(FALSE); + } + $browser->{file_view_svbuffer}->set_text(""); + $browser->{file_view_svbuffer}->set("highlight", FALSE); - # Get contents. + # Get contents. - $browser->{mtn}->get_file - (\$contents, - $browser->{file_being_viewed}->{manifest_entry}->{file_id}); + $manifest_entry = + $browser->{file_being_viewed}->{manifest_entry}; + $browser->{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. + # 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") - { - my $name = $browser->{file_being_viewed}->{short_name}; - foreach my $item (@text_mime_types) + if (! defined($mime_type = + Gnome2::VFS->get_mime_type_for_data($contents)) + || $mime_type eq "text/plain") { - if ($name =~ m/$item->{pattern}/) + my $name = $browser->{file_being_viewed}->{short_name}; + foreach my $item (@text_mime_types) { - $mime_type = $item->{type}; - last; + if ($name =~ m/$item->{pattern}/) + { + $mime_type = $item->{type}; + last; + } } } - } - # Override some mis-identified types. + # Override some mis-identified types. - $mime_type = "image/svg+xml" - if ($mime_type eq "text/xml" - && $browser->{file_being_viewed}->{short_name} - =~ m/.*\.svg$/o); + $mime_type = "image/svg+xml" + if ($mime_type eq "text/xml" + && $browser->{file_being_viewed}->{short_name} + =~ m/.*\.svg$/o); - # If it's image data then attempt to render it. + # If it's image data then attempt to render it. - if ($mime_type =~ m/^image\/.+$/o) - { - eval + if ($mime_type =~ m/^image\/.+$/o) { - my $loader = Gtk2::Gdk::PixbufLoader->new(); - $loader->write($contents); - $loader->close(); - $browser->{file_view_svbuffer}->insert_pixbuf - ($browser->{file_view_svbuffer}->get_start_iter(), - $loader->get_pixbuf()); - }; - $browser->{file_view_svbuffer}-> - set_text("<" . $mime_type . ">\n") if ($@ ne ""); - } - else - { + eval + { + my $loader = Gtk2::Gdk::PixbufLoader->new(); + $loader->write($contents); + $loader->close(); + $browser->{file_view_svbuffer}->insert_pixbuf + ($browser->{file_view_svbuffer}->get_start_iter(), + $loader->get_pixbuf()); + }; + $browser->{file_view_svbuffer}-> + set_text("<" . $mime_type . ">\n") if ($@ ne ""); + } + else + { - my $ok_to_render = 0; + my $ok_to_render = 0; - # Attempt to syntax highlight the file if it looks safe. + # 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 ($mime_type =~ m/^application\/.+$/o) { - if ($part eq $item) + my $part; + ($part) = ($mime_type =~ m/^application\/(.+)$/o); + foreach my $item (@text_viewable_app_mime_types) { - $ok_to_render = 1; - last; + if ($part eq $item) + { + $ok_to_render = 1; + last; + } } } - } - if ($mime_type =~ m/^text\/.+$/o || $ok_to_render) - { - if (defined($lang = $browser->{file_view_svlangmgr}-> - get_language_from_mime_type($mime_type))) + if ($mime_type =~ m/^text\/.+$/o || $ok_to_render) { - $browser->{file_view_svbuffer}->set("highlight", TRUE); - $browser->{file_view_svbuffer}->set_language($lang); + if (defined($lang = $browser->{file_view_svlangmgr}-> + get_language_from_mime_type($mime_type))) + { + $browser->{file_view_svbuffer}-> + set("highlight", TRUE); + $browser->{file_view_svbuffer}-> + set_language($lang); + } + + # Load in the contents. + + $browser->{file_view_svbuffer}->set_text($contents); + foreach my $widget + (@{$browser->{text_file_sensitive_group}}) + { + $widget->set_sensitive(TRUE); + } } + else + { + $browser->{file_view_svbuffer}-> + set("highlight", FALSE); + $browser->{file_view_svbuffer}-> + set_text("<" . $mime_type . ">\n"); + } - # Load in the contents. + } - $browser->{file_view_svbuffer}->set_text($contents); + # Scroll back up to the top left. + + if ($browser->{file_view_scrolledwindow}->realized()) + { + $browser->{file_view_scrolledwindow}-> + get_vadjustment()->set_value(0); + $browser->{file_view_scrolledwindow}-> + get_hadjustment()->set_value(0); } - else + + # Update the file details labels. + + if (! exists($manifest_entry->{last_changed_revision})) { - $browser->{file_view_svbuffer}->set("highlight", FALSE); - $browser->{file_view_svbuffer}-> - set_text("<" . $mime_type . ">\n"); + my(@certs_list, + @revision_ids, + @revision_list); + get_revision_ids($browser, address@hidden); + $browser->{mtn}-> + get_content_changed(address@hidden, + $revision_ids[0], + $manifest_entry->{name}); + $manifest_entry->{last_changed_revision} = + $revision_list[0]; + $browser->{mtn}->certs(address@hidden, $revision_list[0]); + foreach my $cert (@certs_list) + { + if ($cert->{name} eq "date") + { + my $last_update; + $last_update = $cert->{value}; + $last_update =~ s/T/ /o; + $manifest_entry->{last_update} = $last_update; + last; + } + } } - + $browser->{file_name_label}->set_text($manifest_entry->{name}); + $browser->{file_id_label}-> + set_text($manifest_entry->{file_id}); + $browser->{last_update_label}-> + set_text($manifest_entry->{last_update}); + $browser->{file_revision_id_label}-> + set_text($manifest_entry->{last_changed_revision}); } + } + else + { - # Scroll back up to the top left. + # Reset the file view buffer. - if ($browser->{file_view_scrolledwindow}->realized()) - { - $browser->{file_view_scrolledwindow}-> - get_vadjustment()->set_value(0); - $browser->{file_view_scrolledwindow}-> - get_hadjustment()->set_value(0); - } + $browser->{file_button_vbox}->set_sensitive(FALSE); + $browser->{file_view_svbuffer}->set_text(""); + $browser->{file_view_svbuffer}->set("highlight", FALSE); + $browser->{file_name_label}->set_text(""); + $browser->{file_id_label}->set_text(""); + $browser->{last_update_label}->set_text(""); + $browser->{file_revision_id_label}->set_text(""); } ============================================================ --- mtn-browse.glade 311b38cbc93fdeaee476ea3cd17d0350da1c37a7 +++ mtn-browse.glade fb6802ab22bb5380029fa6b296cb3411d47ca826 @@ -393,7 +393,7 @@ False False 0.5 - 0.5 + 0.25 0 0 @@ -453,7 +453,7 @@ False False 0.5 - 0.5 + 0.25 0 0 @@ -687,7 +687,7 @@ with another revision False False 0.5 - 0.5 + 0.25 0 0 @@ -882,7 +882,7 @@ with another revision Name of the file being displayed 1 1 - 0 0 96 10 86.4 96 + 0 0 79 10 71.1 79 0 0 17 10 15.3 17 @@ -934,7 +934,7 @@ with another revision Date of when file was last changed 1 1 - 0 0 96 10 86.4 96 + 0 0 79 10 71.1 79 0 0 17 10 15.3 17 @@ -1069,7 +1069,7 @@ updated with respect to this revision

File's unique id in database 1 1 - 0 0 101 10 90.9 101 + 0 0 84 10 75.6 84 0 0 17 10 15.3 17 @@ -1122,7 +1122,7 @@ file was last changed file was last changed 1 1 - 0 0 101 10 90.9 101 + 0 0 84 10 75.6 84 0 0 17 10 15.3 17 @@ -1330,7 +1330,7 @@ last updated with respect to this revisi True Load file contents -into an editor +into a viewer True GTK_RELIEF_NORMAL True @@ -1544,12 +1544,13 @@ with another version 0 0 True + True False False GTK_JUSTIFY_LEFT False - False + True 0 0.5 0 @@ -1594,12 +1595,13 @@ with another version 0 0 True + True False False GTK_JUSTIFY_LEFT False - False + True 0 0.5 0 @@ -1726,12 +1728,13 @@ with another version 0 0 True + True False False GTK_JUSTIFY_LEFT False - False + True 0 0.5 0 @@ -1776,12 +1779,13 @@ with another version 0 0 True + True False False GTK_JUSTIFY_LEFT False - False + True 0 0.5 0