Commit a243253b10244e8a3b62c40b686b52ac61a3adc8

Authored by Dmitriy Zaporozhets
1 parent edd81a79

Refactored project archive. Improved MR usability form

app/controllers/merge_requests_controller.rb
... ... @@ -73,29 +73,21 @@ class MergeRequestsController < ApplicationController
73 73 @merge_request = @project.merge_requests.new(params[:merge_request])
74 74 @merge_request.author = current_user
75 75  
76   - respond_to do |format|
77   - if @merge_request.save
78   - @merge_request.reload_code
79   - format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully created.' }
80   - format.json { render json: @merge_request, status: :created, location: @merge_request }
81   - else
82   - format.html { render action: "new" }
83   - format.json { render json: @merge_request.errors, status: :unprocessable_entity }
84   - end
  76 + if @merge_request.save
  77 + @merge_request.reload_code
  78 + redirect_to [@project, @merge_request], notice: 'Merge request was successfully created.'
  79 + else
  80 + render action: "new"
85 81 end
86 82 end
87 83  
88 84 def update
89   - respond_to do |format|
90   - if @merge_request.update_attributes(params[:merge_request].merge(:author_id_of_changes => current_user.id))
91   - @merge_request.reload_code
92   - @merge_request.mark_as_unchecked
93   - format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' }
94   - format.json { head :ok }
95   - else
96   - format.html { render action: "edit" }
97   - format.json { render json: @merge_request.errors, status: :unprocessable_entity }
98   - end
  85 + if @merge_request.update_attributes(params[:merge_request].merge(:author_id_of_changes => current_user.id))
  86 + @merge_request.reload_code
  87 + @merge_request.mark_as_unchecked
  88 + redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.'
  89 + else
  90 + render action: "edit"
99 91 end
100 92 end
101 93  
... ... @@ -122,7 +114,6 @@ class MergeRequestsController < ApplicationController
122 114  
123 115 respond_to do |format|
124 116 format.html { redirect_to project_merge_requests_url(@project) }
125   - format.json { head :ok }
126 117 end
127 118 end
128 119  
... ...
app/controllers/repositories_controller.rb
... ... @@ -27,22 +27,14 @@ class RepositoriesController < ApplicationController
27 27 render_404 and return
28 28 end
29 29  
30   - ref = params[:ref] || @project.root_ref
31   - commit = @project.commit(ref)
32   - render_404 and return unless commit
33   -
34   - # Build file path
35   - file_name = @project.code + "-" + commit.id.to_s + ".tar.gz"
36   - storage_path = File.join(Rails.root, "tmp", "repositories", @project.code)
37   - file_path = File.join(storage_path, file_name)
38   -
39   - # Create file if not exists
40   - unless File.exists?(file_path)
41   - FileUtils.mkdir_p storage_path
42   - file = @project.repo.archive_to_file(ref, nil, file_path)
43   - end
44 30  
45   - # Send file to user
46   - send_file file_path
  31 + file_path = @project.archive_repo(params[:ref])
  32 +
  33 + if file_path
  34 + # Send file to user
  35 + send_file file_path
  36 + else
  37 + render_404
  38 + end
47 39 end
48 40 end
... ...
app/roles/repository.rb
... ... @@ -117,4 +117,28 @@ module Repository
117 117 def root_ref? branch
118 118 root_ref == branch
119 119 end
  120 +
  121 + # Archive Project to .tar.gz
  122 + #
  123 + # Already packed repo archives stored at
  124 + # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz
  125 + #
  126 + def archive_repo ref
  127 + ref = ref || self.root_ref
  128 + commit = self.commit(ref)
  129 + return nil unless commit
  130 +
  131 + # Build file path
  132 + file_name = self.code + "-" + commit.id.to_s + ".tar.gz"
  133 + storage_path = File.join(Rails.root, "tmp", "repositories", self.code)
  134 + file_path = File.join(storage_path, file_name)
  135 +
  136 + # Create file if not exists
  137 + unless File.exists?(file_path)
  138 + FileUtils.mkdir_p storage_path
  139 + file = self.repo.archive_to_file(ref, nil, file_path)
  140 + end
  141 +
  142 + file_path
  143 + end
