diff --git a/src/plugins/cvs.c b/src/plugins/cvs.c index a2ff1ab..7d38cc1 100644 --- a/src/plugins/cvs.c +++ b/src/plugins/cvs.c @@ -1,5 +1,5 @@ /* $Id$ */ -/* Copyright (c) 2012 Pierre Pronchery */ +/* Copyright (c) 2011-2012 Pierre Pronchery */ /* This file is part of DeforaOS Desktop Browser */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -106,6 +106,7 @@ static void _cvs_task_close_channel(CVSTask * task, GIOChannel * channel); /* callbacks */ static void _cvs_on_add(gpointer data); +static void _cvs_on_annotate(gpointer data); static void _cvs_on_commit(gpointer data); static void _cvs_on_diff(gpointer data); static void _cvs_on_log(gpointer data); @@ -183,6 +184,9 @@ static CVS * _cvs_init(BrowserPluginHelper * helper) widget = _init_button(bgroup, GTK_STOCK_INDEX, _("Request diff"), G_CALLBACK(_cvs_on_diff), cvs); gtk_box_pack_start(GTK_BOX(cvs->directory), widget, FALSE, TRUE, 0); + widget = _init_button(bgroup, GTK_STOCK_INDEX, _("Annotate"), + G_CALLBACK(_cvs_on_annotate), cvs); + gtk_box_pack_start(GTK_BOX(cvs->directory), widget, FALSE, TRUE, 0); widget = _init_button(bgroup, GTK_STOCK_INDEX, _("View log"), G_CALLBACK(_cvs_on_log), cvs); gtk_box_pack_start(GTK_BOX(cvs->directory), widget, FALSE, TRUE, 0); @@ -203,6 +207,9 @@ static CVS * _cvs_init(BrowserPluginHelper * helper) widget = _init_button(bgroup, GTK_STOCK_INDEX, _("Request diff"), G_CALLBACK(_cvs_on_diff), cvs); gtk_box_pack_start(GTK_BOX(cvs->file), widget, FALSE, TRUE, 0); + widget = _init_button(bgroup, GTK_STOCK_INDEX, _("Annotate"), + G_CALLBACK(_cvs_on_annotate), cvs); + gtk_box_pack_start(GTK_BOX(cvs->file), widget, FALSE, TRUE, 0); widget = _init_button(bgroup, GTK_STOCK_INDEX, _("View log"), G_CALLBACK(_cvs_on_log), cvs); gtk_box_pack_start(GTK_BOX(cvs->file), widget, FALSE, TRUE, 0); @@ -686,6 +693,28 @@ static gboolean _add_is_binary(char const * type) } +/* cvs_on_annotate */ +static void _cvs_on_annotate(gpointer data) +{ + CVS * cvs = data; + struct stat st; + gchar * dirname; + gchar * basename; + char * argv[] = { "cvs", "annotate", "--", NULL, NULL }; + + if(cvs->filename == NULL || lstat(cvs->filename, &st) != 0) + return; + dirname = S_ISDIR(st.st_mode) ? g_strdup(cvs->filename) + : g_path_get_dirname(cvs->filename); + basename = S_ISDIR(st.st_mode) ? NULL + : g_path_get_basename(cvs->filename); + argv[3] = basename; + _cvs_add_task(cvs, "cvs annotate", dirname, argv); + g_free(basename); + g_free(dirname); +} + + /* cvs_on_commit */ static void _cvs_on_commit(gpointer data) {