xaizek / rocketgit (License: AGPLv3+) (since 2018-12-09)
Light and fast Git hosting solution suitable to serve both as a hub or as a personal code storage with its tickets, pull requests, API and much more.
Commit 12b0f0dc0503557effe906b6f7bf519768fdf766

Lots of fixes all over the place.
Mostly CSS fixes.
Added tidy checker for http_* tests.
Author: Catalin(ux) M. BOIE
Author date (UTC): 2015-04-21 22:23
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2015-04-21 22:23
Parent(s): 3c3d00aa66f86c25cb35f273f017d6f0ea4552b7
Signing key:
Tree: a7579eb3691732d1f85f331b298a20afe37cd86d
File Lines added Lines deleted
README.vm 0 17
TODO 9 4
inc/dispatch/dispatch.php 5 1
inc/git.inc.php 1 1
inc/user/repo-page.php 21 10
root/robots.txt 1 0
root/themes/default/download-vm.html 121 0
root/themes/default/download.html 9 5
root/themes/default/index.html 0 1
root/themes/default/main.css 15 11
root/themes/default/repo/bug/list/header.html 1 1
root/themes/default/repo/bug/show.html 1 1
root/themes/default/repo/diff.html 4 4
root/themes/default/repo/list/header.html 1 1
root/themes/default/tos.html 15 10
root/themes/default/user/keys/add.html 1 1
root/themes/default/user/keys/list/header.html 1 1
samples/rg.conf 5 0
samples/rocketgit.xml 0 0
tests/.gitignore 2 0
tests/git_log1.expected 10 10
tests/git_log1.final 10 10
tests/http.inc.php 12 0
File README.vm deleted (index 59d8bb0..0000000)
1 How to customize Fedora virtual machine image
2
3 - Generate new SSL keys
4 - Update the virtual machine to the latest version: "yum -y update".
5 - Edit /etc/sysconfig/clock to set the timezone (needs a restart of some
6 services or reboot).
7 - Change root password: run 'passwd' (initial password is 'aaaa')
8
9 - Allow this virtual machine to send mail (add it to the relay allow list).
10 - You may want to set a static IP address instead of DHCP.
11 - You may want to add it to the DNS server.
12 - Add a RNG device inside virtual machine?
13 - You may want to adjust logrotate times.
14 - Customize /etc/rocketgit/config.php
15 -
16
17 It takes around 2 minutes for the first boot to setup needed things to run.
File TODO changed (mode: 100644) (index e7d7c91..9498d65)
1 1 == Where I stopped last time == == Where I stopped last time ==
2 [ ] Switch to startssl certificates.
2 3 [ ] Add "Spread the word!" on website. [ ] Add "Spread the word!" on website.
3
4 4 [ ] Run unit testing. [ ] Run unit testing.
5 5 [ ] SPF? mail-ul ajunge in spam! [ ] SPF? mail-ul ajunge in spam!
6 [ ] Upload kvm image to downloads.rocketgit.com. Sign it? sha256 it?
7 [ ] Release virtual machine.
8 [ ] https access before first launch?
6 [ ] Rebuild virtual machine with the latest rocketgit version.
9 7 [ ] [ ]
10 8
11 9 == BEFORE NEXT RELEASE == == BEFORE NEXT RELEASE ==
10 [ ] On upgrade, we must restart the cache daemon?
11 [ ] Real SSL certificates.
12 [ ] Backup for rg2!
13 [ ] Sign vm images.
14 [ ] Run tidy on http_* tests to validate the HTML.
15 [ ] Check if link to repos are created in /var/lib/rocketgit/by_name.
16 I suspect they are not always created.
12 17 [ ] Add uid to events so we can delete old events for tests or abusing users? [ ] Add uid to events so we can delete old events for tests or abusing users?
13 18 [ ] Should we just set no password somehow for ssh access to be able to signal [ ] Should we just set no password somehow for ssh access to be able to signal
14 19 the user that has no key uploaded? the user that has no key uploaded?
File inc/dispatch/dispatch.php changed (mode: 100644) (index 47263dc..2e6520f)
... ... case 'tos':
75 75 break; break;
76 76
77 77 case 'download': case 'download':
78 $body .= rg_template('download.html', $rg);
78 $_sub = empty($paras) ? "" : array_shift($paras);
79 if (strcmp($_sub, 'vm') == 0)
80 $body .= rg_template('download-vm.html', $rg);
81 else
82 $body .= rg_template('download.html', $rg);
79 83 break; break;
80 84
81 85 case 'features': case 'features':
File inc/git.inc.php changed (mode: 100644) (index 058ca02..54743d1)
... ... function rg_git_diff($a, $template_file)
927 927 $f = rg_xss_safe($finfo['file']); $f = rg_xss_safe($finfo['file']);
928 928 $ret .= "<a name=\"$f\"></a>\n"; $ret .= "<a name=\"$f\"></a>\n";
929 929
930 $ret .= "<table class=\"chunk\" width=\"100%\">\n";
930 $ret .= "<table class=\"chunk\">\n";
931 931 $ret .= "<tr style=\"border: 1px; background: #dddddd\"><td colspan=\"4\">"; $ret .= "<tr style=\"border: 1px; background: #dddddd\"><td colspan=\"4\">";
932 932 if (strstr($finfo['flags'], "N")) if (strstr($finfo['flags'], "N"))
933 933 $ret .= "File <b>$f</b> added"; $ret .= "File <b>$f</b> added";
File inc/user/repo-page.php changed (mode: 100644) (index e1133d0..7989e48)
... ... if ($rg['ri']['ok'] != 1) {
27 27 return; return;
28 28 } }
29 29
30 $x = array();
31 $x['obj_id'] = $rg['ri']['repo_id'];
32 $x['type'] = 'repo';
33 $x['owner'] = $rg['ri']['uid'];
34 $x['uid'] = $rg['login_ui']['uid'];
35 $x['username'] = $rg['login_ui']['username'];
36 $x['needed_rights'] = 'A';
37 $x['ip'] = $rg['ip'];
38 $x['misc'] = "";
39 if (($rg['ri']['exists'] != 1) || (rg_rights_allow($db, $x) !== TRUE)) {
30 $allow = FALSE;
31 while (1) {
32 if ($rg['ri']['exists'] != 1)
33 break;
34
35 $x = array();
36 $x['obj_id'] = $rg['ri']['repo_id'];
37 $x['type'] = 'repo';
38 $x['owner'] = $rg['ri']['uid'];
39 $x['uid'] = $rg['login_ui']['uid'];
40 $x['username'] = $rg['login_ui']['username'];
41 $x['needed_rights'] = 'A';
42 $x['ip'] = $rg['ip'];
43 $x['misc'] = "";
44 if (rg_rights_allow($db, $x) !== TRUE)
45 break;
46
47 $allow = TRUE;
48 break;
49 }
50 if ($allow !== TRUE) {
40 51 $_repo_page .= rg_template("user/repo/deny.html", $rg); $_repo_page .= rg_template("user/repo/deny.html", $rg);
41 52 return; return;
42 53 } }
File root/robots.txt changed (mode: 100644) (index 99eda2f..c73cdc9)
... ... User-agent: *
2 2 Allow: / Allow: /
3 3 Disallow: /nonexisting Disallow: /nonexisting
4 4 Disallow: /op/logout Disallow: /op/logout
5 Disallow: /*?*
File root/themes/default/download-vm.html added (mode: 100644) (index 0000000..2e615a2)
1 <div class="islands">
2 <h2>Download - virtual machines</h2>
3
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">qemu based virtualization</div>
8
9 Steps to follow:<br />
10 - make sure libvirtd is started:<br />
11 <div class="xcode">
12 systemctl enable libvirtd<br />
13 systemctl start libvirtd
14 </div>
15 <br />
16
17 - download qemu image:<br />
18 <div class="xcode">
19 wget -c -O /var/lib/libvirt/images/rocketgit1-master.qcow2
20 http://downloads.rocketgit.com/vm/rocketgit1.qcow2.xz
21 </div>
22 <br />
23
24 - download libvirt vm description file:<br />
25 <div class="xcode">
26 wget -c -O /var/lib/libvirt/images/rocketgit.xml
27 http://downloads.rocketgit.com/vm/rocketgit.xml
28 </div>
29 <br />
30
31 - decompress qemu image:<br />
32 <div class="xcode">
33 cd /var/lib/libvirt/images/<br />
34 xz -v -d rocketgit1-master.qcow2.xz
35 </div>
36 <br />
37
38 - create a clone of the image to be able to start over or to make
39 multiple instances:<br />
40 <div class="xcode">
41 qemu-img create -f qcow2 -b rocketgit1-master.qcow2 rocketgit1.qcow2
42 </div>
43 <br />
44
45 - add the rocketgit1 virtual machine:<br />
46 <div class="xcode">
47 virsh define --file /var/lib/libvirt/images/rocketgit.xml
48 </div>
49 <br />
50
51 - make it start at boot:<br />
52 <div class="xcode">
53 virsh autostart rocketgit1
54 </div>
55 <br />
56
57 - now, you may want to change some virtual machine parameters using
58 virt-manager or 'virsh edit rocketgit1' command. Pay attention to
59 the network definition.<br />
60 <br />
61
62 - start the virtual machine:<br />
63 <div class="xcode">
64 virsh start rocketgit1
65 </div>
66 <br />
67
68 - attach to the console to find out the ip address:<br />
69 <div class="xcode">
70 virsh console rocketgit1</br />
71 # login as root with password 'aaaa'<br />
72 ip ad li dev eth0
73 </div>
74 <br />
75
76 - now, point your browser to the ip address found, using http or
77 https and create an admin account.<br />
78 <br />
79
80 - finally, you must check the following list because you may want to:<br />
81 * generate new SSL/TLS keys<br />
82 * Add the vm in the update plan (periodic 'yum update')<br />
83 * edit /etc/sysconfig/clock to set the timezone (needs a restart of
84 some services or reboot)<br />
85 * change root password: run 'passwd' (initial password is 'aaaa')<br />
86 * allow this virtual machine to send mail (add it to the relay allow list)<br />
87 * set a static IP address instead of DHCP<br />
88 * add it to the DNS server to be able to access it by name<br />
89 * adjust logrotate times<br />
90 * customize /etc/rocketgit/config.php<br />
91 Enjoy your new RocketGit instance!<br />
92 <br />
93
94 If you want to create a new RocketGit instance, you can create a new
95 image based on rocketgit1-master:
96 <div class="xcode">
97 cd /var/lib/libvirt/images/<br />
98 qemu-img create -f qcow2 -b rocketgit1-master.qcow2 rocketgit2.qcow2<br />
99 # edit rocketgit.xml and replace any reference of rocketgit1 to<br />
100 # rocketgit2; leave alone the reference to rocketgit1-master.qcow2<br />
101 virsh define --file rocketgit.xml<br />
102 virsh edit rocketgit2<br />
103 virsh autostart rocketgit2<br />
104 virsh start rocketgit2<br />
105 virsh console rocketgit2<br />
106 </div>
107
108 </div>
109 </div>
110 </div>
111
112 <div class="island_row">
113 <div class="island_cell">
114 <div class="island">
115 <div class="island_title">Soon for other virtualization solutions</div>
116 Stay tuned!
117 </div>
118 </div>
119 </div>
120
121 </div>
File root/themes/default/download.html changed (mode: 100644) (index 1d60ff9..3650165)
13 13 <div class="island_cell"> <div class="island_cell">
14 14 <div class="island"> <div class="island">
15 15 <div class="island_title">Fedora</div> <div class="island_title">Fedora</div>
16 From here you can download all the RPMs needed for a Fedora installation.
17 Allow us few days to prepare the packages.
16 If you are running a Fedora server, just add DinoRepo to your system
17 and install rocketgit package:<br />
18 <div class="xcode">
19 yum install http://kernel.embedromix.ro/dinorepo-0.0.10-1.noarch.rpm<br />
20 yum install rocketgit
21 </div>
18 22 </div> </div>
19 23 </div> </div>
20 24 </div> </div>
 
25 29 <div class="island_title">Other distributions</div> <div class="island_title">Other distributions</div>
26 30 In the near future, we will provide packages ready for installation In the near future, we will provide packages ready for installation
27 31 for all major distributions. If you know how to do a package, please for all major distributions. If you know how to do a package, please
28 help us. Thank you.
32 help us. Thank you!
29 33 </div> </div>
30 34 </div> </div>
31 35
32 36 <div class="island_cell"> <div class="island_cell">
33 37 <div class="island"> <div class="island">
34 38 <div class="island_title">Virtual machines images</div> <div class="island_title">Virtual machines images</div>
35 For KVM based machines, use this
36 <a href="http://downloads.embedromix.ro/rocketgit-kvm-0.22.qcow2">link</a> (193MiB).
39 For KVM based virtualization, use this
40 <a href="/op/download/vm">link</a>.
37 41 Please allow us few days to provide images for VirtualBox and VMWare. Please allow us few days to provide images for VirtualBox and VMWare.
38 42 We will do our best to go under 200MiB per image. We will do our best to go under 200MiB per image.
39 43 </div> </div>
File root/themes/default/index.html changed (mode: 100644) (index 1a7cfdf..c3f61ac)
1 1 <!DOCTYPE html> <!DOCTYPE html>
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 2 <head> <head>
4 3 <title>RocketGit</title> <title>RocketGit</title>
5 4 <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
File root/themes/default/main.css changed (mode: 100644) (index 12e3e61..552211c)
... ... form input[type="submit"] {
275 275
276 276 .diff {} .diff {}
277 277
278 .chunk {}
278 .chunk {
279 width: 100%;
280 }
281 .chunk td {
282 white-space: pre-wrap;
283 }
279 284
280 .numbers { text-align: right; }
285 .numbers {
286 text-align: right;
287 width: 10px;
288 }
289
290 .codeline {
291 font-family: monospace;
292 font-size: 9pt;
293 }
281 294
282 295 .submenu { .submenu {
283 296 border: 1px solid #CCCCCC; border: 1px solid #CCCCCC;
 
... ... form input[type="submit"] {
434 447 box-shadow: 0px 2px 3px #666666; box-shadow: 0px 2px 3px #666666;
435 448 } }
436 449
437 .tos {
438 margin-top: 5px;
439 xxx-border: 1px solid #999998;
440 padding: 5px;
441 xxx-border-radius: 4px 4px 4px 4px;
442 display: table;
443 }
444 .tos ul { x-list-style-type: none; padding-left: 15px; }
445
446 450 .page_title { .page_title {
447 451 margin-top: 5px; margin-top: 5px;
448 452 font-size: 13pt; font-size: 13pt;
File root/themes/default/repo/bug/list/header.html changed (mode: 100644) (index ae04d36..a834312)
1 <table>
1 <table summary="bug info">
2 2 <tr> <tr>
3 3 <th>ID</th> <th>ID</th>
4 4 <th>Creation date (UTC)</th> <th>Creation date (UTC)</th>
File root/themes/default/repo/bug/show.html changed (mode: 100644) (index ba0fa76..812ae71)
1 1 <div class="bug"> <div class="bug">
2 2 <!-- some buttons: watch/unwatch/etc. --> <!-- some buttons: watch/unwatch/etc. -->
3 3 <div class="horizontal_buttons"> <div class="horizontal_buttons">
4 <table>
4 <table summary="bug buttons">
5 5 <tbody> <tbody>
6 6 <tr> <tr>
7 7 <td>@@edit_form@@</td> <td>@@edit_form@@</td>
File root/themes/default/repo/diff.html changed (mode: 100644) (index 1cca337..14137f4)
1 1 <tr> <tr>
2 <td width="5%" class="numbers">@@line_left@@</td>
3 <td width="5%" class="numbers">@@line_right@@</td>
4 <td width="45%" bgcolor="@@left_color@@">@@left@@</td>
5 <td width="45%" bgcolor="@@right_color@@">@@right@@</td>
2 <td class="numbers">@@line_left@@</td>
3 <td class="numbers">@@line_right@@</td>
4 <td class="codeline" bgcolor="@@left_color@@">@@left@@</td>
5 <td class="codeline" bgcolor="@@right_color@@">@@right@@</td>
6 6 </tr> </tr>
File root/themes/default/repo/list/header.html changed (mode: 100644) (index a04eaf3..399854e)
1 1 <div class="page_title">Repositories</div> <div class="page_title">Repositories</div>
2 <table>
2 <table summary="repos list">
3 3 <tr> <tr>
4 4 <th>User / name</th> <th>User / name</th>
5 5 <th>Description</th> <th>Description</th>
File root/themes/default/tos.html changed (mode: 100644) (index f499325..76a10fd)
1 <div class="tos">
2 <h2>Terms of service v1</h2>
3 <br />
1 <div class="islands">
2 <h2>Terms of service</h2>
4 3
5 <ul>
6 <li>You must not abuse RocketGit servers.</li>
7 <li>You must not abuse other's servers using RocketGit as a proxy.</li>
8 <li>You must not upload illegal content.</li>
9 <li>You must not harass other users.</li>
10 <li>You must enjoy your stay here.</li>
11 </ul>
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7
8 - You must not abuse RocketGit servers.<br />
9 - You must not abuse other's servers using RocketGit as a proxy.<br />
10 - You must not upload illegal content.<br />
11 - You must not harass other users.<br />
12 - You must enjoy your stay here.<br />
13
14 </div>
15 </div>
16 </div>
12 17 </div> </div>
File root/themes/default/user/keys/add.html changed (mode: 100644) (index d220990..f51c1be)
9 9 <input type="hidden" name="token" value="@@rg_form_token@@" /> <input type="hidden" name="token" value="@@rg_form_token@@" />
10 10
11 11 <label for="key" class="form_item_title">Key string (starts with ssh-...)</label><br /> <label for="key" class="form_item_title">Key string (starts with ssh-...)</label><br />
12 <textarea name="key" value="@@key@@" rows="4" cols="50"></textarea>
12 <textarea name="key" rows="6" cols="80">@@key@@</textarea>
13 13 <br /> <br />
14 14 <br /> <br />
15 15
File root/themes/default/user/keys/list/header.html changed (mode: 100644) (index 48edae8..f5056b9)
7 7 <input type="hidden" name="delete" value="1" /> <input type="hidden" name="delete" value="1" />
8 8 <input type="hidden" name="token" value="@@rg_form_token@@" /> <input type="hidden" name="token" value="@@rg_form_token@@" />
9 9
10 <table>
10 <table summary="keys list">
11 11 <tr> <tr>
12 12 <th>Select</th> <th>Select</th>
13 13 <th>Upload date (UTC)</th> <th>Upload date (UTC)</th>
File samples/rg.conf changed (mode: 100644) (index f49be15..c9231d6)
82 82 # all rest # all rest
83 83 RewriteRule (.*) /index.php?rwe=1&vv=$1 [last,qsappend] RewriteRule (.*) /index.php?rwe=1&vv=$1 [last,qsappend]
84 84
85 # Security
86 <IfModule mod_headers.c>
87 Header always append X-Frame-Options DENY
88 </IfModule>
89
85 90 LogLevel warn LogLevel warn
86 91 SSLEngine on SSLEngine on
87 92 SSLProtocol all -SSLv2 SSLProtocol all -SSLv2
File samples/rocketgit.xml renamed from samples/rocketgit1.xml (similarity 100%)
File tests/.gitignore changed (mode: 100644) (index 5da79e9..96b7a28)
... ... repos
7 7 afile.txt afile.txt
8 8 err-* err-*
9 9 *.diff *.diff
10 http.tidy.in
11 http.tidy.out
File tests/git_log1.expected changed (mode: 100644) (index a23c181..821a524)
1 1 <div class="diff"> <div class="diff">
2 2 <br /> <br />
3 3 <a name="dis1"></a> <a name="dis1"></a>
4 <table class="chunk" width="100%">
4 <table class="chunk">
5 5 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> changed (mode: 100644) (index 2c4179b..2bf9115):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> changed (mode: 100644) (index 2c4179b..2bf9115):</td></tr>
6 6 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee
7 7 2 1 #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2 1 #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
11 11 <div class="diff"> <div class="diff">
12 12 <br /> <br />
13 13 <a name="dis1"></a> <a name="dis1"></a>
14 <table class="chunk" width="100%">
14 <table class="chunk">
15 15 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> added (mode: 100644) (index 0000000..2c4179b):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> added (mode: 100644) (index 0000000..2c4179b):</td></tr>
16 16 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
17 17 &nbsp; 2 #eeeeee #00ff00 baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 2 #eeeeee #00ff00 baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
20 20 <div class="diff"> <div class="diff">
21 21 <br /> <br />
22 22 <a name="a b c"></a> <a name="a b c"></a>
23 <table class="chunk" width="100%">
23 <table class="chunk">
24 24 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a b c</b> added (mode: 100644) (index 0000000..72943a1):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a b c</b> added (mode: 100644) (index 0000000..72943a1):</td></tr>
25 25 &nbsp; 1 #eeeeee #00ff00 aaa &nbsp; 1 #eeeeee #00ff00 aaa
26 26 </table> </table>
 
28 28 <div class="diff"> <div class="diff">
29 29 <br /> <br />
30 30 <a name="a3"></a> <a name="a3"></a>
31 <table class="chunk" width="100%">
31 <table class="chunk">
32 32 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> deleted (index 193814c..0000000):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> deleted (index 193814c..0000000):</td></tr>
33 33 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee
34 34 </table> </table>
 
36 36 <div class="diff"> <div class="diff">
37 37 <br /> <br />
38 38 <a name="a3"></a> <a name="a3"></a>
39 <table class="chunk" width="100%">
39 <table class="chunk">
40 40 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> renamed from a2 (similarity 100%):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> renamed from a2 (similarity 100%):</td></tr>
41 41 </table> </table>
42 42 <br /> <br />
43 43 <a name="c"></a> <a name="c"></a>
44 <table class="chunk" width="100%">
44 <table class="chunk">
45 45 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>c</b> added (mode: 100644) (index 0000000..8ded189):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>c</b> added (mode: 100644) (index 0000000..8ded189):</td></tr>
46 46 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaa
47 47 </table> </table>
 
49 49 <div class="diff"> <div class="diff">
50 50 <br /> <br />
51 51 <a name="a2"></a> <a name="a2"></a>
52 <table class="chunk" width="100%">
52 <table class="chunk">
53 53 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a2</b> added (mode: 100644) (index 0000000..193814c):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a2</b> added (mode: 100644) (index 0000000..193814c):</td></tr>
54 54 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
55 55 </table> </table>
 
57 57 <div class="diff"> <div class="diff">
58 58 <br /> <br />
59 59 <a name="empty.txt"></a> <a name="empty.txt"></a>
60 <table class="chunk" width="100%">
60 <table class="chunk">
61 61 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>empty.txt</b> added (mode: 100644) (index 0000000..e69de29):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>empty.txt</b> added (mode: 100644) (index 0000000..e69de29):</td></tr>
62 62 </table> </table>
63 63 </div> </div>
64 64 <div class="diff"> <div class="diff">
65 65 <br /> <br />
66 66 <a name="xx&quot;yy"></a> <a name="xx&quot;yy"></a>
67 <table class="chunk" width="100%">
67 <table class="chunk">
68 68 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>xx&quot;yy</b> added (mode: 100644) (index 0000000..e69de29):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>xx&quot;yy</b> added (mode: 100644) (index 0000000..e69de29):</td></tr>
69 69 </table> </table>
70 70 </div> </div>
71 71 <div class="diff"> <div class="diff">
72 72 <br /> <br />
73 73 <a name="a"></a> <a name="a"></a>
74 <table class="chunk" width="100%">
74 <table class="chunk">
75 75 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a</b> added (mode: 100644) (index 0000000..193814c):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a</b> added (mode: 100644) (index 0000000..193814c):</td></tr>
76 76 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
77 77 </table> </table>
File tests/git_log1.final changed (mode: 100644) (index a23c181..821a524)
1 1 <div class="diff"> <div class="diff">
2 2 <br /> <br />
3 3 <a name="dis1"></a> <a name="dis1"></a>
4 <table class="chunk" width="100%">
4 <table class="chunk">
5 5 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> changed (mode: 100644) (index 2c4179b..2bf9115):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> changed (mode: 100644) (index 2c4179b..2bf9115):</td></tr>
6 6 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee
7 7 2 1 #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2 1 #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
11 11 <div class="diff"> <div class="diff">
12 12 <br /> <br />
13 13 <a name="dis1"></a> <a name="dis1"></a>
14 <table class="chunk" width="100%">
14 <table class="chunk">
15 15 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> added (mode: 100644) (index 0000000..2c4179b):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>dis1</b> added (mode: 100644) (index 0000000..2c4179b):</td></tr>
16 16 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
17 17 &nbsp; 2 #eeeeee #00ff00 baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 2 #eeeeee #00ff00 baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
20 20 <div class="diff"> <div class="diff">
21 21 <br /> <br />
22 22 <a name="a b c"></a> <a name="a b c"></a>
23 <table class="chunk" width="100%">
23 <table class="chunk">
24 24 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a b c</b> added (mode: 100644) (index 0000000..72943a1):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a b c</b> added (mode: 100644) (index 0000000..72943a1):</td></tr>
25 25 &nbsp; 1 #eeeeee #00ff00 aaa &nbsp; 1 #eeeeee #00ff00 aaa
26 26 </table> </table>
 
28 28 <div class="diff"> <div class="diff">
29 29 <br /> <br />
30 30 <a name="a3"></a> <a name="a3"></a>
31 <table class="chunk" width="100%">
31 <table class="chunk">
32 32 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> deleted (index 193814c..0000000):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> deleted (index 193814c..0000000):</td></tr>
33 33 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee 1 &nbsp; #ff0000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #eeeeee
34 34 </table> </table>
 
36 36 <div class="diff"> <div class="diff">
37 37 <br /> <br />
38 38 <a name="a3"></a> <a name="a3"></a>
39 <table class="chunk" width="100%">
39 <table class="chunk">
40 40 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> renamed from a2 (similarity 100%):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a3</b> renamed from a2 (similarity 100%):</td></tr>
41 41 </table> </table>
42 42 <br /> <br />
43 43 <a name="c"></a> <a name="c"></a>
44 <table class="chunk" width="100%">
44 <table class="chunk">
45 45 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>c</b> added (mode: 100644) (index 0000000..8ded189):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>c</b> added (mode: 100644) (index 0000000..8ded189):</td></tr>
46 46 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaa
47 47 </table> </table>
 
49 49 <div class="diff"> <div class="diff">
50 50 <br /> <br />
51 51 <a name="a2"></a> <a name="a2"></a>
52 <table class="chunk" width="100%">
52 <table class="chunk">
53 53 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a2</b> added (mode: 100644) (index 0000000..193814c):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a2</b> added (mode: 100644) (index 0000000..193814c):</td></tr>
54 54 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
55 55 </table> </table>
 
57 57 <div class="diff"> <div class="diff">
58 58 <br /> <br />
59 59 <a name="empty.txt"></a> <a name="empty.txt"></a>
60 <table class="chunk" width="100%">
60 <table class="chunk">
61 61 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>empty.txt</b> added (mode: 100644) (index 0000000..e69de29):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>empty.txt</b> added (mode: 100644) (index 0000000..e69de29):</td></tr>
62 62 </table> </table>
63 63 </div> </div>
64 64 <div class="diff"> <div class="diff">
65 65 <br /> <br />
66 66 <a name="xx&quot;yy"></a> <a name="xx&quot;yy"></a>
67 <table class="chunk" width="100%">
67 <table class="chunk">
68 68 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>xx&quot;yy</b> added (mode: 100644) (index 0000000..e69de29):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>xx&quot;yy</b> added (mode: 100644) (index 0000000..e69de29):</td></tr>
69 69 </table> </table>
70 70 </div> </div>
71 71 <div class="diff"> <div class="diff">
72 72 <br /> <br />
73 73 <a name="a"></a> <a name="a"></a>
74 <table class="chunk" width="100%">
74 <table class="chunk">
75 75 <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a</b> added (mode: 100644) (index 0000000..193814c):</td></tr> <tr style="border: 1px; background: #dddddd"><td colspan="4">File <b>a</b> added (mode: 100644) (index 0000000..193814c):</td></tr>
76 76 &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &nbsp; 1 #eeeeee #00ff00 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
77 77 </table> </table>
File tests/http.inc.php changed (mode: 100644) (index d323c52..44344d8)
... ... function do_req($url, &$data, &$headers)
46 46 $ret['body'] = substr($r, $header_size); $ret['body'] = substr($r, $header_size);
47 47 curl_close($c); curl_close($c);
48 48
49 // Check with tidy
50 if (!empty($ret['body'])) { // we may have a redirect
51 file_put_contents("http.tidy.in", $ret['body']);
52 $cmd = "tidy -errors -utf8 -file http.tidy.out http.tidy.in";
53 system($cmd, $ec);
54 if ($ec != 0) {
55 echo "tidy ec=$ec\n";
56 echo file_get_contents("http.tidy.out");
57 exit(1);
58 }
59 }
60
49 61 // find sid // find sid
50 62 $x = preg_match('/Set-Cookie: sid=([a-zA-Z0-9]*)/', $ret['header'], $matches); $x = preg_match('/Set-Cookie: sid=([a-zA-Z0-9]*)/', $ret['header'], $matches);
51 63 if (($x === FALSE) || (!isset($matches[1]))) { if (($x === FALSE) || (!isset($matches[1]))) {
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://code.reversed.top/user/xaizek/rocketgit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/rocketgit

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