diff --git a/.gitignore b/.gitignore index a81cda1..bfa6ab4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ vendor -repo +repo/* db/*.sqlite3 -projects +projects/* .ruby-lsp keys/private keys/public diff --git a/app.rb b/app.rb index dfe2573..bf0a9b8 100644 --- a/app.rb +++ b/app.rb @@ -1390,6 +1390,36 @@ get "/prjsignview/:id/*" do end end +get "/sanitize" do + #Подчистим гит проекты, которые есть в базе, но нет в файловой системе + all_gits = db.get_gits + deleted_items = 0 + unless all_gits.nil? + repo = GitRepo.new(cfg.get_repo, db) + repos = repo.getrepos + list_for_delete = [] + all_gits.each do |item| + find_item = false + repos.each do |rep| + if rep[:reponame] == item[:reponame] + find_item = true + break + end + end + unless find_item + list_for_delete << item[:id] + end + end + deleted_items = deleted_items + list_for_delete.length + list_for_delete.each do |item| + db.delete_git_by_id(item) + end + end + @deleted_items = deleted_items + @page_name = "Очистка устаревших или потерянных записей базы данных" + erb :sanitize +end + not_found do status 404 @page_name = "Кто-то потерялся" diff --git a/classes/db.rb b/classes/db.rb index aafcc86..ca1bc4a 100644 --- a/classes/db.rb +++ b/classes/db.rb @@ -72,6 +72,7 @@ class DBase id = rep_id[:id] RepocRecips.where(repo_id: id).delete ReposProjects.where(repo_id: id).delete + Repos.where(reponame: repo_name).delete end end @@ -371,4 +372,12 @@ class DBase def set_project_address(prj_id, address) ProjectsProjects.where(proj_id: prj_id.to_i).update(remote_address: address) end + + def get_gits() + Repos.all + end + + def delete_git_by_id(id) + Repos.where(id: id.to_i).delete + end end diff --git a/views/footer.erb b/views/footer.erb index f184f25..47f702e 100644 --- a/views/footer.erb +++ b/views/footer.erb @@ -6,7 +6,7 @@