Implement pulling
[anjuta-git-plugin.git] / plugins / git / git-pull-command.c
blob0cd002330528e60af85ff15ff79b44df1f65ec0d
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * anjuta-git
4 * Copyright (C) James Liggett 2008 <jrliggett@cox.net>
5 *
6 * anjuta-git 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.
13 * anjuta-git 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.
18 * You should have received a copy of the GNU General Public License
19 * along with anjuta-git. If not, write to:
20 * The Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor
22 * Boston, MA 02110-1301, USA.
25 #include "git-pull-command.h"
27 struct _GitPullCommandPriv
29 gchar *url;
30 gboolean no_commit;
31 gboolean squash;
32 gboolean commit_fast_forward;
33 gboolean append_fetch_data;
34 gboolean force;
35 gboolean no_follow_tags;
38 G_DEFINE_TYPE (GitPullCommand, git_pull_command, GIT_TYPE_COMMAND);
40 static void
41 git_pull_command_init (GitPullCommand *self)
43 self->priv = g_new0 (GitPullCommandPriv, 1);
46 static void
47 git_pull_command_finalize (GObject *object)
49 GitPullCommand *self;
51 self = GIT_PULL_COMMAND (object);
53 g_free (self->priv->url);
54 g_free (self->priv);
56 G_OBJECT_CLASS (git_pull_command_parent_class)->finalize (object);
59 static guint
60 git_pull_command_run (AnjutaCommand *command)
62 GitPullCommand *self;
64 self = GIT_PULL_COMMAND (command);
66 git_command_add_arg (GIT_COMMAND (command), "pull");
68 if (self->priv->no_commit)
69 git_command_add_arg (GIT_COMMAND (command), "--no-commit");
71 if (self->priv->squash)
72 git_command_add_arg (GIT_COMMAND (command), "--squash");
74 if (self->priv->commit_fast_forward)
75 git_command_add_arg (GIT_COMMAND (command), "--no-ff");
77 if (self->priv->append_fetch_data)
78 git_command_add_arg (GIT_COMMAND (command), "-a");
80 if (self->priv->force)
81 git_command_add_arg (GIT_COMMAND (command), "-f");
83 if (self->priv->no_follow_tags)
84 git_command_add_arg (GIT_COMMAND (command), "--no-tags");
86 git_command_add_arg (GIT_COMMAND (command), self->priv->url);
88 return 0;
91 static void
92 git_pull_command_class_init (GitPullCommandClass *klass)
94 GObjectClass* object_class = G_OBJECT_CLASS (klass);
95 GitCommandClass* parent_class = GIT_COMMAND_CLASS (klass);
96 AnjutaCommandClass* command_class = ANJUTA_COMMAND_CLASS (klass);
98 object_class->finalize = git_pull_command_finalize;
99 parent_class->output_handler = git_command_send_output_to_info;
100 command_class->run = git_pull_command_run;
104 GitPullCommand *
105 git_pull_command_new (const gchar *working_directory,
106 const gchar *url,
107 gboolean no_commit, gboolean squash,
108 gboolean commit_fast_forward,
109 gboolean append_fetch_data,
110 gboolean force, gboolean no_follow_tags)
112 GitPullCommand *self;
114 self = g_object_new (GIT_TYPE_PULL_COMMAND,
115 "working-directory", working_directory,
116 "single-line-output", TRUE,
117 NULL);
119 self->priv->url = g_strdup (url);
120 self->priv->no_commit = no_commit;
121 self->priv->squash = squash;
122 self->priv->commit_fast_forward = commit_fast_forward;
123 self->priv->append_fetch_data = append_fetch_data;
124 self->priv->force = force;
125 self->priv->no_follow_tags = no_follow_tags;
127 return self;