120 144 end
... ...
app/views/merge_requests/_form.html.haml
... ... @@ -5,23 +5,43 @@
5 5 - @merge_request.errors.full_messages.each do |msg|
6 6 %li= msg
7 7  
8   - .control-group
9   - = f.label :title, :class => "control-label"
10   - .controls= f.text_area :title, :class => "input-xxlarge", :maxlength => 255, :rows => 5
11   - .control-group
12   - = f.label :source_branch, "From", :class => "control-label"
13   - .controls
14   - = f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
15   - .mr_source_commit
16   - .control-group
17   - = f.label :target_branch, "To", :class => "control-label"
18   - .controls
19   - = f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
20   - .mr_target_commit
  8 +
  9 +
  10 + %h3.padded.cgray 1. Select Branches
  11 + .row
  12 + .span6
  13 + .ui-box
  14 + %h5 From (Head Branch)
  15 + .body
  16 + .padded
  17 + = f.label :source_branch, "From", :class => "control-label"
  18 + .controls
  19 + = f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
  20 + %hr
  21 + .mr_source_commit
  22 + .clearfix
  23 +
  24 + .span6
  25 + .ui-box
  26 + %h5 To (Base Branch)
  27 + .body
  28 + .padded
  29 + = f.label :target_branch, "To", :class => "control-label"
  30 + .controls
  31 + = f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
  32 + %hr
  33 + .mr_target_commit
  34 + .clearfix
  35 +
  36 + %h3.padded.cgray 2. Fill info
21 37 .clearfix
22 38 = f.label :assignee_id, "Assign to", :class => "control-label"
23 39 .controls= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, :style => "width:250px")
24 40  
  41 + .control-group
  42 + = f.label :title, :class => "control-label"
  43 + .controls= f.text_field :title, :class => "input-xxlarge pad", :maxlength => 255, :rows => 5
  44 +
25 45 .form-actions
26 46 = f.submit 'Save', :class => "btn-primary btn"
27 47 - if @merge_request.new_record?
... ... @@ -38,14 +58,18 @@
38 58 $('select#merge_request_assignee_id').chosen();
39 59 $('select#merge_request_source_branch').chosen();
40 60 $('select#merge_request_target_branch').chosen();
  61 + var source_branch = $("#merge_request_source_branch");
  62 + var target_branch = $("#merge_request_target_branch");
41 63  
  64 +
  65 + $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: source_branch.val() });
  66 + $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: target_branch.val() });
42 67  
43   -
44   - $("#merge_request_source_branch").live("change", function() {
  68 + source_branch.live("change", function() {
45 69 $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: $(this).val() });
46 70 });
47 71  
48   - $("#merge_request_target_branch").live("change", function() {
  72 + target_branch.live("change", function() {
49 73 $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: $(this).val() });
50 74 });
51 75 });
... ...
config/routes.rb
1 1 Gitlab::Application.routes.draw do
  2 + #
  3 + # Search
  4 + #
2 5 get 'search' => "search#show"
3 6  
4 7 # Optionally, enable Resque here
5 8 require 'resque/server'
6 9 mount Resque::Server.new, at: '/info/resque'
7 10  
  11 + #
  12 + # Help
  13 + #
8 14 get 'help' => 'help#index'
9 15 get 'help/permissions' => 'help#permissions'
10 16 get 'help/workflow' => 'help#workflow'
11 17 get 'help/web_hooks' => 'help#web_hooks'
12 18  
  19 + #
  20 + # Admin Area
  21 + #
13 22 namespace :admin do
14 23 resources :users do
15 24 member do
... ... @@ -44,6 +53,7 @@ Gitlab::Application.routes.draw do
44 53 get "profile", :to => "profile#show"
45 54 get "profile/design", :to => "profile#design"
46 55 put "profile/update", :to => "profile#update"
  56 + resources :keys
47 57  
48 58 #
49 59 # Dashboard Area
... ... @@ -53,10 +63,12 @@ Gitlab::Application.routes.draw do
53 63 get "dashboard/merge_requests", :to => "dashboard#merge_requests"
54 64  
55 65 resources :projects, :constraints => { :id => /[^\/]+/ }, :only => [:new, :create]
56   - resources :keys
57 66  
58 67 devise_for :users, :controllers => { :omniauth_callbacks => :omniauth_callbacks }
59 68  
  69 + #
  70 + # Project Area
  71 + #
60 72 resources :projects, :constraints => { :id => /[^\/]+/ }, :except => [:new, :create, :index], :path => "/" do
61 73 member do
62 74 get "team"
... ...