SF.net SVN: geany-plugins:[181] trunk/geanyvc

yurand at users.sourceforge.net yurand at xxxxx
Fri Sep 19 21:30:58 UTC 2008


Revision: 181
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=181&view=rev
Author:   yurand
Date:     2008-09-19 21:30:57 +0000 (Fri, 19 Sep 2008)

Log Message:
-----------
VC: implemented get_base_dir() for svn, cvs, svk

Modified Paths:
--------------
    trunk/geanyvc/vc_cvs.c
    trunk/geanyvc/vc_svk.c
    trunk/geanyvc/vc_svn.c

Modified: trunk/geanyvc/vc_cvs.c
===================================================================
--- trunk/geanyvc/vc_cvs.c	2008-09-19 21:30:12 UTC (rev 180)
+++ trunk/geanyvc/vc_cvs.c	2008-09-19 21:30:57 UTC (rev 181)
@@ -19,6 +19,8 @@
  *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include <string.h>
+
 #include "geany.h"
 #include "support.h"
 #include "plugindata.h"
@@ -103,7 +105,32 @@
 static gchar *
 get_base_dir(const gchar * path)
 {
-	return find_subdir_path(path, "CVS");
+	gchar *test_dir;
+	gchar *base;
+	gchar *base_prev = NULL;
+
+	if (g_file_test(path, G_FILE_TEST_IS_DIR))
+		base = g_strdup(path);
+	else
+		base = g_path_get_dirname(path);
+
+	do
+	{
+		test_dir = g_build_filename(base, "CVS", NULL);
+		if (!g_file_test(test_dir, G_FILE_TEST_IS_DIR))
+		{
+			g_free(test_dir);
+			break;
+		}
+		g_free(test_dir);
+		g_free(base_prev);
+		base_prev = base;
+		base = g_path_get_dirname(base);
+	}
+	while (strcmp(base, base_prev) != 0);
+
+	g_free(base);
+	return base_prev;
 }
 
 static gboolean

Modified: trunk/geanyvc/vc_svk.c
===================================================================
--- trunk/geanyvc/vc_svk.c	2008-09-19 21:30:12 UTC (rev 180)
+++ trunk/geanyvc/vc_svk.c	2008-09-19 21:30:57 UTC (rev 181)
@@ -111,7 +111,7 @@
 get_base_dir(const gchar * path)
 {
 	// NOT IMPLEMENTED
-	return NULL;
+	return g_path_get_dirname(path);
 }
 
 static gboolean

Modified: trunk/geanyvc/vc_svn.c
===================================================================
--- trunk/geanyvc/vc_svn.c	2008-09-19 21:30:12 UTC (rev 180)
+++ trunk/geanyvc/vc_svn.c	2008-09-19 21:30:57 UTC (rev 181)
@@ -110,8 +110,54 @@
 static gchar *
 get_base_dir(const gchar * path)
 {
-	// NOT IMPLEMENTED
-	return find_subdir_path(path, ".svn");
+	gchar *test_dir;
+	gchar *base;
+	gchar *base_prev = NULL;
+
+	if (g_file_test(path, G_FILE_TEST_IS_DIR))
+		base = g_strdup(path);
+	else
+		base = g_path_get_dirname(path);
+
+	do
+	{
+		test_dir = g_build_filename(base, ".svn", NULL);
+		if (!g_file_test(test_dir, G_FILE_TEST_IS_DIR))
+		{
+			g_free(test_dir);
+			break;
+		}
+		g_free(test_dir);
+		g_free(base_prev);
+		base_prev = base;
+		base = g_path_get_dirname(base);
+
+		// check for svn layout
+		test_dir = g_build_filename(base, "trunk", NULL);
+		if (!g_file_test(test_dir, G_FILE_TEST_IS_DIR))
+		{
+			g_free(test_dir);
+			continue;
+		}
+		setptr(test_dir, g_build_filename(base, "branches", NULL));
+		if (!g_file_test(test_dir, G_FILE_TEST_IS_DIR))
+		{
+			g_free(test_dir);
+			continue;
+		}
+		setptr(test_dir, g_build_filename(base, "tags", NULL));
+		if (!g_file_test(test_dir, G_FILE_TEST_IS_DIR))
+		{
+			g_free(test_dir);
+			continue;
+		}
+		g_free(test_dir);
+		break;
+	}
+	while (strcmp(base, base_prev) != 0);
+
+	g_free(base);
+	return base_prev;
 }
 
 static gboolean


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list