List of commits:
Subject Hash Author Date (UTC)
Another round of bulk updates. 45bb00a88c420d439b4dd19971808722e4a70895 Catalin(ux) M. BOIE 2011-10-24 22:31:14
Bulk update. Mostly css. 04734cd7cfc4fd4ec55dad70a3490f3065027639 Catalin(ux) M. BOIE 2011-10-03 23:18:26
Added rg_exec function and converted all calls from exec to rg_exec. 097157e5886dace2b9f67ca238a1063a3baff4a0 Catalin(ux) M. BOIE 2011-09-28 03:28:49
Another round of bulk updates cb9dbb75518ab3c214167646197ca7eb0de8e4e6 Catalin(ux) M. BOIE 2011-09-26 19:22:12
Bulk updates cad0c710542dc3fb072268eba40b0abe11217fa9 Catalin(ux) M. BOIE 2011-09-21 20:25:23
Bulk changes. d5274ef5f261086a2af6bd19ac04061bb3d55584 Catalin(ux) M. BOIE 2011-09-15 20:16:46
Store the fist instalation date in 'state' table. e4ba8a9239e72e8de5eed0b3bb1f2a5f2d429105 Catalin(ux) M. BOIE 2011-08-31 16:14:44
Bulk changes. 645d3deb19e399c05a8b14dd88c5151520482b6a Catalin(ux) M. BOIE 2011-08-25 20:39:25
Another bulk update - css related. 3867eb5deadf9827450b40a53efe6c83f518a07b Catalin(ux) M. BOIE 2011-07-26 22:01:13
Bulk update. 9d680f000b7c486be4664e1cb944f424c977c874 Catalin(ux) M. BOIE 2011-07-25 19:06:14
Some ssh and anonymous rights fixes. 9bb20c348a4933056d8f67bd151eb35cf0325835 Catalin(ux) M. BOIE 2011-07-05 22:00:00
Another round of fixes. 45749c46f79f75b29d83ee2d115f987c7765e8c4 Catalin(ux) M. BOIE 2011-07-05 20:01:10
Another round of bulk updates. 6077961d5c443b8a830dc08b3b0ebf37eaf594b3 Catalin(ux) M. BOIE 2011-07-04 22:12:40
Bump version to 0.7. e44064dab5c6f2fa625bb121483a51ec1960cad9 Catalin(ux) M. BOIE 2011-07-03 16:26:47
Lots of changes. 8876190d55995ed98a528edc786e0e9136a0535d Catalin(ux) M. BOIE 2011-07-03 00:03:42
Make %setup quiet as rpmlint told me. b272b9915498fb0a811be2e2687554bbaf887bf1 Catalin(ux) M. BOIE 2011-07-01 03:26:57
Bump version to 0.3 f626f3c66b7b51af2013e16e954e945ba84c12bb Catalin(ux) M. BOIE 2011-07-01 03:25:44
Added logrotate support b827ee7c179d5b72f6ac3ac255edb6de6decb91a Catalin(ux) M. BOIE 2011-07-01 03:25:13
More bulk updates 6dc2b24ebde74bbb64ef2893e2ddb8b7b9456219 Catalin(ux) M. BOIE 2011-07-01 03:16:01
Bulk changes e3771b115feb49698383730893ced1bac5670cac Catalin(ux) M. BOIE 2011-06-29 21:50:03
Commit 45bb00a88c420d439b4dd19971808722e4a70895 - Another round of bulk updates.
Author: Catalin(ux) M. BOIE
Author date (UTC): 2011-10-24 22:31
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2011-10-24 22:31
Parent(s): 04734cd7cfc4fd4ec55dad70a3490f3065027639
Signer:
Signing key:
Signing status: N
Tree: 565b474bf652778ba3122a6e934c93e138a48717
File Lines added Lines deleted
TODO 8 0
inc/admin/admin.php 1 1
inc/admin/users/user.form.php 8 5
inc/dispatch/dispatch.php 8 3
inc/feedback/suggestion.form.php 3 2
inc/git.inc.php 13 5
inc/home/home.php 0 9
inc/login/login.form.php 3 4
inc/login/login.php 1 1
inc/main/main.php 10 0
inc/prof.inc.php 72 0
inc/repo/repo.form.php 1 3
inc/repo/repo.php 3 5
inc/repo/rights.form.php 1 3
inc/repo/search.form.php 1 3
inc/user.inc.php 8 3
inc/user/confirm.php 1 1
inc/user/forgot.form.php 1 2
inc/user/forgot.php 1 1
inc/user/forgot_send.form.php 1 3
inc/user/home-page.php 3 5
inc/user/info/info.php 1 1
inc/user/keys/add.form.php 5 6
inc/user/keys/keys.php 2 2
inc/user/pass/pass.form.php 3 2
inc/user/personal.php 47 0
inc/user/repo-page.php 2 0
inc/util.inc.php 35 11
root/index.php 42 14
root/themes/default/main.css 17 6
root/themes/default/repo/fstat/nodata.html 3 0
root/themes/default/repo/list/nodata.html 3 0
root/themes/default/repo/log/nodata.html 3 0
root/themes/default/repo/tree/nodata.html 3 0
scripts/q.php 1 1
tests/util.php 17 0
tests/util/t1/nodata.html 1 0
tests/util/t2/footer.html 1 0
tests/util/t2/header.html 1 0
tests/util/t2/line.html 1 0
File TODO changed (mode: 100644) (index c1c7452..1cc86a5)
106 106 [ ] To investigate how gitolite is dealing with pushes without custom daemon. [ ] To investigate how gitolite is dealing with pushes without custom daemon.
107 107 [ ] Record in notes who pushed a commit first, for trace reasons? [ ] Record in notes who pushed a commit first, for trace reasons?
108 108 [ ] Add support for hooks/pre-receive-signature [ ] Add support for hooks/pre-receive-signature
109 [ ] Work flows: Allow user to edit workflows. For example:
110 - A merge request that is approved in a MR queue will make it
111 automatically to the specified queues.
112 [ ] Use $rr['prefix']
113 [ ]
114
115 == Graphics ==
116 [ ] http://static.phpcloud.com/images/banner/phpcloudcom-spaceship-banner-970x404px.jpg
109 117 [ ] [ ]
110 118
111 119 == Versus == == Versus ==
File inc/admin/admin.php changed (mode: 100644) (index 5c628e7..0f30e1c)
... ... if ($rg_ui['is_admin'] != 1) {
10 10
11 11
12 12 // menu // menu
13 $_admin_url = rg_re_url($op);
13 $_admin_url = rg_re_url("/op/admin");
14 14 $_admin_menu = ""; $_admin_menu = "";
15 15 $_admin_menu .= "[<a href=\"$_admin_url&amp;subop=1\">Users</a>]"; $_admin_menu .= "[<a href=\"$_admin_url&amp;subop=1\">Users</a>]";
16 16 $_admin_menu .= "&nbsp;[<a href=\"$_admin_url&amp;subop=2\">Repos</a>]"; $_admin_menu .= "&nbsp;[<a href=\"$_admin_url&amp;subop=2\">Repos</a>]";
File inc/admin/users/user.form.php changed (mode: 100644) (index c6a7746..cbb4eb9)
1 1 <?php <?php
2 2 $_form = '<div class="formarea">' . "\n"; $_form = '<div class="formarea">' . "\n";
3 3
4 $_form .= "<div class=\"formarea_title\">Change user details</div><br />\n";
5
4 6 if ($admin_mode == 1) { if ($admin_mode == 1) {
5 7 $sel_is_admin = array(0 => "", 1 => ""); $sel_is_admin = array(0 => "", 1 => "");
6 8 $sel_is_admin[$is_admin] = " selected=\"selected\""; $sel_is_admin[$is_admin] = " selected=\"selected\"";
 
... ... if (count($errmsg) > 0)
10 12 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
11 13
12 14 $_form .= ' $_form .= '
13 <form method="post" action="' . rg_re_post($op) . '">
14 <input type="hidden" name="op" value="' . $op . '" />
15 <input type="hidden" name="subop" value="' . $subop . '" />
16 <input type="hidden" name="subsubop" value="' . $subsubop . '" />
15 <form method="post" action="' . rg_re_post($cop) . '">
17 16 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
18 17 <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" /> <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" />
19 <input type="hidden" name="uid" value="' . $uid . '" />
18 ';
20 19
20 if ($admin_mode == 1)
21 $_form .= '<input type="hidden" name="uid" value="' . $uid . '" />';
22
23 $_form .= '
21 24 <label for="xuser"> <label for="xuser">
22 25 <span class="form_item_title">User name</span><br /> <span class="form_item_title">User name</span><br />
23 26 <input type="text" name="xuser" value="' . $xuser . '" /> <input type="text" name="xuser" value="' . $xuser . '" />
File inc/dispatch/dispatch.php changed (mode: 100644) (index 58f126a..cf54306)
2 2 rg_log("/inc/dispatch/dispatch"); rg_log("/inc/dispatch/dispatch");
3 3
4 4 switch ($op) { switch ($op) {
5 case 'home':
6 include($INC . "/home/home.php");
7 $body .= $_home;
5 case 'main':
6 include($INC . "/main/main.php");
7 $body .= $_main;
8 8 break; break;
9 9
10 10 case 'login': case 'login':
 
... ... case 'home-page':
77 77 $body .= $_home; $body .= $_home;
78 78 break; break;
79 79
80 case 'personal':
81 include($INC . "/user/personal.php");
82 $body .= $_personal;
83 break;
84
80 85 default: default:
81 86 rg_log("Invalid operation [$op]!"); rg_log("Invalid operation [$op]!");
82 87 } }
File inc/feedback/suggestion.form.php changed (mode: 100644) (index 9b9cc30..54c65d0)
1 1 <?php <?php
2 2 $_form = '<div class="formarea">' . "\n"; $_form = '<div class="formarea">' . "\n";
3 3
4 $_form .= '<div class="formarea_title">Send a suggestion</div><br />' . "\n";
5
4 6 if (count($errmsg) > 0) if (count($errmsg) > 0)
5 7 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 8
7 9 $_form .= ' $_form .= '
8 <form method="post" action="' . rg_re_post("suggestion") . '">
9 <input type="hidden" name="op" value="suggestion" />
10 <form method="post" action="' . rg_re_post($cop) . '">
10 11 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
11 12 <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" /> <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" />
12 13
File inc/git.inc.php changed (mode: 100644) (index 5abc8db..4c7d1d2)
... ... function rg_git_diff2array($diff)
336 336 continue; continue;
337 337 } }
338 338
339 // Ignore, for now, "\ No newline at end of file" (TODO)
340 if (strncmp($line, "\\", 1) == 0) {
341 rg_log("\tINFO: warn line: [$line].");
342 continue;
343 }
344
339 345 if (empty($line)) { if (empty($line)) {
340 346 rg_log("\tWARN: empty line [$line]!"); rg_log("\tWARN: empty line [$line]!");
341 347 continue; continue;
 
... ... function rg_git_log_template($log, $template_dir, $more)
457 463 { {
458 464 $t = array(); $t = array();
459 465
460 foreach ($log as $index => $info) {
461 $v = array();
462 foreach ($info['vars'] as $var => $value)
463 $v[$var] = $value;
464 $t[] = $v;
466 if (count($log) > 0) {
467 foreach ($log as $index => $info) {
468 $v = array();
469 foreach ($info['vars'] as $var => $value)
470 $v[$var] = $value;
471 $t[] = $v;
472 }
465 473 } }
466 474
467 475 return rg_template_table($template_dir, $t, $more); return rg_template_table($template_dir, $t, $more);
File inc/home/home.php deleted (index 5e9924e..0000000)
1 <?php
2 rg_log("/home/home.php");
3
4 $_home = "";
5
6 $_home .= "Bau! This is the homepage.";
7
8 ?>
9
File inc/login/login.form.php changed (mode: 100644) (index 54e9d96..bed284e)
... ... if (count($errmsg) > 0)
5 5 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 6
7 7 $_form .= ' $_form .= '
8 <form method="post" action="' . rg_re_post($op) . '">
9 <input type="hidden" name="op" value="' . $op . '" />
8 <form method="post" action="' . rg_re_post($cop) . '">
10 9 <input type="hidden" name="subop" value="1" /> <input type="hidden" name="subop" value="1" />
11 10 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
12 11
 
... ... $_form .= '
30 29 </form> </form>
31 30 <br /> <br />
32 31
33 <a href="' . rg_re_url("forgot_send") . '">Forgot your password?</a>
32 <a href="' . rg_re_url("/op/forgot_send") . '">Forgot your password?</a>
34 33 '; ';
35 34
36 35 if ($rg_account_allow_creation == 1) { if ($rg_account_allow_creation == 1) {
37 36 $_form .= ' $_form .= '
38 37 <br /> <br />
39 <a href="' . rg_re_url("create_account") . '">Create a new account</a>
38 <a href="' . rg_re_url("/op/create_account") . '">Create a new account</a>
40 39 '; ';
41 40 } }
42 41
File inc/login/login.php changed (mode: 100644) (index 856a513..6f640c9)
... ... if ($doit == 1) {
16 16 } else { } else {
17 17 $show_form = 0; $show_form = 0;
18 18 $redispatch = 1; $redispatch = 1;
19 $op = "home"; // redirect to home page
19 $op = "home-page"; // redirect to home page
20 20 } }
21 21 } }
22 22
File inc/main/main.php added (mode: 100644) (index 0000000..7ea2280)
1 <?php
2 rg_log("/main/main.php");
3
4 $_main = "";
5
6 $_main .= "This is the main page where we will have an overview of what"
7 . " rocketgit is etc.";
8
9 ?>
10
File inc/prof.inc.php added (mode: 100644) (index 0000000..a4e8d77)
1 <?php
2 // Profiling functions
3
4 $rg_prof_main = array();
5 $rg_prof_start = array();
6
7 function rg_prof_start($label)
8 {
9 global $rg_prof_tmp;
10 global $rg_prof_state;
11
12 if (isset($rg_prof_tmp[$label]))
13 return;
14
15 $rg_prof_tmp[$label] = $rg_prof_state;
16 $rg_prof_tmp[$label]['_ts'] = microtime(TRUE);
17 }
18
19 function rg_prof_end($label)
20 {
21 global $rg_prof_tmp;
22 global $rg_prof_state;
23 global $rg_prof_main;
24
25 if (!isset($rg_prof_tmp[$label]))
26 return;
27
28 $c = $rg_prof_state;
29 $c['time'] = microtime(TRUE) - $rg_prof_tmp[$label]['_ts']; unset($c['_ts']);
30 $c['runs'] = 1;
31
32 foreach ($rg_prof_tmp[$label] as $key => $val)
33 $c[$key] -= $val;
34
35 // add to main label
36 if (!isset($rg_prof_main[$label])) {
37 $rg_prof_main[$label] = $c;
38 } else {
39 foreach ($c as $key => $val)
40 $rg_prof_main[$label][$key] += $val;
41 }
42
43 unset($rg_state_tmp[$label]);
44 }
45
46 function rg_prof_get()
47 {
48 global $rg_prof_main;
49
50 return $rg_prof_main;
51 }
52
53 function rg_prof_get_total()
54 {
55 global $rg_prof_main;
56
57 $t = array();
58
59 $ret = "";
60 foreach ($rg_prof_main as $label => $per_label) {
61 foreach ($per_label as $k => $v) {
62 if ($isset($t[$k]))
63 $t[$k] = $v;
64 else
65 $t[$k] += $v;
66 }
67 }
68
69 return $t;
70 }
71
72 ?>
File inc/repo/repo.form.php changed (mode: 100644) (index 706c462..9fd5d1c)
... ... if (count($errmsg) > 0)
5 5 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 6
7 7 $_form .= ' $_form .= '
8 <form method="post" action="' . rg_re_post($op) . '/create">
9 <input type="hidden" name="op" value="' . $op . '" />
10 <input type="hidden" name="subop" value="' . $subop . '" />
8 <form method="post" action="' . rg_re_post($cop . "/create") . '">
11 9 <input type="hidden" name="repo_id" value="' . $repo_id . '" /> <input type="hidden" name="repo_id" value="' . $repo_id . '" />
12 10 <input type="hidden" name="master_repo_id" value="' . $master_repo_id . '" /> <input type="hidden" name="master_repo_id" value="' . $master_repo_id . '" />
13 11 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
File inc/repo/repo.php changed (mode: 100644) (index f3f788a..e20fd5a)
... ... $masters = rg_var_uint("masters");
20 20
21 21
22 22 // menu // menu
23 $_url = rg_re_url($op);
24
25 23 $second_menu = array( $second_menu = array(
26 24 "create_repo" => array( "create_repo" => array(
27 25 "text" => "Create", "text" => "Create",
28 "url" => "/create"
26 "op" => "create"
29 27 ), ),
30 28 "list_repos" => array( "list_repos" => array(
31 29 "text" => "List", "text" => "List",
32 "url" => "/list"
30 "op" => "list"
33 31 ), ),
34 32 "search_repo" => array( "search_repo" => array(
35 33 "text" => "Search", "text" => "Search",
36 "url" => "/search"
34 "op" => "search"
37 35 ) )
38 36 ); );
39 37
File inc/repo/rights.form.php changed (mode: 100644) (index c533c4d..a1889d2)
... ... $_form = '<div class="formarea">' . "\n";
4 4 if (count($errmsg) > 0) if (count($errmsg) > 0)
5 5 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 6
7 <form method="post" action="' . rg_re_post($op) . '">
8 <input type="hidden" name="op" value="' . $op . '" />
9 <input type="hidden" name="subop" value="' . $subop . '" />
7 <form method="post" action="' . rg_re_post($cop) . '">
10 8 <input type="hidden" name="repo_id" value="' . $repo_id . '" /> <input type="hidden" name="repo_id" value="' . $repo_id . '" />
11 9 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
12 10 <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" /> <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" />
File inc/repo/search.form.php changed (mode: 100644) (index ee538a5..f31c09c)
... ... if (count($errmsg) > 0)
5 5 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 6
7 7 $_form .= ' $_form .= '
8 <form method="post" action="' . rg_re_post($op) . '">
9 <input type="hidden" name="op" value="' . $op . '" />
10 <input type="hidden" name="subop" value="' . $subop . '" />
8 <form method="post" action="' . rg_re_post($cop) . '">
11 9 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
12 10
13 11 <label for="q"> <label for="q">
File inc/user.inc.php changed (mode: 100644) (index acbb613..b790b48)
... ... function rg_user_login_by_sid($db, $sid, &$rg_ui)
237 237 $rg_ui = array(); $rg_ui = array();
238 238 $rg_ui['uid'] = 0; $rg_ui['uid'] = 0;
239 239 $rg_ui['is_admin'] = 0; $rg_ui['is_admin'] = 0;
240 $rg_ui['organization'] = 0;
241 $rg_ui['username'] = "";
240 242
241 if (empty($sid))
243 if (empty($sid)) {
244 rg_log("\tNo sid!");
242 245 return FALSE; return FALSE;
246 }
243 247
244 248 $uid = rg_sess_valid($db, $sid); $uid = rg_sess_valid($db, $sid);
245 249 if ($uid == 0) if ($uid == 0)
 
... ... function rg_user_login_by_sid($db, $sid, &$rg_ui)
247 251
248 252 $rg_ui = rg_user_info($db, $uid, "", ""); $rg_ui = rg_user_info($db, $uid, "", "");
249 253 if ($rg_ui['exists'] != 1) { if ($rg_ui['exists'] != 1) {
254 rg_log("\tUid $uid does not exists (" . rg_user_error() . ")!");
250 255 rg_user_set_error("invalid uid"); rg_user_set_error("invalid uid");
251 256 return FALSE; return FALSE;
252 257 } }
 
... ... function rg_user_forgot_pass_mail($db, $email)
627 632 . "If you want to reset the password, follow:\n" . "If you want to reset the password, follow:\n"
628 633 . (@strcmp($_SERVER['HTTPS'], "on") == 0 ? "https://" : "http://") . (@strcmp($_SERVER['HTTPS'], "on") == 0 ? "https://" : "http://")
629 634 . @$_SERVER['HTTP_HOST'] . @$_SERVER['HTTP_HOST']
630 . rg_re_url("forgot_link") . "&forgot_token=$forgot_token",
635 . rg_re_url("/op/forgot_link") . "&forgot_token=$forgot_token",
631 636 $headers, $headers,
632 637 "-f $rg_admin_email")) { "-f $rg_admin_email")) {
633 638 rg_user_set_error("Cannot send mail ($php_errormsg)!"); rg_user_set_error("Cannot send mail ($php_errormsg)!");
 
... ... function rg_user_confirm_send($email, $token)
693 698 . "Please confirm your account creation following:\n" . "Please confirm your account creation following:\n"
694 699 . (@strcmp($_SERVER['HTTPS'], "on") == 0 ? "https://" : "http://") . (@strcmp($_SERVER['HTTPS'], "on") == 0 ? "https://" : "http://")
695 700 . @$_SERVER['HTTP_HOST'] . @$_SERVER['HTTP_HOST']
696 . rg_re_url("confirm") . "&token=$token",
701 . rg_re_url("/op/confirm") . "&token=$token",
697 702 $headers, $headers,
698 703 "-f $rg_admin_email")) { "-f $rg_admin_email")) {
699 704 rg_user_set_error("Cannot send mail ($php_errormsg)!"); rg_user_set_error("Cannot send mail ($php_errormsg)!");
File inc/user/confirm.php changed (mode: 100644) (index a47db95..b559f11)
... ... if ($uid === FALSE) {
12 12 // auto-login // auto-login
13 13 $redispatch = 1; $redispatch = 1;
14 14 if (rg_user_auto_login($db, $uid, $rg_ui)) if (rg_user_auto_login($db, $uid, $rg_ui))
15 $op = "home";
15 $op = "home-page";
16 16 else else
17 17 $op = "login"; $op = "login";
18 18 } }
File inc/user/forgot.form.php changed (mode: 100644) (index a315d42..6b6b4f5)
... ... if (count($errmsg) > 0)
5 5 $_forgot_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_forgot_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 6
7 7 $_forgot_form .= ' $_forgot_form .= '
8 <form method="post" action="' . rg_re_post($op) . '">
9 <input type="hidden" name="op" value="' . $op . '" />
8 <form method="post" action="' . rg_re_post($cop) . '">
10 9 <input type="hidden" name="forgot_token" value="' . $forgot_token . '" /> <input type="hidden" name="forgot_token" value="' . $forgot_token . '" />
11 10 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
12 11 <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" /> <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" />
File inc/user/forgot.php changed (mode: 100644) (index 380a51f..2eacc04)
... ... if ($doit == 1) {
35 35 $redispatch = 1; $redispatch = 1;
36 36 $_hide_form = 1; $_hide_form = 1;
37 37 if (rg_user_auto_login($db, $r['uid'], $rg_ui)) if (rg_user_auto_login($db, $r['uid'], $rg_ui))
38 $op = "home";
38 $op = "home-page";
39 39 else else
40 40 $op = "login"; $op = "login";
41 41 } }
File inc/user/forgot_send.form.php changed (mode: 100644) (index f1076c3..e75894a)
... ... if (count($errmsg) > 0)
5 5 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 6
7 7 $_form .= ' $_form .= '
8 <form method="post" action="' . rg_re_post("forgotsend") . '">
9 <input type="hidden" name="op" value="forgotsend" />
10 <input type="hidden" name="subop" value="2" />
8 <form method="post" action="' . rg_re_post($cop . "/forgot_send") . '">
11 9 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
12 10
13 11 <label for="email"> <label for="email">
File inc/user/home-page.php changed (mode: 100644) (index 386d6a2..9255b7c)
... ... if ($ui['uid'] == $rg_ui['uid']) {
14 14 $second_menu = array( $second_menu = array(
15 15 "edit_info" => array( "edit_info" => array(
16 16 "text" => "Edit info", "text" => "Edit info",
17 "url" => "/edit_info"
17 "op" => "edit_info"
18 18 ), ),
19 19 "change_pass" => array( "change_pass" => array(
20 20 "text" => "Change password", "text" => "Change password",
21 "url" => "/change_pass"
21 "op" => "change_pass"
22 22 ), ),
23 23 "keys" => array( "keys" => array(
24 24 "text" => "SSH keys", "text" => "SSH keys",
25 "url" => "/keys"
25 "op" => "keys"
26 26 ) )
27 27 ); );
28 28 } }
29 29
30 $_home .= "<h1>" . $user . "</h1>\n";
31
32 30 // list of repositories // list of repositories
33 31 $_home .= rg_repo_list($db, "", $ui); $_home .= rg_repo_list($db, "", $ui);
34 32
File inc/user/info/info.php changed (mode: 100644) (index 50174b3..da357a8)
... ... if ($doit == 1) {
26 26 break; break;
27 27 } }
28 28
29 $_info .= "OK!<br />";
29 $_info .= "Information was updated!<br />";
30 30 break; break;
31 31 } }
32 32 } else { } else {
File inc/user/keys/add.form.php changed (mode: 100644) (index 83d74f7..c270760)
1 1 <?php <?php
2 // TODO: Do not pass op anymore in a hidden input field!
2 3 $_form = '<div class="formarea">' . "\n"; $_form = '<div class="formarea">' . "\n";
3 4
5 $_form .= "<div class=\"formarea_title\">Add a new ssh key</div><br />\n";
6
4 7 if (count($errmsg) > 0) if (count($errmsg) > 0)
5 8 $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 9
7 10 $_form .= ' $_form .= '
8 <form method="post" action="' . rg_re_post($op) . '">
9 <input type="hidden" name="op" value="' . $op . '" />
10 <input type="hidden" name="subop" value="' . $subop . '" />
11 <form method="post" action="' . rg_re_post($cop) . '">
11 12 <input type="hidden" name="add" value="1" /> <input type="hidden" name="add" value="1" />
12 13 <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" /> <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" />
13 14
14 <label for="key">
15 <span class="form_item_title">Add key (starts with ssh-...)</span><br />
15 <label for="key">Key string (starts with ssh-...)</label><br />
16 16 <textarea name="key" value="' . $key . '" rows="4" cols="50"></textarea> <textarea name="key" value="' . $key . '" rows="4" cols="50"></textarea>
17 </label>
18 17 <br /> <br />
19 18 <br /> <br />
20 19
File inc/user/keys/keys.php changed (mode: 100644) (index 142c929..54e6863)
... ... $key = preg_replace("|[^/A-Za-z0-9 @/+_\.\=,-]|", "", $key);
10 10 $key_id = rg_var_uint("key_id"); $key_id = rg_var_uint("key_id");
11 11
12 12 // menu // menu
13 $_url = rg_re_url($op);
13 $_url = rg_re_url($cop);
14 14
15 15 $_keys = ""; $_keys = "";
16 16 $errmsg = array(); $errmsg = array();
 
... ... if (rg_var_uint("add") == 1) {
25 25 } }
26 26
27 27
28 $_keys .= rg_keys_list($db, $rg_ui, $_url . "&amp;subop=$subop");
28 $_keys .= rg_keys_list($db, $rg_ui, $_url);
29 29
30 30 include($INC . "/user/keys/add.form.php"); include($INC . "/user/keys/add.form.php");
31 31 $_keys .= $_form; $_keys .= $_form;
File inc/user/pass/pass.form.php changed (mode: 100644) (index 5cadb84..7fa0b75)
1 1 <?php <?php
2 2 $_chpass_form = '<div class="formarea">' . "\n"; $_chpass_form = '<div class="formarea">' . "\n";
3 3
4 $_chpass_form .= '<div class="formarea_title">Change password</div><br />' . "\n";
5
4 6 if (count($errmsg) > 0) if (count($errmsg) > 0)
5 7 $_chpass_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n"; $_chpass_form .= '<span class="error">' . implode("<br />\n", $errmsg) . '</span><br /><br />' . "\n";
6 8
7 9 $_chpass_form .= ' $_chpass_form .= '
8 <form method="post" action="' . rg_re_post($op) . '">
9 <input type="hidden" name="op" value="' . $op . '" />
10 <form method="post" action="' . rg_re_post($cop) . '">
10 11 <input type="hidden" name="doit" value="1" /> <input type="hidden" name="doit" value="1" />
11 12 <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" /> <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '" />
12 13
File inc/user/personal.php added (mode: 100644) (index 0000000..bf2d3cf)
1 <?php
2 rg_log("/inc/user/personal");
3
4 $_personal = "";
5
6 if ($rg_ui['uid'] == 0) {
7 $_personal .= "You have no access here!";
8 return;
9 }
10
11 // menu
12 $second_menu = array(
13 "edit_info" => array(
14 "text" => "Edit info",
15 "op" => "edit_info"
16 ),
17 "change_pass" => array(
18 "text" => "Change password",
19 "op" => "change_pass"
20 ),
21 "keys" => array(
22 "text" => "SSH keys",
23 "op" => "keys"
24 )
25 );
26
27 $errmsg = array();
28
29 switch ($subop) {
30 case 'edit_info':
31 include($INC . "/user/info/info.php");
32 $_personal .= $_info;
33 break;
34
35 case 'change_pass':
36 include($INC . "/user/pass/pass.php");
37 $_personal .= $_pass;
38 break;
39
40 case 'keys':
41 include($INC . "/user/keys/keys.php");
42 $_personal .= $_keys;
43 break;
44 }
45
46 ?>
47
File inc/user/repo-page.php changed (mode: 100644) (index d51e8a9..fbc178d)
... ... if (strcmp($subop, "tree") == 0) {
46 46 $_home .= rg_template($THEME . "/repo/blob.html", $blob, $_more); $_home .= rg_template($THEME . "/repo/blob.html", $blob, $_more);
47 47 } else { // log } else { // log
48 48 if (empty($paras[0])) { if (empty($paras[0])) {
49 rg_log("Show full log");
49 50 $log = rg_git_log(10, "", "", FALSE); $log = rg_git_log(10, "", "", FALSE);
50 51 rg_log("log: " . print_r($log, TRUE)); rg_log("log: " . print_r($log, TRUE));
51 52 $_home .= rg_git_log_template($log, $THEME . "/repo/log", $_more); $_home .= rg_git_log_template($log, $THEME . "/repo/log", $_more);
52 53 } else { } else {
53 54 $commit = rg_git_reference($paras[0]); $commit = rg_git_reference($paras[0]);
55 rg_log("Show diff for commit [$commit]");
54 56
55 57 $log = rg_git_log(1, $commit . "~1", $commit, TRUE); $log = rg_git_log(1, $commit . "~1", $commit, TRUE);
56 58 rg_log("log: " . print_r($log, TRUE)); rg_log("log: " . print_r($log, TRUE));
File inc/util.inc.php changed (mode: 100644) (index 2d8512d..469a8cd)
... ... function rg_load()
74 74 /* /*
75 75 * Builds URLs * Builds URLs
76 76 */ */
77 function rg_re_url($op)
77 function rg_re_url($area)
78 78 { {
79 79 if (isset($_REQUEST['rwe'])) if (isset($_REQUEST['rwe']))
80 return "/op/" . $op;
80 return $area;
81 81
82 return "/?op=" . $op;
82 return "/?vv=" . $area;
83 83 } }
84 84
85 85 /* /*
 
... ... function rg_re_url($op)
88 88 function rg_re_post($op) function rg_re_post($op)
89 89 { {
90 90 if (isset($_REQUEST['rwe'])) if (isset($_REQUEST['rwe']))
91 return "/op/" . $op;
91 return $op;
92 92
93 return "/";
93 return "/?vv=$op";
94 }
95
96 function rg_re_userpage($rr)
97 {
98 if (strcmp($rr['type'], "user") == 0)
99 $prefix = "/user";
100 else
101 $prefix = "";
102
103 $s = $prefix . "/" . $rr['user'];
104
105 if (isset($_REQUEST['rwe']))
106 return $s;
107
108 return $_SERVER['PHP_SELF'] . "?vv=$s";
94 109 } }
95 110
96 111 function rg_re_repopage($rr) function rg_re_repopage($rr)
 
... ... function rg_menu($a, $rg_ui)
196 211 $menu = "<div class=\"menu\">\n"; $menu = "<div class=\"menu\">\n";
197 212 $menu .= "\t<ul>\n"; $menu .= "\t<ul>\n";
198 213 $menu2 = ""; $menu2 = "";
199 foreach ($a as $_op => $_info) {
214 foreach ($a as $_id => $_info) {
200 215 // we ignore fake menus like 'home' // we ignore fake menus like 'home'
201 216 if (!isset($_info['text'])) if (!isset($_info['text']))
202 217 continue; continue;
 
... ... function rg_menu($a, $rg_ui)
211 226 continue; continue;
212 227
213 228 $_text = $_info['text']; $_text = $_info['text'];
214 $_url = rg_re_url($_op);
229 $_url = rg_re_url($_info['op']);
230 //$menu .= "<!-- op=" . $_info['op'] . " url=$_url." . " -->\n";
215 231 $menu .= "\t\t<li><a href=\"" . $_url . "\">$_text</a></li>\n"; $menu .= "\t\t<li><a href=\"" . $_url . "\">$_text</a></li>\n";
216 232
217 233 if (!isset($_info['sub']) || (count($_info['sub']) == 0)) if (!isset($_info['sub']) || (count($_info['sub']) == 0))
 
... ... function rg_menu($a, $rg_ui)
221 237 $menu2 .= "\t<ul>\n"; $menu2 .= "\t<ul>\n";
222 238 foreach ($_info['sub'] as $junk => $_info2) { foreach ($_info['sub'] as $junk => $_info2) {
223 239 $_text2 = $_info2['text']; $_text2 = $_info2['text'];
240 $_url2 = $_url . "/" . $_info2['op'];
224 241 $menu2 .= "\t\t<li><a href=\"" $menu2 .= "\t\t<li><a href=\""
225 . $_url . $_info2['url']
242 . $_url2
226 243 . "\">$_text2</a></li>\n"; . "\">$_text2</a></li>\n";
227 244 } }
228 245 $menu2 .= "\t</ul>\n"; $menu2 .= "\t</ul>\n";
 
... ... function rg_template_table($dir, $data, $more)
262 279 { {
263 280 rg_log("template_table($dir)"); rg_log("template_table($dir)");
264 281
282 $m_what = array(); $m_values = array();
283 rg_prepare_replace($more, $m_what, $m_values);
284
285 if (empty($data)) {
286 $no_data = @file_get_contents($dir . "/nodata.html");
287 if ($no_data === FALSE)
288 $no_data = "";
289 return preg_replace($m_what, $m_values, $no_data);
290 }
291
265 292 $head = @file_get_contents($dir . "/header.html"); $head = @file_get_contents($dir . "/header.html");
266 293 if ($head === FALSE) if ($head === FALSE)
267 294 $head = ""; $head = "";
 
... ... function rg_template_table($dir, $data, $more)
274 301 if ($foot === FALSE) if ($foot === FALSE)
275 302 $foot = ""; $foot = "";
276 303
277 $m_what = array(); $m_values = array();
278 rg_prepare_replace($more, $m_what, $m_values);
279
280 304 $head = preg_replace($m_what, $m_values, $head); $head = preg_replace($m_what, $m_values, $head);
281 305 $foot = preg_replace($m_what, $m_values, $foot); $foot = preg_replace($m_what, $m_values, $foot);
282 306
File root/index.php changed (mode: 100644) (index e3d7565..e8d6d7f)
... ... include_once($INC . "/token.inc.php");
23 23 rg_log_set_file("/var/log/rocketgit-web/main.log"); rg_log_set_file("/var/log/rocketgit-web/main.log");
24 24
25 25 // Init variables // Init variables
26 $op = ""; $subop = ""; $subsubop = "";
27 $type = ""; $user = ""; $repo = "";
26 $op = ""; $subop = ""; $subsubop = ""; $cop = "";
27 $type = ""; $prefix = ""; $user = ""; $repo = "";
28 28 $paras = array(); $paras = array();
29 29
30 30 // We have variable 'vv' passed from webserver - build 'op' and rest of paras // We have variable 'vv' passed from webserver - build 'op' and rest of paras
31 31 $vv = rg_var_str("vv"); $vv = rg_var_str("vv");
32 if (strncmp($vv, "/op/", 4) == 0) { // command
33 $op = substr($vv, 4);
34 $_t = explode("/", $op);
32 if (strcmp($vv, "/") == 0) { // main page for site (not for user)
33 $op = "main";
34 } else if (strncmp($vv, "/op/", 4) == 0) { // command
35 $_t = substr($vv, 4);
36 $_t = explode("/", $_t);
35 37 $op = $_t[0]; $op = $_t[0];
36 38 if (isset($_t[1])) { if (isset($_t[1])) {
37 39 $subop = $_t[1]; $subop = $_t[1];
 
... ... if (strncmp($vv, "/op/", 4) == 0) { // command
42 44 if (strncmp($vv, "/user/", 6) == 0) { if (strncmp($vv, "/user/", 6) == 0) {
43 45 $vv = substr($vv, 6); $vv = substr($vv, 6);
44 46 $type = "user"; $type = "user";
47 $prefix = "/user";
45 48 } else { } else {
46 49 $type = "org"; $type = "org";
50 $prefix = "";
47 51 } }
48 52 $_t = explode("/", $vv); $_t = explode("/", $vv);
49 53 $user = $_t[0]; $user = $_t[0];
 
... ... if (strncmp($vv, "/op/", 4) == 0) { // command
65 69 $op = "home-page"; $op = "home-page";
66 70 } }
67 71 } }
68 $rr = array("type" => $type, "user" => $user,"repo" => $repo);
72 $cop = rtrim("/op/" . $op . "/" . $subop . "/" . $subsubop, "/");
73
74 $rr = array(
75 "type" => $type,
76 "prefix" => $prefix,
77 "user" => $user,
78 "repo" => $repo);
69 79
70 80 $doit = rg_var_uint("doit"); $doit = rg_var_uint("doit");
71 81 $sid = rg_var_re("sid", "/[^A-Za-z0-9]/"); $sid = rg_var_re("sid", "/[^A-Za-z0-9]/");
 
... ... $token = rg_var_re("token", "/[^A-Za-z0-9]/");
74 84 rg_log("IP: " . @$_SERVER['REMOTE_ADDR']); rg_log("IP: " . @$_SERVER['REMOTE_ADDR']);
75 85 rg_log("_REQUEST: " . trim(print_r($_REQUEST, TRUE))); rg_log("_REQUEST: " . trim(print_r($_REQUEST, TRUE)));
76 86 rg_log("_COOKIE: " . trim(print_r($_COOKIE, TRUE))); rg_log("_COOKIE: " . trim(print_r($_COOKIE, TRUE)));
77 rg_log("Start! op=$op/$subop/$subsubop, user=$user repo=$repo doit=$doit, sid=$sid...");
87 rg_log("Start! cop=[$cop] op=$op subop=$subop subsubop=$subsubop"
88 . " user=$user repo=$repo"
89 . " doit=$doit, sid=$sid...");
78 90 rg_log("paras: " . implode("|", $paras)); rg_log("paras: " . implode("|", $paras));
79 91
80 92
 
... ... do {
101 113
102 114 // menu // menu
103 115 $first_menu = array( $first_menu = array(
104 "login" => array("text" => "Login", "uid0" => 1),
105 "home-page" => array("text" => "Personal"),
106 "repo" => array("text" => "Repositories"),
107 "admin" => array("text" => "Admin", "needs_admin" => 1),
108 "suggestion"=> array("text" => "Suggestion"),
109 "logout" => array("text" => "Logout")
116 "login" => array(
117 "text" => "Login",
118 "uid0" => 1,
119 "op" => "/op/login"),
120 "home-page" => array(
121 "text" => "Home",
122 "op" => ($rg_ui['organization'] == 1) ? "/" : "/user/" . $rg_ui['username']),
123 "personal" => array(
124 "text" => "Personal",
125 "op" => "/op/personal"),
126 "repo" => array(
127 "text" => "Repositories",
128 "op" => "/op/repo"),
129 "admin" => array(
130 "text" => "Admin",
131 "needs_admin" => 1,
132 "op" => "/op/admin"),
133 "suggestion"=> array(
134 "text" => "Suggestion",
135 "op" => "/op/suggestion"),
136 "logout" => array(
137 "text" => "Logout",
138 "op" => "/op/logout")
110 139 ); );
111 140 $first_menu[$op]['sub'] = $second_menu; $first_menu[$op]['sub'] = $second_menu;
112 141 $menu = implode("", rg_menu($first_menu, $rg_ui)); $menu = implode("", rg_menu($first_menu, $rg_ui));
 
... ... else
119 148 $_diff = sprintf("%u", (microtime(TRUE) - $_s) * 1000); $_diff = sprintf("%u", (microtime(TRUE) - $_s) * 1000);
120 149 include($THEME . "/index.php"); include($THEME . "/index.php");
121 150
122 $_diff = sprintf("%u", (microtime(TRUE) - $_s) * 1000);
123 151 rg_log("Done in $_diff ms."); rg_log("Done in $_diff ms.");
124 152 ?> ?>
File root/themes/default/main.css changed (mode: 100644) (index b616e01..88c2437)
4 4 } }
5 5
6 6 body { body {
7 font-family: Verdana, arial, helvetica, sans-serif;
7 font-family: sans-serif;
8 8 font-size: 10pt; font-size: 10pt;
9 9 line-height: 100%; line-height: 100%;
10 10 } }
 
... ... th, td {
88 88 margin: 5px auto; margin: 5px auto;
89 89 background-color: #dddddd; background-color: #dddddd;
90 90 padding: 5px; padding: 5px;
91 width: 400px;
91 width: 800px;
92 92 border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
93 93 border: 1px solid #cccccc; border: 1px solid #cccccc;
94 94 } }
95 95
96 .formarea_title {
97 font-weight: bold;
98 font-size: 12pt;
99 }
100
96 101 #profiling { #profiling {
97 102 border-top: 1px solid #000000; border-top: 1px solid #000000;
98 103 background-color: #eeeeee; background-color: #eeeeee;
 
... ... th, td {
107 112
108 113 .form_item_title { .form_item_title {
109 114 font-weight: bold; font-weight: bold;
115 margin-bottom: 5px;
116 }
117
118 label {
119 font-weight: bold;
120 margin-bottom: 5px;
110 121 } }
111 122
112 123 .rg_keys_list { .rg_keys_list {
113 124 margin: 20px auto; margin: 20px auto;
114 125 background-color: #dddddd; background-color: #dddddd;
115 126 padding: 5px; padding: 5px;
116 width: 600px;
127 width: 650px;
117 128 border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
118 129 border: 1px solid #cccccc; border: 1px solid #cccccc;
119 130 } }
 
... ... th, td {
139 150 } }
140 151
141 152 .source { .source {
142 font-family: monospace;
143 font-size: 10pt;
153 font-size: 9pt;
154 line-height: 110%;
144 155 } }
145 156
146 157 .diff { .diff {
147 width: 880px;
148 158 } }
159
File root/themes/default/repo/fstat/nodata.html added (mode: 100644) (index 0000000..f70717a)
1 <div class="warning">
2 No file changed.
3 </div>
File root/themes/default/repo/list/nodata.html added (mode: 100644) (index 0000000..e5cf84e)
1 <div class="warning">
2 No repository found.
3 </div>
File root/themes/default/repo/log/nodata.html added (mode: 100644) (index 0000000..48fcc28)
1 <div class="warning">
2 No commit found.
3 </div>
File root/themes/default/repo/tree/nodata.html added (mode: 100644) (index 0000000..d5ef081)
1 <div class="warning">
2 Empty tree.
3 </div>
File scripts/q.php changed (mode: 100644) (index 4ef1fd6..f8a43d7)
... ... while (TRUE) {
93 93 } }
94 94
95 95 $rr = array( $rr = array(
96 "type" => $mi['organization'] == 1) ? "org" : "user",
96 "type" => ($mi['organization'] == 1) ? "org" : "user",
97 97 "user" => $ui['username'], "user" => $ui['username'],
98 98 "repo" => $mi['name']); "repo" => $mi['name']);
99 99 $src = rg_repo_name2base($rr) . $mi['name'] . ".git"; $src = rg_repo_name2base($rr) . $mi['name'] . ".git";
File tests/util.php changed (mode: 100644) (index e0cb505..fad5706)
... ... if ($r['code'] != 5) {
44 44 exit(1); exit(1);
45 45 } }
46 46
47 // test rg_template_table($dir, $data, $more) with no data
48 $r = rg_template_table("./util/t1", array(), array("a" => "A"));
49 $e = "XAX";
50 if (strcmp($r, $e) != 0) {
51 echo "util.php: nodata.html is not working (r=$r e=$e)!\n";
52 exit(1);
53 }
54
55 // test rg_template_table($dir, $data, $more) with data
56 $data = array(array("a" => "A", "b" => "B"), array("a" => "A2", "b" => "B2"));
57 $r = rg_template_table("./util/t2", $data, array("c" => "C"));
58 $e = "HEADCABCA2B2CFOOTC";
59 if (strcmp($r, $e) != 0) {
60 echo "util.php: rg_template_table is not working (r=$r e=$e)!\n";
61 exit(1);
62 }
63
47 64 echo "util: OK!\n"; echo "util: OK!\n";
48 65 ?> ?>
File tests/util/t1/nodata.html added (mode: 100644) (index 0000000..4e8e734)
1 X@@a@@X
File tests/util/t2/footer.html added (mode: 100644) (index 0000000..bc7f8e5)
1 FOOT@@c@@
File tests/util/t2/header.html added (mode: 100644) (index 0000000..5b8cfaa)
1 HEAD@@c@@
File tests/util/t2/line.html added (mode: 100644) (index 0000000..8b796b0)
1 @@a@@@@b@@@@c@@
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/catalinux/rocketgit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/catalinux/rocketgit

Clone this repository using git:
git clone git://git.rocketgit.com/user/catalinux/rocketgit

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main