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