List of commits:
Subject Hash Author Date (UTC)
Bulk 152dd3be1dc42e1f3585d43750c3c1c42551ae27 Catalin(ux) M. BOIE 2012-04-19 04:06:55
Bulk 2ec92b1397e09b0714d1ee423dcd72f4a220b332 Catalin(ux) M. BOIE 2012-04-16 06:43:38
aa 63a5cea75e640e6c11975bf6ab1c7bc49747a6bb Catalin(ux) M. BOIE 2012-03-26 21:09:23
Misc fixes eac04dc796b2c315b65753025e1e311bc25e83d7 Catalin(ux) M. BOIE 2012-03-26 18:14:32
Fixes for schema autoupdate 63d2a1a4f4c0498135a96f1a3d374868dc3d3535 Catalin(ux) M. BOIE 2012-03-23 04:19:09
Test CSRF token for the rights for a repo. e2d32e100f724e80ee623f191784ce429156ac39 Catalin(ux) M. BOIE 2012-03-22 03:54:37
Fixed anon push without create branch rights 3d474b7a569b16d87a426d4c3b971a50b3299894 Catalin(ux) M. BOIE 2012-03-22 03:43:06
Use rg_repos for repositories e5bda9469fddee7f201c22dfd89292830f4c342b Catalin(ux) M. BOIE 2012-03-22 03:42:06
Corrected <label> tags 7e8621e79480b8964e04de8c54f10f1a702ea1fd Catalin(ux) M. BOIE 2012-03-20 04:25:38
Fixed unit testing 31bfe5672e7d3b620d0e7b3c07ff72d84c149001 Catalin(ux) M. BOIE 2012-03-17 17:21:21
Fixed hook_update.sh unit testing 86c4079e81efc5a4a7878e91d8f4318e443961f7 Catalin(ux) M. BOIE 2012-03-16 22:32:35
Bulk updates f696473a7faee50782d3cc01e96cc85e7900b3de Catalin(ux) M. BOIE 2012-03-14 04:38:23
Style changes. 87e30b1df29b7c6efa438be1cf369192a8068655 Catalin(ux) M. BOIE 2012-02-19 22:50:22
Bulk 0923407bff68a58a0b7b034f8a6b4489ece5b237 Catalin(ux) M. BOIE 2012-02-12 22:21:44
Bulk update 30310488bca37cefeba96b52b71c9c3e72c32907 Catalin(ux) M. BOIE 2011-12-15 23:34:03
Profiling tests. afd1df2940fe440cde9b8ede988ff24c051a10d6 Catalin(ux) M. BOIE 2011-11-03 22:10:13
More bulk updates. a2a2e2545eaad61d0c675ea2afb801f207534515 Catalin(ux) M. BOIE 2011-11-03 22:09:34
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
Commit 152dd3be1dc42e1f3585d43750c3c1c42551ae27 - Bulk
Author: Catalin(ux) M. BOIE
Author date (UTC): 2012-04-19 04:06
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2012-04-19 04:06
Parent(s): 2ec92b1397e09b0714d1ee423dcd72f4a220b332
Signing key:
Tree: 578b4099f1d4303f3f902881ff70a32f061d5516
File Lines added Lines deleted
inc/git.inc.php 2 2
inc/user/repo-page.php 22 20
root/themes/default/index.php 13 5
root/themes/default/main.css 58 66
root/themes/default/repo/main.html 32 18
root/themes/default/repo/source.html 0 6
root/themes/default/repo/source_r.html 5 0
File inc/git.inc.php changed (mode: 100644) (index 4aba847..099e329)
... ... function rg_git_branches_and_tags($repo_dir, $base_url, $current_ref)
972 972 continue; continue;
973 973 } }
974 974
975 $_t = "<div class=\"$o\">\n";
975 $_t = "<div class=\"branch_or_tag $o\">\n";
976 976 $_t .= "<ul>\n"; $_t .= "<ul>\n";
977 977 $_l = array(); $_l = array();
978 978 foreach ($list as $name) { foreach ($list as $name) {
 
... ... function rg_git_branches_and_tags($repo_dir, $base_url, $current_ref)
990 990 . "<a href=\"" . $base_url . "/source/log/$o/$ename" . "\">" . "<a href=\"" . $base_url . "/source/log/$o/$ename" . "\">"
991 991 . $add_s . $name . $add_e . $add_s . $name . $add_e
992 992 . "</a>" . "</a>"
993 . "</li>";
993 . "</li>\n";
994 994 } }
995 995 $_t .= implode("\n", $_l); $_t .= implode("\n", $_l);
996 996 $_t .= "</ul>\n"; $_t .= "</ul>\n";
File inc/user/repo-page.php changed (mode: 100644) (index 5e11581..137f1b7)
2 2 rg_log("/inc/user/repo-page"); rg_log("/inc/user/repo-page");
3 3
4 4 $_repo_page = ""; $_repo_page = "";
5 $_repo_page_body = "";
6 5
7 6 if (rg_user_ok($rr['user']) !== TRUE) { if (rg_user_ok($rr['user']) !== TRUE) {
8 7 $_repo_page .= "Invalid user!"; $_repo_page .= "Invalid user!";
 
... ... putenv("GIT_DIR=$repo_dir");
49 48 if (empty($subop)) if (empty($subop))
50 49 $subop = "source"; $subop = "source";
51 50
51 $_more['repo_body'] = "";
52 $_more['repo_right'] = "";
53
52 54 if (strcmp($subop, "admin") == 0) { if (strcmp($subop, "admin") == 0) {
53 55 if ($can_admin != 1) if ($can_admin != 1)
54 56 rg_security_violation("User is not admin!"); rg_security_violation("User is not admin!");
55 57
56 58 include($INC . "/user/repo/admin.php"); include($INC . "/user/repo/admin.php");
57 $_repo_page_body .= $_admin;
59 $_repo_body .= $_admin;
58 60 } else if (strcmp($subop, "source") == 0) { } else if (strcmp($subop, "source") == 0) {
59 61 $subop = array_shift($paras); $subop = array_shift($paras);
60 62
 
... ... if (strcmp($subop, "admin") == 0) {
67 69 rg_log("DEBUG: _more: " . print_r($_more, TRUE)); rg_log("DEBUG: _more: " . print_r($_more, TRUE));
68 70 $_more = array_merge($_more, $bt); $_more = array_merge($_more, $bt);
69 71
70 $_repo_page_body .= rg_template("repo/source.html", $_more);
72 $_repo_body .= rg_template("repo/source.html", $_more);
71 73
72 74 rg_log("DEBUG: subop=[$subop]"); rg_log("DEBUG: subop=[$subop]");
73 75 if (strcmp($subop, "tree") == 0) { if (strcmp($subop, "tree") == 0) {
 
... ... if (strcmp($subop, "admin") == 0) {
80 82
81 83 if (strcmp($type, "tree") == 0) { if (strcmp($type, "tree") == 0) {
82 84 $_tree = rg_git_ls_tree($ref, implode("/", $paras)); $_tree = rg_git_ls_tree($ref, implode("/", $paras));
83 $_repo_page_body .= rg_template_table("repo/tree", $_tree, $_more);
85 $_repo_body .= rg_template_table("repo/tree", $_tree, $_more);
84 86 } else if (strcmp($type, "blob") == 0) { } else if (strcmp($type, "blob") == 0) {
85 87 // TODO: transform path in tree // TODO: transform path in tree
86 88 /* /*
 
... ... if (strcmp($subop, "admin") == 0) {
89 91 "obj" => $obj, "obj" => $obj,
90 92 "HTML:content" => rg_template_list($c) "HTML:content" => rg_template_list($c)
91 93 ); );
92 $_repo_page_body .= rg_template("repo/blob.html",
94 $_repo_body .= rg_template("repo/blob.html",
93 95 array_merge($blob, $_more)); array_merge($blob, $_more));
94 96 */ */
95 97 } }
 
... ... if (strcmp($subop, "admin") == 0) {
97 99 $log = rg_git_log(10, "", $ref, FALSE); $log = rg_git_log(10, "", $ref, FALSE);
98 100 if ($log === FALSE) { if ($log === FALSE) {
99 101 rg_log("Error generating log (" . rg_git_error() . ")!"); rg_log("Error generating log (" . rg_git_error() . ")!");
100 $_repo_page_body .= "Error generating log!";
102 $_repo_body .= "Error generating log!";
101 103 // TODO: rg_internal_error? // TODO: rg_internal_error?
102 104 } else { } else {
103 105 //rg_log("DEBUG: log: " . print_r($log, TRUE)); //rg_log("DEBUG: log: " . print_r($log, TRUE));
104 $_repo_page_body .= rg_git_log_template($log,
106 $_repo_body .= rg_git_log_template($log,
105 107 "repo/log", $_more); "repo/log", $_more);
106 108 } }
107 109 } }
108
110 $_repo_right = rg_template("repo/source_r.html", $_more);
109 111 } else if (strcmp($subop, "issues") == 0) { } else if (strcmp($subop, "issues") == 0) {
110 $_repo_page_body .= rg_template("repo/issues.html", $_more);
112 $_repo_body .= rg_template("repo/issues.html", $_more);
111 113 } else if (strcmp($subop, "stats") == 0) { } else if (strcmp($subop, "stats") == 0) {
112 $_repo_page_body .= rg_template("repo/stats.html", $_more);
114 $_repo_body .= rg_template("repo/stats.html", $_more);
113 115 } else if (strcmp($subop, "mrs") == 0) { } else if (strcmp($subop, "mrs") == 0) {
114 $_repo_page_body .= rg_template("repo/mrs.html", $_more);
116 $_repo_body .= rg_template("repo/mrs.html", $_more);
115 117
116 118 $r = rg_mr_load($db, $ri['repo_id'], 20); $r = rg_mr_load($db, $ri['repo_id'], 20);
117 119 if ($r === FALSE) { if ($r === FALSE) {
118 $_repo_page_body .= "Error getting merge request list ("
120 $_repo_body .= "Error getting merge request list ("
119 121 . rg_mr_error() . ")."; . rg_mr_error() . ").";
120 122 } else { } else {
121 $_repo_page_body .= rg_template_table("repo/mr/list", $r, $_more);
123 $_repo_body .= rg_template_table("repo/mr/list", $r, $_more);
122 124 } }
123 125 } else if (strcmp($subop, "mr") == 0) { } else if (strcmp($subop, "mr") == 0) {
124 126 $mr = preg_replace('/[^0-9a-zA-Z_]/', '', $paras[0]); $mr = preg_replace('/[^0-9a-zA-Z_]/', '', $paras[0]);
125 127 $r = rg_mr_load_one($db, $ri['repo_id'], $mr); $r = rg_mr_load_one($db, $ri['repo_id'], $mr);
126 128 if ($r === FALSE) { if ($r === FALSE) {
127 $_repo_page_body .= "Error getting merge request (" . rg_mr_error() . ").";
129 $_repo_body .= "Error getting merge request (" . rg_mr_error() . ").";
128 130 } else { } else {
129 $_repo_page_body .= rg_template("repo/mr/page.html", $r, $_more);
131 $_repo_body .= rg_template("repo/mr/page.html", $r, $_more);
130 132 } }
131 133 } else if (strcmp($subop, "commit") == 0) { } else if (strcmp($subop, "commit") == 0) {
132 134 $commit = rg_git_reference($paras[0]); $commit = rg_git_reference($paras[0]);
 
... ... if (strcmp($subop, "admin") == 0) {
146 148 rg_log("log: " . print_r($log, TRUE)); rg_log("log: " . print_r($log, TRUE));
147 149
148 150 // stats // stats
149 $_repo_page_body .= rg_git_files_stats($log[0]['files'], "repo/fstat");
151 $_repo_body .= rg_git_files_stats($log[0]['files'], "repo/fstat");
150 152
151 153 // diff // diff
152 154 //rg_log("patch: " . print_r($log[0]['patches'], TRUE)); //rg_log("patch: " . print_r($log[0]['patches'], TRUE));
153 $_repo_page_body .= rg_git_diff($log[0]['patches'], "repo/diff.html");
155 $_repo_body .= rg_git_diff($log[0]['patches'], "repo/diff.html");
154 156 } }
155 157
156 158 $ri2 = $ri; $ri2 = $ri;
157 159 $ri2['default_rights'] = implode(", ", rg_rights_text("repo", $ri['default_rights'])); $ri2['default_rights'] = implode(", ", rg_rights_text("repo", $ri['default_rights']));
158 160 $ri2['max_commit_size'] = $ri['max_commit_size'] == 0 ? "unlimited" : rg_1024($ri['max_commit_size']); $ri2['max_commit_size'] = $ri['max_commit_size'] == 0 ? "unlimited" : rg_1024($ri['max_commit_size']);
159 161 $ri2['max_users'] = $ri['max_users'] == 0 ? "unlimited" : rg_1000($ri['max_users']); $ri2['max_users'] = $ri['max_users'] == 0 ? "unlimited" : rg_1000($ri['max_users']);
160 $_repo_page_head = rg_template("repo/main.html", array_merge($ri2, $_more));
161
162 $_repo_page = $_repo_page_head . $_repo_page_body;
163 162
163 $_more['HTML:repo_body'] = $_repo_body;
164 $_more['HTML:repo_right'] = $_repo_right;
165 $_repo_page = rg_template("repo/main.html", array_merge($ri2, $_more));
164 166 ?> ?>
File root/themes/default/index.php changed (mode: 100644) (index 9b6d28d..802dcd7)
11 11 <div id="container"> <div id="container">
12 12
13 13 <div id="header"> <div id="header">
14 <div style="float: left">
15 <img src="<?php echo $THEME_URL; ?>/logo/rg4.png" /><br />
16 <b>RocketGit</b>
14 <div style="float: right; padding: 5px;">
15 <b><?php echo $rg_username; ?></b>
17 16 </div> </div>
18 17
19 <div style="float: right"><b><?php echo $rg_username; ?></b></div>
18 <div style="float: left; font-size:11pt; padding: 5px 20px 5px 0px;">
19 <a style="text-decoration: none; color: red;" href="/"><b>RocketGit</b></a>
20 </div>
20 21
21 22 <div id="menus"> <div id="menus">
22 23 <?php echo $menu; ?> <?php echo $menu; ?>
 
28 29 </div> </div>
29 30
30 31 <div id="footer"> <div id="footer">
31 <small>Copyright: <a href="http://kernel.embedromix.ro" target="_new">Catalin(ux) M. BOIE</a></small>
32 <div style="float: left; padding: 5px;">
33 <img src="<?php echo $THEME_URL; ?>/logo/rg4.png" /><br />
34 <b>RocketGit</b>
35 </div>
36
37 <div style="float: left; padding: 5px;">
38 <small>Copyright: <a href="http://kernel.embedromix.ro" target="_new">Catalin(ux) M. BOIE</a></small>
39 </div>
32 40 </div> </div>
33 41
34 42 <div id="profiling"> <div id="profiling">
File root/themes/default/main.css changed (mode: 100644) (index c584eca..8bcfbd6)
6 6 body { body {
7 7 font-family: sans-serif; font-family: sans-serif;
8 8 font-size: 10pt; font-size: 10pt;
9 line-height: 100%;
9 line-height: 105%;
10 10 } }
11 11
12 12 table { table {
13 13 border-collapse: collapse; border-collapse: collapse;
14 14 border: 1px solid #000; border: 1px solid #000;
15 background: #eeeeee;
15 background-color: #eeeeee;
16 16 color: #000; color: #000;
17 17 border-spacing: 1px; border-spacing: 1px;
18 18 padding: 1px; padding: 1px;
 
... ... th, td {
26 26 word-wrap: break-word; word-wrap: break-word;
27 27 } }
28 28
29 #container {
30 }
31
32 .white_border {
33 border: 1px solid #eeeeee;
34 }
35
36 #menus {
37 padding-left: 110px;
38 }
39
40 .menu {
41 padding: 7px;
42 white-space: nowrap;
43 }
29 #container { background-color: #eeeeee; }
44 30
45 .menu ul {
46 list-style-type: none;
47 }
31 .white_border { border: 1px solid #eeeeee; }
48 32
49 .menu ul li {
50 display: inline;
51 }
33 #menus {}
52 34
35 .menu { padding: 4px 0px; }
36 .menu ul { list-style-type: none; }
37 .menu ul li { display: inline; }
53 38 .menu ul li a { .menu ul li a {
54 39 text-decoration: none; text-decoration: none;
55 40 color: #666666; color: #666666;
56 41 font-size: 10pt; font-size: 10pt;
57 42 padding: 3px 13px; padding: 3px 13px;
58 background-color: #eeeeee;
59 43 border: 1px solid #cccccc; border: 1px solid #cccccc;
60 44 border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
61 45 } }
46 .menu ul li a:hover { border: 1px solid #999999; }
62 47
63 .menu ul li a:hover {
64 border: 1px solid #999999;
65 }
66
67 .junk {
68 }
48 .junk {}
69 49
70 .branch { padding: 5px; }
71 .branch ul { list-style-type: none; }
72 .branch li { display: inline; }
73 .branch ul li a {
74 padding: 1px 2px;
50 .branch_or_tag { padding: 5px; }
51 .branch_or_tag ul { list-style-type: none; }
52 .branch_or_tag ul li a {
53 padding: 2px 2px;
75 54 text-decoration: none; text-decoration: none;
76 55 color: black; color: black;
77 background-color: #a0ffa0;
78 border: 1px solid black;
79 border-radius: 4px 4px 4px 4px;
80 font-size: 9pt;
81 }
82
83 .tag { padding: 5px; }
84 .tag ul { list-style-type: none; }
85 .tag li { display: inline; }
86 .tag ul li a {
87 padding: 1px 2px;
88 text-decoration: none;
89 color: black;
90 background-color: #FFFFa0;
91 56 border: 1px solid black; border: 1px solid black;
92 57 border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
93 58 font-size: 9pt; font-size: 9pt;
59 margin: 2px;
60 display: block;
94 61 } }
62 .branch ul li a { background-color: #a0ffa0; }
63 .tag ul li a { background-color: #ffffa0; }
95 64
96 65 #header { #header {
97 border: 1px solid #eeeeee;
98 background-color: #eeeeee;
99 padding: 7px;
100 height: 55px;
66 padding: 5px;
101 67 } }
102 68
103 69 #main { #main {
104 70 clear: both; clear: both;
105 border-top: 1px solid #000000;
106 background-color: #eeeeee;
107 padding: 10px 5px;
71 border-top: 1px solid #cccccc;
72 padding: 5px;
108 73 } }
109 74
110 75 #footer { #footer {
111 border-top: 1px solid #000000;
112 background-color: #eeeeee;
76 clear: both;
77 border-top: 1px solid #cccccc;
113 78 padding: 5px 5px; padding: 5px 5px;
114 79 } }
115 80
 
... ... th, td {
129 94 } }
130 95
131 96 #profiling { #profiling {
132 border-top: 1px solid #000000;
133 background-color: #eeeeee;
97 clear: both;
98 border-top: 1px solid #cccccc;
134 99 padding: 5px 5px; padding: 5px 5px;
135 border-bottom: 1px solid #000000;
136 font-size: 9pt;
100 border-bottom: 1px solid #cccccc;
101 font-size: 8pt;
137 102 } }
138 103
139 104 .error { .error {
 
... ... label {
168 133 } }
169 134 .repo_title a { .repo_title a {
170 135 text-decoration: none; text-decoration: none;
136 color: #777777;
171 137 } }
172 138
173 139 .repo_desc { .repo_desc {
 
... ... label {
185 151 line-height: 110%; line-height: 110%;
186 152 } }
187 153
188 .diff {
154 .diff {}
155
156 .chunk {}
157
158 .numbers { text-align: right; }
159
160 .repo_menu {}
161 .repo_menu ul li {}
162
163 .repo_body {
164 float: left;
165 display: inline;
166 padding: 5px;
189 167 } }
190 168
191 .chunk {
169 .repo_right {
170 float: right;
171 display: inline;
172 padding: 5px;
173 background-color: #e7e7e7;
192 174 } }
193 175
194 .numbers {
195 text-align: right;
176 .urls { padding: 4px 20px; display: block; float: left; }
177 .urls ul { list-style-type: none; }
178 .urls ul li {
179 padding: 3px 13px;
180 border: 1px solid #cccccc;
181 border-radius: 4px 4px 4px 4px;
182 margin: 2px;
183 font-size: 9pt;
184 }
185 .urls ul li a {
186 text-decoration: none;
187 color: #666666;
196 188 } }
File root/themes/default/repo/main.html changed (mode: 100644) (index 67f6973..266d3d6)
1 <span class="repo_title"><a href="@@url_user@@">@@owner@@</a>/<a href="@@url_repo@@">@@name@@</a></span><br />
2 <span class="repo_desc">@@description@@</span><br />
3 <br />
4 Git: <a href="@@git@@">@@git@@</a><br />
5 SSH: <a href="@@ssh@@">@@ssh@@</a><br />
6 <br />
1 <div class="repo_body">
2 <div style="float: left;">
3 <span class="repo_title"><a href="@@url_user@@">@@owner@@</a>/<a href="@@url_repo@@">@@name@@</a></span><br />
4 <span class="repo_desc">@@description@@</span><br />
5 </div>
7 6
8 Max commit size: @@max_commit_size@@<br />
9 Maximum number of users: @@max_users@@<br />
10 Default rights: @@default_rights@@<br />
11 Maximum commit size: @@max_commit_size@@<br />
12 <br />
7 <div class="urls">
8 <ul>
9 <li>Git: <a href="@@git@@">@@git@@</a></li>
10 <li>SSH: <a href="@@ssh@@">@@ssh@@</a></li>
11 <li>HTTP: <a href="@@git@@">@@git@@</a></li>
12 </ul>
13 </div>
13 14
14 <div class="menu">
15 <ul>
16 <li><a href="@@url_repo@@/source">Source</a></li>
17 <li><a href="@@url_repo@@/mrs">Merge requests</a></li>
18 <li><a href="@@url_repo@@/issues">Issues</a></li>
19 @@if(@@can_admin@@){{<li><a href="@@url_repo@@/admin">Admin</a></li>}}{{}}
20 </ul>
15 <div class="menu repo_menu" style="clear: both;">
16 <div class="menu">
17 <ul>
18 <li><a href="@@url_repo@@/source">Source</a></li>
19 <li><a href="@@url_repo@@/mrs">Merge requests</a></li>
20 <li><a href="@@url_repo@@/issues">Issues</a></li>
21 @@if(@@can_admin@@){{<li><a href="@@url_repo@@/admin">Admin</a></li>}}{{}}
22 </ul>
23 </div>
24 </div>
25
26 @@repo_body@@
21 27 </div> </div>
22 28
29 <div class="repo_right">
30 @@repo_right@@
31
32 Max commit size: @@max_commit_size@@<br />
33 Maximum number of users: @@max_users@@<br />
34 Default rights: @@default_rights@@<br />
35 Maximum commit size: @@max_commit_size@@<br />
36 </div>
File root/themes/default/repo/source.html changed (mode: 100644) (index 51e8a12..96159f0)
1 <!-- Tags -->
2 @@tag@@
3
4 <!-- Branches -->
5 @@branch@@
6
7 1 <div class="menu"> <div class="menu">
8 2 <ul> <ul>
9 3 <li><a href="@@url_repo@@/source/log@@ref_url@@">Log</a></li> <li><a href="@@url_repo@@/source/log@@ref_url@@">Log</a></li>
File root/themes/default/repo/source_r.html added (mode: 100644) (index 0000000..29bbd29)
1 <!-- Right part when we are on "source" -->
2
3 @@branch@@
4
5 @@tag@@
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