1 |
1 |
/* cvs_sync
|
2 |
2 |
* Written by Scott Ullrich
|
3 |
3 |
* (C)2005-2007 Scott Ullrich
|
|
4 |
* (C)2010 Erik Fonnesbeck
|
4 |
5 |
* Part of the pfSense project pfSsh.php subsystem
|
5 |
6 |
*/
|
6 |
7 |
|
... | ... | |
119 |
120 |
}
|
120 |
121 |
|
121 |
122 |
$merge_repos = array();
|
|
123 |
if(file_exists("/root/.gitsync_merge")) {
|
|
124 |
$gitsync_merges = file("/root/.gitsync_merge", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
|
125 |
if(!empty($gitsync_merges) && is_array($gitsync_merges)) {
|
|
126 |
echo "\n===> Automatic merge list read from /root/.gitsync_merge\n";
|
|
127 |
foreach($gitsync_merges as $merge_line_num => $merge_line) {
|
|
128 |
$merge_comments = explode("#", trim($merge_line));
|
|
129 |
if(empty($merge_comments[0]))
|
|
130 |
continue;
|
|
131 |
|
|
132 |
$merge_line = explode(" ", trim($merge_comments[0]));
|
|
133 |
if(count($merge_line) != 2 || empty($merge_line[0]) || empty($merge_line[1])) {
|
|
134 |
echo "\nLine " . ($merge_line_num + 1) . " does not have the correct parameter count or has improper spacing.\n";
|
|
135 |
echo "Expected parameters: repository_url branch\n";
|
|
136 |
echo "Line read: " . implode(" ", $merge_line) . "\n\n";
|
|
137 |
echo "Aborting automatic merge.\n\n";
|
|
138 |
$merge_repos = array();
|
|
139 |
break;
|
|
140 |
}
|
|
141 |
$merge_repos[] = array('repo' => $merge_line[0], 'branch' => $merge_line[1]);
|
|
142 |
}
|
|
143 |
}
|
|
144 |
}
|
122 |
145 |
if(!$command_split[2] && !$argv[3]) {
|
123 |
146 |
do {
|
124 |
|
echo "\nAdd a custom RCS branch URL (HTTP) to merge in or press enter for none.\n\n";
|
|
147 |
echo "\nAdd a custom RCS branch URL (HTTP) to merge in or press enter if done.\n\n";
|
125 |
148 |
$merge_repo = readline("> ");
|
126 |
149 |
if(!empty($merge_repo)) {
|
127 |
150 |
$merge_branch = readline("Merge which branch [master]? ");
|
... | ... | |
162 |
185 |
// Git commands for resetting to the specified branch
|
163 |
186 |
if($branch == "build_commit") {
|
164 |
187 |
$git_cmd = array(
|
165 |
|
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git branch $branch 2>/dev/null",
|
166 |
|
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git checkout -f $branch 2>/dev/null",
|
|
188 |
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git branch " . escapeshellarg($branch) . " 2>/dev/null",
|
|
189 |
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git checkout -f " . escapeshellarg($branch) . " 2>/dev/null",
|
167 |
190 |
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git reset --hard `cat /etc/version.lastcommit`"
|
168 |
191 |
);
|
169 |
192 |
} else {
|
170 |
193 |
$git_cmd = array(
|
171 |
|
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git branch $branch origin/$branch 2>/dev/null",
|
172 |
|
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git checkout -f $branch 2>/dev/null",
|
173 |
|
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git reset --hard origin/$branch"
|
|
194 |
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git branch " . escapeshellarg($branch) . " " . escapeshellarg("origin/{$branch}") . " 2>/dev/null",
|
|
195 |
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git checkout -f " . escapeshellarg($branch) . " 2>/dev/null",
|
|
196 |
"cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git reset --hard " . escapeshellarg("origin/{$branch}")
|
174 |
197 |
);
|
175 |
198 |
}
|
176 |
199 |
|
177 |
200 |
// Git 'er done!
|
178 |
201 |
if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) {
|
179 |
202 |
echo "===> Fetching updates...\n";
|
180 |
|
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git config remote.origin.url $GIT_REPO");
|
|
203 |
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git config remote.origin.url " . escapeshellarg($GIT_REPO));
|
181 |
204 |
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git fetch");
|
182 |
205 |
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git clean -f -f -x -d");
|
183 |
206 |
run_cmds($git_cmd);
|
184 |
207 |
} else {
|
185 |
208 |
exec("mkdir -p $CODIR/pfSenseGITREPO");
|
186 |
209 |
echo "Executing cd $CODIR/pfSenseGITREPO && git clone $GIT_REPO pfSenseGITREPO\n";
|
187 |
|
exec("cd $CODIR/pfSenseGITREPO && git clone $GIT_REPO pfSenseGITREPO");
|
|
210 |
exec("cd $CODIR/pfSenseGITREPO && git clone " . escapeshellarg($GIT_REPO) . " pfSenseGITREPO");
|
188 |
211 |
if(is_dir("$CODIR/pfSenseGITREPO/pfSense"))
|
189 |
212 |
exec("mv $CODIR/pfSenseGITREPO/pfSense $CODIR/pfSenseGITREPO/pfSenseGITREPO");
|
190 |
213 |
if(is_dir("$CODIR/pfSenseGITREPO/mainline"))
|
... | ... | |
194 |
217 |
|
195 |
218 |
foreach($merge_repos as $merge_repo) {
|
196 |
219 |
echo "===> Merging branch {$merge_repo['branch']} from {$merge_repo['repo']}\n";
|
197 |
|
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git pull {$merge_repo['repo']} {$merge_repo['branch']}", $output_str, $ret);
|
|
220 |
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git pull " . escapeshellarg($merge_repo['repo']) . " " . escapeshellarg($merge_repo['branch']), $output_str, $ret);
|
198 |
221 |
unset($output_str);
|
199 |
222 |
if($ret <> 0) {
|
200 |
223 |
echo "\nMerge failed. Aborting sync.\n\n";
|
... | ... | |
231 |
254 |
|
232 |
255 |
echo "===> Installing new files...\n";
|
233 |
256 |
|
|
257 |
// Don't include the .git directory in the copy
|
|
258 |
exec("mv $CODIR/pfSenseGITREPO/pfSenseGITREPO/.git $CODIR/pfSenseGITREPO/gitsync_temp.git");
|
|
259 |
|
234 |
260 |
if($g['platform'] == "pfSense")
|
235 |
261 |
$command = "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO ; tar -cpf - . | (cd / ; tar -Uxpf -)";
|
236 |
262 |
else
|
237 |
263 |
$command = "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO ; tar -cpf - . | (cd / ; tar -xpf -) 2>/dev/null";
|
238 |
264 |
exec($command);
|
239 |
265 |
|
240 |
|
post_cvssync_commands();
|
|
266 |
exec("mv $CODIR/pfSenseGITREPO/gitsync_temp.git $CODIR/pfSenseGITREPO/pfSenseGITREPO/.git");
|
|
267 |
|
|
268 |
// Reset the repository to restore the deleted files
|
|
269 |
exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && git reset --hard >/dev/null 2>/dev/null");
|
241 |
270 |
|
242 |
|
run_cmds($git_cmd);
|
|
271 |
post_cvssync_commands();
|
243 |
272 |
|
244 |
273 |
echo "===> Checkout complete.\n";
|
245 |
274 |
echo "\n";
|
Add support for an automatic merge list to gitsync, properly escape user-supplied parameters, and improve error handling a bit.