diff --git a/app.rb b/app.rb index 6a4be3c..ed4b55e 100644 --- a/app.rb +++ b/app.rb @@ -1150,7 +1150,7 @@ get "/buildinfofraw" do if params["file"].nil? || !File.exist?(params["file"]) print_error_page(503, "Файл не найден") else - if File.binary?(params["file"]) && params["file"].start_with?(File.join(Dir.pwd(), cfg.get_projects_path)) + if !File.binary?(params["file"]) && params["file"].start_with?(File.join(Dir.pwd(), cfg.get_projects_path)) f_name = File.basename(params["file"]) send_file(params["file"], :filename => f_name, :type => "application/octet-stream", :disposition => 'attachment') else diff --git a/classes/gitinfo.rb b/classes/gitinfo.rb index b2e3f39..be045f1 100644 --- a/classes/gitinfo.rb +++ b/classes/gitinfo.rb @@ -72,6 +72,24 @@ class GitRepo repos_data end + def git_walker(repo, tree, dir_name, result) + tree.each_tree do |entry| + new_tree = repo.lookup(entry[:oid]) + result = git_walker(repo, new_tree, "#{dir_name}/#{entry[:name]}", result) + end + tree.each_blob { |entry| result << "#{dir_name}/#{entry[:name]}" } + result + end + + + def get_git_tree(repo, ref, result) + + tree = ref.target.tree + + result = git_walker(repo, tree, "", result) + + end + def repo_info(reponame, branch = nil) info = {} result = "" @@ -97,6 +115,7 @@ class GitRepo info[:commits] = [] info[:branches] = [] info[:tags] = [] + info[:files] = [] else ref = repo.head unless branch.nil? @@ -104,6 +123,7 @@ class GitRepo ref = repo.references[ref_name] end commits = [] + files = [] unless ref.nil? walker = Rugged::Walker.new(repo) walker.sorting(Rugged::SORT_DATE) @@ -111,10 +131,15 @@ class GitRepo commits = walker.map do |commit| { :message => commit.message, :author => commit.author, :time => commit.time, :sha => commit.oid } end.first(10) + unless ref.target.nil? && ref.target.tree.nil? + files = get_git_tree(repo, ref, files) + end end + info[:commits] = commits info[:branches] = repo.branches.each_name(:local).sort info[:tags] = repo.tags.map { |tag| tag.name } + info[:files] = files end else @error = result diff --git a/docs/mock-gui/docs/common.md b/docs/mock-gui/docs/common.md index f54b53c..dbc3f52 100644 --- a/docs/mock-gui/docs/common.md +++ b/docs/mock-gui/docs/common.md @@ -8,4 +8,12 @@ * Одновременно может запускаться только одна сборка. * Сборка потребляет все доступные ядра процессора -* На текущий момент система является alpha сборкой, поэтому подавление ошибок не включено, для детального отслеживания ошибок \ No newline at end of file +* На текущий момент система является alpha сборкой, поэтому подавление ошибок не включено, для детального отслеживания ошибок + +## Особые указания + +Внизу страницы веб интерфейса есть нижняя панель управления. Там имеется два сервисных пункта меню: + +`Сбросить buildroots` - со временем, при большом количестве сборок, кэш mock-билдера может разрастаться, для освобождения кэшей рекомендуется периодически запускать сброс с помощью данного пункта меню. + +`Подчистка` - проводится инвентаризация гит-проектов и если в базе данных нет записи, то она добавляется. Этот пункт дает возможность подложить гит-проекты и одним нажатием добавить их в веб-интерфейс. \ No newline at end of file diff --git a/docs/mock-gui/docs/img/mockgui_creategit5_1.png b/docs/mock-gui/docs/img/mockgui_creategit5_1.png new file mode 100644 index 0000000..62a3ce5 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_creategit5_1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects20_1.png b/docs/mock-gui/docs/img/mockgui_projects20_1.png new file mode 100644 index 0000000..33c43a8 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects20_1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects20_2.png b/docs/mock-gui/docs/img/mockgui_projects20_2.png new file mode 100644 index 0000000..850c3bc Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects20_2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects20_3.png b/docs/mock-gui/docs/img/mockgui_projects20_3.png new file mode 100644 index 0000000..40213ef Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects20_3.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects5.png b/docs/mock-gui/docs/img/mockgui_projects5.png index 23d67b6..faf4a4d 100644 Binary files a/docs/mock-gui/docs/img/mockgui_projects5.png and b/docs/mock-gui/docs/img/mockgui_projects5.png differ diff --git a/docs/mock-gui/docs/userguide/gits.md b/docs/mock-gui/docs/userguide/gits.md index c59b85a..d15d479 100644 --- a/docs/mock-gui/docs/userguide/gits.md +++ b/docs/mock-gui/docs/userguide/gits.md @@ -25,6 +25,7 @@ * Списка тегов * Строки для клонирования репозитория * Описание репозитория +* Списка файлов указанной ветки репозитория Список тегов и коммитов даст информацию о том, что исходные коды в ветке master находятся в нужно состоянии ис нужными коммитами. Сборочница производит выборку исходных кодов из master ветки git репозитория. @@ -37,6 +38,10 @@ Для успешного клонирования и наполнения git репозитория, необходимо либо установить публичный ключ для доступа пользователя по ssh или знать пароль к mockgui пользователю по ssh. Вот почему в [инсталляционном руководстве](../install.md) рекомендуется установить пароль для mockgui пользователя. +Вкладка отображения списка файлов репозитория и указанной ветки или HEAD: + + + ## Удаление git репозитория Удаление возможно только в том случае, если данный git репозиторий не имеет ни рецептов сборки, а так же не подключен ни к одному проекту и соответственно, не имеет сборок, указывающих на данный git репозиторий. diff --git a/views/gitinfo.erb b/views/gitinfo.erb index db2e9ff..2262748 100644 --- a/views/gitinfo.erb +++ b/views/gitinfo.erb @@ -6,6 +6,7 @@
<%= @repo_data[:info][:reponame] %>
++ <% if @repo_data[:info][:descr].nil? || @repo_data[:info][:descr] == "" %> + "Нет описания" + <% else %> + <%= @repo_data[:info][:descr] %> + <% end %> +
+Список файлов
+