2 * Copyright 2007 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
3 * Copyright 2007 Enrico Tröger <enrico.troeger@uvena.de>
4 * Copyright 2007 Nick Treleaven <nick.treleaven@btinternet.com>
5 * Copyright 2007 Yura Siamashka <yurand2@gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 #include "plugindata.h"
26 #include "filetypes.h"
29 #include "pluginmacros.h"
33 static const gchar
*SVK_CMD_DIFF_FILE
[] = { "svk", "diff", FILENAME
, NULL
};
34 static const gchar
*SVK_CMD_DIFF_DIR
[] = { "svk", "diff", DIRNAME
, NULL
};
35 static const gchar
*SVK_CMD_REVERT_FILE
[] = { "svk", "revert", BASE_FILENAME
, NULL
};
36 static const gchar
*SVK_CMD_STATUS
[] = { "svk", "status", NULL
};
37 static const gchar
*SVK_CMD_ADD
[] = { "svk", "add", BASE_FILENAME
, NULL
};
38 static const gchar
*SVK_CMD_REMOVE
[] = { "svk", "remove", BASE_FILENAME
, NULL
};
39 static const gchar
*SVK_CMD_LOG_FILE
[] = { "svk", "log", BASE_FILENAME
, NULL
};
40 static const gchar
*SVK_CMD_LOG_DIR
[] = { "svk", "log", DIRNAME
, NULL
};
41 static const gchar
*SVK_CMD_COMMIT
[] = { "svk", "commit", "-m", MESSAGE
, FILE_LIST
, NULL
};
42 static const gchar
*SVK_CMD_BLAME
[] = { "svk", "blame", BASE_FILENAME
, NULL
};
44 static void *SVK_COMMANDS
[] = { SVK_CMD_DIFF_FILE
,
57 in_vc_svk(const gchar
* filename
)
60 gchar
*argv
[] = { "svk", "info", NULL
, NULL
};
62 gchar
*base_name
= NULL
;
66 if (g_file_test(filename
, G_FILE_TEST_IS_DIR
))
68 g_spawn_sync(filename
, argv
, NULL
,
69 G_SPAWN_SEARCH_PATH
| G_SPAWN_STDERR_TO_DEV_NULL
|
70 G_SPAWN_STDOUT_TO_DEV_NULL
, NULL
, NULL
, NULL
, NULL
, &exit_code
, NULL
);
74 base_name
= g_path_get_basename(filename
);
75 dir
= g_path_get_dirname(filename
);
79 g_spawn_sync(dir
, argv
, NULL
,
80 G_SPAWN_SEARCH_PATH
| G_SPAWN_STDERR_TO_DEV_NULL
|
81 G_SPAWN_STDOUT_TO_DEV_NULL
, NULL
, NULL
, NULL
, NULL
, &exit_code
, NULL
);
95 get_commit_files_svk(const gchar
* dir
)
106 gint pstatus
= FIRST_CHAR
;
109 const gchar
*start
= NULL
;
114 const char *argv
[] = { "svk", "status", NULL
};
116 execute_custom_command(argv
, NULL
, &txt
, NULL
, dir
, NULL
, NULL
);
126 else if (pstatus
== FIRST_CHAR
)
129 status
= FILE_STATUS_UNKNOWN
;
131 status
= FILE_STATUS_MODIFIED
;
133 status
= FILE_STATUS_DELETED
;
135 status
= FILE_STATUS_ADDED
;
136 pstatus
= SKIP_SPACE
;
138 else if (pstatus
== SKIP_SPACE
)
140 if (*p
== ' ' || *p
== '\t')
149 else if (pstatus
== FILE_NAME
)
153 if (status
!= FILE_STATUS_UNKNOWN
)
155 base_name
= g_malloc0(p
- start
+ 1);
156 memcpy(base_name
, start
, p
- start
);
157 filename
= g_build_filename(dir
, base_name
, NULL
);
159 item
= g_new(CommitItem
, 1);
160 item
->status
= status
;
161 item
->path
= filename
;
162 ret
= g_slist_append(ret
, item
);
164 pstatus
= FIRST_CHAR
;
174 VC_RECORD VC_SVK
= { SVK_COMMANDS
, NO_ENV
, "svk", in_vc_svk
, get_commit_files_svk
};