1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3  * anjuta
4  * Copyright (C) James Liggett 2008 <jrliggett@cox.net>
5  *
6  * anjuta is free software.
7  *
8  * You may redistribute it and/or modify it under the terms of the
9  * GNU General Public License, as published by the Free Software
10  * Foundation; either version 2 of the License, or (at your option)
11  * any later version.
12  *
13  * anjuta is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with anjuta.  If not, write to:
20  * 	The Free Software Foundation, Inc.,
21  * 	51 Franklin Street, Fifth Floor
22  * 	Boston, MA  02110-1301, USA.
23  */
24 
25 #include "git-add-command.h"
26 
27 struct _GitAddCommandPriv
28 {
29 	GList *paths;
30 	gboolean force;
31 };
32 
33 G_DEFINE_TYPE (GitAddCommand, git_add_command, GIT_TYPE_COMMAND);
34 
35 static void
git_add_command_init(GitAddCommand * self)36 git_add_command_init (GitAddCommand *self)
37 {
38 	self->priv = g_new0 (GitAddCommandPriv, 1);
39 }
40 
41 static void
git_add_command_finalize(GObject * object)42 git_add_command_finalize (GObject *object)
43 {
44 	GitAddCommand *self;
45 
46 	self = GIT_ADD_COMMAND (object);
47 
48 	anjuta_util_glist_strings_free (self->priv->paths);
49 	g_free (self->priv);
50 
51 	G_OBJECT_CLASS (git_add_command_parent_class)->finalize (object);
52 }
53 
54 static guint
git_add_command_run(AnjutaCommand * command)55 git_add_command_run (AnjutaCommand *command)
56 {
57 	GitAddCommand *self;
58 
59 	self = GIT_ADD_COMMAND (command);
60 
61 	git_command_add_arg (GIT_COMMAND (command), "add");
62 
63 	if (self->priv->force)
64 		git_command_add_arg (GIT_COMMAND (command), "-f");
65 
66 	git_command_add_list_to_args (GIT_COMMAND (command), self->priv->paths);
67 
68 	return 0;
69 }
70 
71 static void
git_add_command_class_init(GitAddCommandClass * klass)72 git_add_command_class_init (GitAddCommandClass *klass)
73 {
74 	GObjectClass* object_class = G_OBJECT_CLASS (klass);
75 	AnjutaCommandClass* command_class = ANJUTA_COMMAND_CLASS (klass);
76 
77 	object_class->finalize = git_add_command_finalize;
78 	command_class->run = git_add_command_run;
79 }
80 
81 
82 GitAddCommand *
git_add_command_new_path(const gchar * working_directory,const gchar * path,gboolean force)83 git_add_command_new_path (const gchar *working_directory, const gchar *path,
84 						  gboolean force)
85 {
86 	GitAddCommand *self;
87 
88 	self = g_object_new (GIT_TYPE_ADD_COMMAND,
89 						 "working-directory", working_directory,
90 						 NULL);
91 
92 	self->priv->paths = g_list_append (self->priv->paths, g_strdup (path));
93 	self->priv->force = force;
94 
95 	return self;
96 }
97 
98 
99 GitAddCommand *
git_add_command_new_list(const gchar * working_directory,GList * path_list,gboolean force)100 git_add_command_new_list (const gchar *working_directory, GList *path_list,
101 						  gboolean force)
102 {
103 	GitAddCommand *self;
104 
105 	self = g_object_new (GIT_TYPE_ADD_COMMAND,
106 						 "working-directory", working_directory,
107 						 NULL);
108 
109 	self->priv->paths = git_command_copy_string_list (path_list);
110 	self->priv->force = force;
111 
112 	return self;
113 }
114