login

<     >

2023-07-20 16:23:49 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

sort repos by name in home

diff --git a/cogit/cogit.lua b/cogit/cogit.lua
index 2351894..780d926 100644
--- a/cogit/cogit.lua
+++ b/cogit/cogit.lua
@@ -46,9 +46,9 @@ local function diff_cb(line_type, line)
     return line .. "\n"
 end
 
-local function allowed(is_admin, repo)
+local function allowed(is_admin, desc)
     if is_admin then return true end
-    if repo.desc == "" or repo.desc:sub(1, 1) == ":" then
+    if desc == "" or desc:sub(1, 1) == ":" then
         return false
     end
     return true
@@ -84,7 +84,13 @@ end
 
 function Cogit:scan()
     self:log(LOG_INFO, "scanning repos in "..self.path)
-    self.repos = scan.scanrepos(self.path)
+    self.sorted_repos = scan.scanrepos(self.path)
+    self.repos = {}
+    self.descs = {}
+    for _, repo in ipairs(self.sorted_repos) do
+        self.repos[repo.name] = repo.repo
+        self.descs[repo.name] = repo.desc
+    end
 end
 
 function Cogit:log(level, msg)
@@ -109,10 +115,10 @@ function Cogit:routes()
         local is_admin = self:is_admin(req.cookies)
         self:scan()
         local repos = {}
-        for rname, repo in pairs(self.repos) do
-            if allowed(is_admin, repo) then
+        for _, repo in ipairs(self.sorted_repos) do
+            if allowed(is_admin, repo.desc) then
                 local desc = repo.desc:gsub("^:", "")
-                table.insert(repos, {name=rname, desc=desc})
+                table.insert(repos, {name=repo.name, desc=desc})
             end
         end
         local env = {title=self.title, is_admin=is_admin, repos=repos}
@@ -156,10 +162,10 @@ function Cogit:routes()
     {"GET", "/repo/([%w_-]+)",
     function (req, rname)
         local is_admin = self:is_admin(req.cookies)
-        local repo = self.repos[rname]
-        if not allowed(is_admin, repo) then
+        if not allowed(is_admin, self.descs[rname]) then
             return "/login", 303
         end
+        local repo = self.repos[rname]
         local bnames = repo:branches()
         local tnames = repo:tags()
         local env = {
@@ -171,10 +177,10 @@ function Cogit:routes()
     {"GET", "/repo/([%w_-]+)/history/([%w_-]+)",
     function (req, rname, first)
         local is_admin = self:is_admin(req.cookies)
-        local repo = self.repos[rname]
-        if not allowed(is_admin, repo) then
+        if not allowed(is_admin, self.descs[rname]) then
             return "/login", 303
         end
+        local repo = self.repos[rname]
         local commit = repo:commit(first)
         local prev = repo:find_prev(commit:id(), self.limit)
         local env = {
@@ -186,10 +192,10 @@ function Cogit:routes()
     {"GET", "/repo/([%w_-]+)/commit/([%w_-]+)",
     function (req, rname, cid)
         local is_admin = self:is_admin(req.cookies)
-        local repo = self.repos[rname]
-        if not allowed(is_admin, repo) then
+        if not allowed(is_admin, self.descs[rname]) then
             return "/login", 303
         end
+        local repo = self.repos[rname]
         local commit = repo:commit(cid)
         local prev = repo:find_prev(commit:id(), 1)
         local sig = commit:signature()
@@ -204,10 +210,10 @@ function Cogit:routes()
     {"GET", "/repo/([%w_-]+)/commit/([%w_-]+)/tree/(.*)",
     function (req, rname, cid, path)
         local is_admin = self:is_admin(req.cookies)
-        local repo = self.repos[rname]
-        if not allowed(is_admin, repo) then
+        if not allowed(is_admin, self.descs[rname]) then
             return "/login", 303
         end
+        local repo = self.repos[rname]
         local commit = repo:commit(cid)
         local node = commit:tree_entry(path)
         if node == nil then

diff --git a/cogit/git.lua b/cogit/git.lua
index 615a3bd..b16ff24 100644
--- a/cogit/git.lua
+++ b/cogit/git.lua
@@ -359,10 +359,6 @@ local function open(path)
     local prepo = ffi.new("git_repository *[1]")
     assert(C.git_repository_open_bare(prepo, path) == 0)
     self.repo = prepo[0]
-    self.desc = io.open(path.."/description"):read()
-    if self.desc:match("%w*") == "Unnamed" then
-        self.desc = ""
-    end
     return self
 end
 

diff --git a/cogit/scan.lua b/cogit/scan.lua
index 4f18bc3..a99b14a 100644
--- a/cogit/scan.lua
+++ b/cogit/scan.lua
@@ -53,7 +53,10 @@ local function scanrepos(path)
     for _, git_folder in ipairs(git_folders) do
         local repo_path = path.."/"..git_folder
         local repo_name = git_folder:match("(.*)%.git$")
-        repos[repo_name] = git.open(repo_path)
+        local repo = git.open(repo_path)
+        local desc = io.open(repo_path.."/description"):read()
+        if desc:match("%w*") == "Unnamed" then desc = "" end
+        table.insert(repos, {name=repo_name, desc=desc, repo=repo})
     end
     return repos
 end