Commit 8808c5fa8d0102d1cf0641812a029434b0d6ede8

Authored by Robert Speicher
2 parents b3bbf53e a595f894

Merge branch 'master' into emoji

Showing 54 changed files with 393 additions and 458 deletions   Show diff stats
app/assets/javascripts/admin.js
@@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
1 -$(document).ready(function(){  
2 - $('input#user_force_random_password').on('change', function(elem) {  
3 - var elems = $('#user_password, #user_password_confirmation');  
4 -  
5 - if ($(this).attr('checked')) {  
6 - elems.val('').attr('disabled', true);  
7 - } else {  
8 - elems.removeAttr('disabled');  
9 - }  
10 - });  
11 -});  
app/assets/javascripts/admin.js.coffee 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +$ ->
  2 + $('input#user_force_random_password').on 'change', (elem) ->
  3 + elems = $('#user_password, #user_password_confirmation')
  4 +
  5 + if $(@).attr 'checked'
  6 + elems.val('').attr 'disabled', true
  7 + else
  8 + elems.removeAttr 'disabled'
app/assets/javascripts/application.js
@@ -17,134 +17,3 @@ @@ -17,134 +17,3 @@
17 //= require raphael 17 //= require raphael
18 //= require branch-graph 18 //= require branch-graph
19 //= require_tree . 19 //= require_tree .
20 -  
21 -$(document).ready(function(){  
22 -  
23 - $(".one_click_select").live("click", function(){  
24 - $(this).select();  
25 - });  
26 -  
27 - $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){  
28 - var buttons = $('[type="submit"]', this);  
29 - switch( e.type ){  
30 - case 'ajax:beforeSend':  
31 - case 'submit':  
32 - buttons.attr('disabled', 'disabled');  
33 - break;  
34 - case ' ajax:complete':  
35 - default:  
36 - buttons.removeAttr('disabled');  
37 - break;  
38 - }  
39 - })  
40 -  
41 - $(".account-box").mouseenter(showMenu);  
42 - $(".account-box").mouseleave(resetMenu);  
43 -  
44 - $("#projects-list .project").live('click', function(e){  
45 - if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") {  
46 - location.href = $(this).attr("url");  
47 - e.stopPropagation();  
48 - return false;  
49 - }  
50 - });  
51 -  
52 - /**  
53 - * Focus search field by pressing 's' key  
54 - */  
55 - $(document).keypress(function(e) {  
56 - if( $(e.target).is(":input") ) return;  
57 - switch(e.which) {  
58 - case 115: focusSearch();  
59 - e.preventDefault();  
60 - }  
61 - });  
62 -  
63 - /**  
64 - * Commit show suppressed diff  
65 - *  
66 - */  
67 - $(".supp_diff_link").bind("click", function() {  
68 - showDiff(this);  
69 - });  
70 -  
71 - /**  
72 - * Note markdown preview  
73 - *  
74 - */  
75 - $(document).on('click', '#preview-link', function(e) {  
76 - $('#preview-note').text('Loading...');  
77 -  
78 - var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview');  
79 - $(this).text(previewLinkText);  
80 -  
81 - var note = $('#note_note').val();  
82 - if (note.trim().length === 0) { note = 'Nothing to preview'; }  
83 - $.post($(this).attr('href'), {note: note}, function(data) {  
84 - $('#preview-note').html(data);  
85 - });  
86 -  
87 - $('#preview-note, #note_note').toggle();  
88 - e.preventDefault();  
89 - });  
90 -});  
91 -  
92 -function focusSearch() {  
93 - $("#search").focus();  
94 -}  
95 -  
96 -function updatePage(data){  
97 - $.ajax({type: "GET", url: location.href, data: data, dataType: "script"});  
98 -}  
99 -  
100 -function showMenu() {  
101 - $(this).toggleClass('hover');  
102 -}  
103 -  
104 -function resetMenu() {  
105 - $(this).removeClass("hover");  
106 -}  
107 -  
108 -function slugify(text) {  
109 - return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase();  
110 -}  
111 -  
112 -function showDiff(link) {  
113 - $(link).next('table').show();  
114 - $(link).remove();  
115 -}  
116 -  
117 -(function($){  
118 - var _chosen = $.fn.chosen;  
119 - $.fn.extend({  
120 - chosen: function(options) {  
121 - var default_options = {'search_contains' : 'true'};  
122 - $.extend(default_options, options);  
123 - return _chosen.apply(this, [default_options]);  
124 - }})  
125 -})(jQuery);  
126 -  
127 -  
128 -function ajaxGet(url) {  
129 - $.ajax({type: "GET", url: url, dataType: "script"});  
130 -}  
131 -  
132 -/**  
133 - * Disable button if text field is empty  
134 - */  
135 -function disableButtonIfEmtpyField(field_selector, button_selector) {  
136 - field = $(field_selector);  
137 - if(field.val() == "") {  
138 - field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled");  
139 - }  
140 -  
141 - field.on('keyup', function(){  
142 - var field = $(this);  
143 - var closest_submit = field.closest("form").find(button_selector);  
144 - if(field.val() == "") {  
145 - closest_submit.attr("disabled", "disabled").addClass("disabled");  
146 - } else {  
147 - closest_submit.removeAttr("disabled").removeClass("disabled");  
148 - }  
149 - })  
150 -}  
app/assets/javascripts/graph.js
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -function initGraphNav() {  
2 - $(".graph svg").css("position", "relative");  
3 - $("body").bind("keyup", function(e) {  
4 - if(e.keyCode == 37) { // left  
5 - $(".graph svg").animate({ left: "+=400" });  
6 - } else if(e.keyCode == 39) { // right  
7 - $(".graph svg").animate({ left: "-=400" });  
8 - }  
9 - });  
10 -}  
app/assets/javascripts/graph.js.coffee 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +initGraphNav = ->
  2 + $('.graph svg').css 'position', 'relative'
  3 +
  4 + $('body').bind 'keyup', (e) ->
  5 + if e.keyCode is 37 # left
  6 + $('.graph svg').animate left: '+=400'
  7 + else if e.keyCode is 39 # right
  8 + $('.graph svg').animate left: '-=400'
  9 +
  10 +window.initGraphNav = initGraphNav
app/assets/javascripts/loader.js
@@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
1 -var Loader = {  
2 - img_src: "/assets/ajax-loader.gif",  
3 -  
4 - html:  
5 - function(width) {  
6 - img = $("<img>");  
7 - img.attr("width", width);  
8 - img.attr("src", this.img_src);  
9 - return img;  
10 - }  
11 -}  
app/assets/javascripts/loader.js.coffee 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +Loader =
  2 + html: (width) ->
  3 + $('<img>').attr src: '/assets/ajax-loader.gif', width: width
  4 +
  5 +window.Loader = Loader
app/assets/javascripts/main.js 0 → 100644
@@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
  1 +$(document).ready(function(){
  2 +
  3 + $(".one_click_select").live("click", function(){
  4 + $(this).select();
  5 + });
  6 +
  7 + $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){
  8 + var buttons = $('[type="submit"]', this);
  9 + switch( e.type ){
  10 + case 'ajax:beforeSend':
  11 + case 'submit':
  12 + buttons.attr('disabled', 'disabled');
  13 + break;
  14 + case ' ajax:complete':
  15 + default:
  16 + buttons.removeAttr('disabled');
  17 + break;
  18 + }
  19 + })
  20 +
  21 + $(".account-box").mouseenter(showMenu);
  22 + $(".account-box").mouseleave(resetMenu);
  23 +
  24 + $("#projects-list .project").live('click', function(e){
  25 + if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") {
  26 + location.href = $(this).attr("url");
  27 + e.stopPropagation();
  28 + return false;
  29 + }
  30 + });
  31 +
  32 + /**
  33 + * Focus search field by pressing 's' key
  34 + */
  35 + $(document).keypress(function(e) {
  36 + if( $(e.target).is(":input") ) return;
  37 + switch(e.which) {
  38 + case 115: focusSearch();
  39 + e.preventDefault();
  40 + }
  41 + });
  42 +
  43 + /**
  44 + * Commit show suppressed diff
  45 + *
  46 + */
  47 + $(".supp_diff_link").bind("click", function() {
  48 + showDiff(this);
  49 + });
  50 +
  51 + /**
  52 + * Note markdown preview
  53 + *
  54 + */
  55 + $(document).on('click', '#preview-link', function(e) {
  56 + $('#preview-note').text('Loading...');
  57 +
  58 + var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview');
  59 + $(this).text(previewLinkText);
  60 +
  61 + var note = $('#note_note').val();
  62 + if (note.trim().length === 0) { note = 'Nothing to preview'; }
  63 + $.post($(this).attr('href'), {note: note}, function(data) {
  64 + $('#preview-note').html(data);
  65 + });
  66 +
  67 + $('#preview-note, #note_note').toggle();
  68 + e.preventDefault();
  69 + });
  70 +});
  71 +
  72 +function focusSearch() {
  73 + $("#search").focus();
  74 +}
  75 +
  76 +function updatePage(data){
  77 + $.ajax({type: "GET", url: location.href, data: data, dataType: "script"});
  78 +}
  79 +
  80 +function showMenu() {
  81 + $(this).toggleClass('hover');
  82 +}
  83 +
  84 +function resetMenu() {
  85 + $(this).removeClass("hover");
  86 +}
  87 +
  88 +function slugify(text) {
  89 + return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase();
  90 +}
  91 +
  92 +function showDiff(link) {
  93 + $(link).next('table').show();
  94 + $(link).remove();
  95 +}
  96 +
  97 +(function($){
  98 + var _chosen = $.fn.chosen;
  99 + $.fn.extend({
  100 + chosen: function(options) {
  101 + var default_options = {'search_contains' : 'true'};
  102 + $.extend(default_options, options);
  103 + return _chosen.apply(this, [default_options]);
  104 + }})
  105 +})(jQuery);
  106 +
  107 +
  108 +function ajaxGet(url) {
  109 + $.ajax({type: "GET", url: url, dataType: "script"});
  110 +}
  111 +
  112 +/**
  113 + * Disable button if text field is empty
  114 + */
  115 +function disableButtonIfEmtpyField(field_selector, button_selector) {
  116 + field = $(field_selector);
  117 + if(field.val() == "") {
  118 + field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled");
  119 + }
  120 +
  121 + field.on('keyup', function(){
  122 + var field = $(this);
  123 + var closest_submit = field.closest("form").find(button_selector);
  124 + if(field.val() == "") {
  125 + closest_submit.attr("disabled", "disabled").addClass("disabled");
  126 + } else {
  127 + closest_submit.removeAttr("disabled").removeClass("disabled");
  128 + }
  129 + })
  130 +}
app/assets/javascripts/projects.js.coffee
1 window.Projects = -> 1 window.Projects = ->
2 - $("#project_name").live "change", ->  
3 - slug = slugify($(this).val())  
4 - $("#project_code").val(slug)  
5 - $("#project_path").val(slug) 2 + $('#project_name').on 'change', ->
  3 + slug = slugify $(@).val()
  4 + $('#project_code, #project_path').val slug
6 5
7 - $(".new_project, .edit_project").live "ajax:before", ->  
8 - $(".project_new_holder, .project_edit_holder").hide()  
9 - $(".save-project-loader").show() 6 + $('.new_project, .edit_project').on 'ajax:before', ->
  7 + $('.project_new_holder, .project_edit_holder').hide()
  8 + $('.save-project-loader').show()
10 9
11 - $("form #project_default_branch").chosen()  
12 - disableButtonIfEmtpyField "#project_name", ".project-submit" 10 + $('form #project_default_branch').chosen()
  11 + disableButtonIfEmtpyField '#project_name', '.project-submit'
13 12
14 # Git clone panel switcher 13 # Git clone panel switcher
15 $ -> 14 $ ->
16 - scope = $('.project_clone_holder') 15 + scope = $ '.project_clone_holder'
17 if scope.length > 0 16 if scope.length > 0
18 $('a, button', scope).click -> 17 $('a, button', scope).click ->
19 - $('a, button', scope).removeClass('active')  
20 - $(this).addClass('active')  
21 - $('#project_clone', scope).val($(this).data('clone')) 18 + $('a, button', scope).removeClass 'active'
  19 + $(@).addClass 'active'
  20 + $('#project_clone', scope).val $(@).data 'clone'
app/assets/javascripts/snippets.js
@@ -1,9 +0,0 @@ @@ -1,9 +0,0 @@
1 -$(document).ready(function(){  
2 - $("#snippets-table .snippet").live('click', function(e){  
3 - if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") {  
4 - location.href = $(this).attr("url");  
5 - e.stopPropagation();  
6 - return false;  
7 - }  
8 - });  
9 -});  
app/assets/javascripts/snippets.js.coffee 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +$ ->
  2 + $('#snippets-table .snippet').live 'click', (e) ->
  3 + if e.target.nodeName isnt 'A' and e.target.nodeName isnt 'INPUT'
  4 + location.href = $(@).attr 'url'
  5 + e.stopPropagation()
  6 + false
app/assets/javascripts/team.js
@@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
1 -function backToMembers(){  
2 - $("#new_team_member").hide("slide", { direction: "right" }, 150, function(){  
3 - $("#team-table").show("slide", { direction: "left" }, 150, function() {  
4 - $("#new_team_member").remove();  
5 - $(".add_new").show();  
6 - });  
7 - });  
8 -}  
app/assets/stylesheets/gitlab_bootstrap/files.scss
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 * 3 *
4 */ 4 */
5 .file_holder { 5 .file_holder {
6 - border:1px solid #CCC; 6 + border:1px solid #BBB;
7 margin-bottom:1em; 7 margin-bottom:1em;
8 @include solid_shade; 8 @include solid_shade;
9 9
app/assets/stylesheets/main.scss
1 @import "bootstrap"; 1 @import "bootstrap";
2 @import "bootstrap-responsive"; 2 @import "bootstrap-responsive";
3 3
4 -/** GITLAB colors **/ 4 +/** GitLab colors **/
5 $link_color:#3A89A3; 5 $link_color:#3A89A3;
6 $blue_link: #2fa0bb; 6 $blue_link: #2fa0bb;
7 $style_color: #474d57; 7 $style_color: #474d57;
8 $hover: #fdf5d9; 8 $hover: #fdf5d9;
9 9
10 -/** GITLAB Fonts **/ 10 +/** GitLab Fonts **/
11 @font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } 11 @font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); }
12 12
13 /** MIXINS **/ 13 /** MIXINS **/
@@ -113,9 +113,9 @@ $hover: #fdf5d9; @@ -113,9 +113,9 @@ $hover: #fdf5d9;
113 @import "themes/ui_modern.scss"; 113 @import "themes/ui_modern.scss";
114 114
115 /** 115 /**
116 - * Gitlab bootstrap. 116 + * GitLab bootstrap.
117 * Overrides some styles of twitter bootstrap. 117 * Overrides some styles of twitter bootstrap.
118 - * Also give some common classes for gitlab app 118 + * Also give some common classes for GitLab app
119 */ 119 */
120 @import "gitlab_bootstrap/common.scss"; 120 @import "gitlab_bootstrap/common.scss";
121 @import "gitlab_bootstrap/typography.scss"; 121 @import "gitlab_bootstrap/typography.scss";
app/assets/stylesheets/sections/header.scss
@@ -22,7 +22,7 @@ header { @@ -22,7 +22,7 @@ header {
22 * 22 *
23 */ 23 */
24 .app_logo { 24 .app_logo {
25 - width:230px; 25 + width:200px;
26 float:left; 26 float:left;
27 position:relative; 27 position:relative;
28 top:-5px; 28 top:-5px;
@@ -31,7 +31,7 @@ header { @@ -31,7 +31,7 @@ header {
31 31
32 h1 { 32 h1 {
33 padding-top: 5px; 33 padding-top: 5px;
34 - width:102px; 34 + width:90px;
35 background: url('logo_dark.png') no-repeat 0px -3px; 35 background: url('logo_dark.png') no-repeat 0px -3px;
36 float:left; 36 float:left;
37 margin-left:5px; 37 margin-left:5px;
app/assets/stylesheets/sections/nav.scss
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 * Main Menu of Application 2 * Main Menu of Application
3 * 3 *
4 */ 4 */
5 -ul.main_menu { 5 +ul.main_menu {
6 border-radius: 4px; 6 border-radius: 4px;
7 margin: auto; 7 margin: auto;
8 margin:30px 0; 8 margin:30px 0;
@@ -12,7 +12,7 @@ ul.main_menu { @@ -12,7 +12,7 @@ ul.main_menu {
12 position:relative; 12 position:relative;
13 overflow:hidden; 13 overflow:hidden;
14 @include shade; 14 @include shade;
15 - .count { 15 + .count {
16 position: relative; 16 position: relative;
17 top: -1px; 17 top: -1px;
18 display: inline-block; 18 display: inline-block;
@@ -29,12 +29,12 @@ ul.main_menu { @@ -29,12 +29,12 @@ ul.main_menu {
29 border-radius: 8px; 29 border-radius: 8px;
30 -moz-border-radius: 8px; 30 -moz-border-radius: 8px;
31 } 31 }
32 - .label { 32 + .label {
33 background:$hover; 33 background:$hover;
34 text-shadow:none; 34 text-shadow:none;
35 color:$style_color; 35 color:$style_color;
36 } 36 }
37 - li { 37 + li {
38 list-style-type: none; 38 list-style-type: none;
39 margin: 0; 39 margin: 0;
40 display: table-cell; 40 display: table-cell;
@@ -43,7 +43,7 @@ ul.main_menu { @@ -43,7 +43,7 @@ ul.main_menu {
43 border-left: 1px solid #EEE; 43 border-left: 1px solid #EEE;
44 border-bottom:2px solid #CFCFCF; 44 border-bottom:2px solid #CFCFCF;
45 45
46 - &:first-child{ 46 + &:first-child{
47 -webkit-border-top-left-radius: 4px; 47 -webkit-border-top-left-radius: 4px;
48 -webkit-border-bottom-left-radius: 4px; 48 -webkit-border-bottom-left-radius: 4px;
49 -moz-border-radius-topleft: 4px; 49 -moz-border-radius-topleft: 4px;
@@ -53,31 +53,31 @@ ul.main_menu { @@ -53,31 +53,31 @@ ul.main_menu {
53 border-left: 0; 53 border-left: 0;
54 } 54 }
55 55
56 - &.current { 56 + &.current {
57 background-color:#D5D5D5; 57 background-color:#D5D5D5;
58 - border-bottom: 2px solid $style_color; 58 + border-bottom: 1px solid #AAA;
59 border-right: 1px solid #BBB; 59 border-right: 1px solid #BBB;
60 border-left: 1px solid #BBB; 60 border-left: 1px solid #BBB;
61 border-radius: 0 0 1px 1px; 61 border-radius: 0 0 1px 1px;
62 - &:first-child{ 62 + &:first-child{
63 border-bottom:none; 63 border-bottom:none;
64 border-left:none; 64 border-left:none;
65 } 65 }
66 } 66 }
67 67
68 - &.home {  
69 - a { 68 + &.home {
  69 + a {
70 background: url(home_icon.PNG) no-repeat center center; 70 background: url(home_icon.PNG) no-repeat center center;
71 text-indent:-9999px; 71 text-indent:-9999px;
72 min-width:20px; 72 min-width:20px;
73 - img { 73 + img {
74 position:relative; 74 position:relative;
75 top:4px; 75 top:4px;
76 } 76 }
77 } 77 }
78 } 78 }
79 } 79 }
80 - a { 80 + a {
81 display: block; 81 display: block;
82 text-align: center; 82 text-align: center;
83 font-weight:bold; 83 font-weight:bold;
app/controllers/commits_controller.rb
@@ -64,19 +64,14 @@ class CommitsController &lt; ApplicationController @@ -64,19 +64,14 @@ class CommitsController &lt; ApplicationController
64 @commit.to_patch, 64 @commit.to_patch,
65 type: "text/plain", 65 type: "text/plain",
66 disposition: 'attachment', 66 disposition: 'attachment',
67 - filename: (@commit.id.to_s + ".patch") 67 + filename: "#{@commit.id.patch}"
68 ) 68 )
69 end 69 end
70 70
71 protected 71 protected
72 72
73 def load_refs 73 def load_refs
74 - if params[:ref].blank?  
75 - @branch = params[:branch].blank? ? nil : params[:branch]  
76 - @tag = params[:tag].blank? ? nil : params[:tag]  
77 - @ref = @branch || @tag || @project.try(:default_branch) || 'master'  
78 - else  
79 - @ref = params[:ref]  
80 - end 74 + @ref ||= params[:ref].presence || params[:branch].presence || params[:tag].presence
  75 + @ref ||= @ref || @project.try(:default_branch) || 'master'
81 end 76 end
82 end 77 end
app/mailers/notify.rb
@@ -111,18 +111,18 @@ class Notify &lt; ActionMailer::Base @@ -111,18 +111,18 @@ class Notify &lt; ActionMailer::Base
111 # Examples 111 # Examples
112 # 112 #
113 # >> subject('Lorem ipsum') 113 # >> subject('Lorem ipsum')
114 - # => "gitlab | Lorem ipsum" 114 + # => "GitLab | Lorem ipsum"
115 # 115 #
116 # # Automatically inserts Project name when @project is set 116 # # Automatically inserts Project name when @project is set
117 # >> @project = Project.last 117 # >> @project = Project.last
118 # => #<Project id: 1, name: "Ruby on Rails", path: "ruby_on_rails", ...> 118 # => #<Project id: 1, name: "Ruby on Rails", path: "ruby_on_rails", ...>
119 # >> subject('Lorem ipsum') 119 # >> subject('Lorem ipsum')
120 - # => "gitlab | Lorem ipsum | Ruby on Rails" 120 + # => "GitLab | Lorem ipsum | Ruby on Rails"
121 # 121 #
122 # # Accepts multiple arguments 122 # # Accepts multiple arguments
123 # >> subject('Lorem ipsum', 'Dolor sit amet') 123 # >> subject('Lorem ipsum', 'Dolor sit amet')
124 - # => "gitlab | Lorem ipsum | Dolor sit amet" 124 + # => "GitLab | Lorem ipsum | Dolor sit amet"
125 def subject(*extra) 125 def subject(*extra)
126 - "gitlab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "") 126 + "GitLab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "")
127 end 127 end
128 end 128 end
app/views/errors/gitolite.html.haml
1 %h1 Git Error 1 %h1 Git Error
2 %hr 2 %hr
3 -%h2 Gitlab was unable to access your Gitolite system. 3 +%h2 GitLab was unable to access your Gitolite system.
4 4
5 .git_error_tips 5 .git_error_tips
6 %h4 Tips for Administrator: 6 %h4 Tips for Administrator:
app/views/help/index.html.haml
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 %h5= link_to "API", help_api_path 30 %h5= link_to "API", help_api_path
31 31
32 %li 32 %li
33 - %h5= link_to "Gitlab Markdown", help_markdown_path 33 + %h5= link_to "GitLab Markdown", help_markdown_path
34 34
35 %li 35 %li
36 %h5= link_to "SSH keys", help_ssh_path 36 %h5= link_to "SSH keys", help_ssh_path
app/views/help/markdown.html.haml
1 -%h3.page_title Gitlab Flavored Markdown 1 +%h3.page_title GitLab Flavored Markdown
2 .back_link 2 .back_link
3 = link_to help_path do 3 = link_to help_path do
4 &larr; to index 4 &larr; to index
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 .row 7 .row
8 .span8 8 .span8
9 %p 9 %p
10 - For Gitlab we developed something we call "Gitlab Flavored Markdown" (GFM). 10 + For GitLab we developed something we call "GitLab Flavored Markdown" (GFM).
11 It extends the standard Markdown in a few significant ways adds some useful functionality. 11 It extends the standard Markdown in a few significant ways adds some useful functionality.
12 12
13 %p You can use GFM in: 13 %p You can use GFM in:
@@ -62,7 +62,7 @@ @@ -62,7 +62,7 @@
62 %p becomes 62 %p becomes
63 = markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} 63 = markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```}
64 64
65 - %h4 Special Gitlab references 65 + %h4 Special GitLab references
66 66
67 %p 67 %p
68 GFM recognizes special references. 68 GFM recognizes special references.
app/views/help/ssh.html.haml
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 %hr 5 %hr
6 6
7 %p.slead 7 %p.slead
8 - SSH key allows you to establish a secure connection between your computer and Gitlab 8 + SSH key allows you to establish a secure connection between your computer and GitLab
9 9
10 %p.slead 10 %p.slead
11 To generate a new SSH key just open your terminal and use code below. 11 To generate a new SSH key just open your terminal and use code below.
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 \# Generating public/private rsa key pair... 17 \# Generating public/private rsa key pair...
18 18
19 %p.slead 19 %p.slead
20 - Next just use code below to dump your public key and add to GITLAB SSH Keys 20 + Next just use code below to dump your public key and add to GitLab SSH Keys
21 21
22 %pre.dark 22 %pre.dark
23 cat ~/.ssh/id_rsa.pub 23 cat ~/.ssh/id_rsa.pub
app/views/help/system_hooks.html.haml
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 %hr 5 %hr
6 6
7 %p.slead 7 %p.slead
8 - Your Gitlab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member. 8 + Your GitLab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member.
9 %br 9 %br
10 System Hooks can be used for logging or change information in LDAP server. 10 System Hooks can be used for logging or change information in LDAP server.
11 %br 11 %br
app/views/help/web_hooks.html.haml
@@ -5,11 +5,11 @@ @@ -5,11 +5,11 @@
5 %hr 5 %hr
6 6
7 %p.slead 7 %p.slead
8 - Every Gitlab project can trigger a web server whenever the repo is pushed to. 8 + Every GitLab project can trigger a web server whenever the repo is pushed to.
9 %br 9 %br
10 Web Hooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server. 10 Web Hooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server.
11 %br 11 %br
12 - GITLAB will send POST request with commits information on every push. 12 + GitLab will send POST request with commits information on every push.
13 %h5 Hooks request example: 13 %h5 Hooks request example:
14 = render "hooks/data_ex" 14 = render "hooks/data_ex"
15 15
app/views/help/workflow.html.haml
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 git commit -am "My feature is ready" 24 git commit -am "My feature is ready"
25 25
26 %li 26 %li
27 - %p Push your branch to gitlabhq 27 + %p Push your branch to GitLab
28 .bash 28 .bash
29 %pre.dark 29 %pre.dark
30 git push origin $feature_name 30 git push origin $feature_name
app/views/hooks/_data_ex.html.erb
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 :timestamp => "2012-01-03T23:36:29+02:00", 32 :timestamp => "2012-01-03T23:36:29+02:00",
33 :url => "http://localhost/diaspora/commits/da1560886d...", 33 :url => "http://localhost/diaspora/commits/da1560886d...",
34 :author => { 34 :author => {
35 - :name => "gitlab dev user", 35 + :name => "GitLab dev user",
36 :email => "gitlabdev@dv6700.(none)" 36 :email => "gitlabdev@dv6700.(none)"
37 } 37 }
38 } 38 }
app/views/issues/_form.html.haml
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
38 = f.label :description, "Details" 38 = f.label :description, "Details"
39 .input 39 .input
40 = f.text_area :description, maxlength: 2000, class: "xxlarge", rows: 14 40 = f.text_area :description, maxlength: 2000, class: "xxlarge", rows: 14
41 - %p.hint Issues are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. 41 + %p.hint Issues are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
42 42
43 43
44 .actions 44 .actions
app/views/keys/index.html.haml
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 %hr 5 %hr
6 %p.slead 6 %p.slead
7 - SSH key allows you to establish a secure connection between your computer and Gitlab 7 + SSH key allows you to establish a secure connection between your computer and GitLab
8 8
9 9
10 %table#keys-table 10 %table#keys-table
app/views/layouts/notify.html.haml
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 %head 2 %head
3 %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"} 3 %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
4 %title 4 %title
5 - gitlabhq 5 + GitLab
6 :css 6 :css
7 .header h1 {color: #BBBBBB !important; font: bold 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;} 7 .header h1 {color: #BBBBBB !important; font: bold 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;}
8 .header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;} 8 .header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;}
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 21
22 %td{align: "left", style: "padding: 18px 0 10px;", width: "580"} 22 %td{align: "left", style: "padding: 18px 0 10px;", width: "580"}
23 %h1{style: "color: #BBBBBB; font: normal 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;"} 23 %h1{style: "color: #BBBBBB; font: normal 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;"}
24 - gitlab 24 + GITLAB
25 - if @project 25 - if @project
26 | #{@project.name} 26 | #{@project.name}
27 %table{align: "center", bgcolor: "#fff", border: "0", cellpadding: "0", cellspacing: "0", style: "font-family: Helvetica, Arial, sans-serif; background: #fff;", width: "600"} 27 %table{align: "center", bgcolor: "#fff", border: "0", cellpadding: "0", cellspacing: "0", style: "font-family: Helvetica, Arial, sans-serif; background: #fff;", width: "600"}
app/views/milestones/_form.html.haml
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 = f.label :description, "Description", class: "control-label" 22 = f.label :description, "Description", class: "control-label"
23 .controls 23 .controls
24 = f.text_area :description, maxlength: 2000, class: "input-xlarge", rows: 10 24 = f.text_area :description, maxlength: 2000, class: "input-xlarge", rows: 10
25 - %p.hint Milestones are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. 25 + %p.hint Milestones are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
26 .span6 26 .span6
27 .control-group 27 .control-group
28 = f.label :due_date, "Due Date", class: "control-label" 28 = f.label :due_date, "Due Date", class: "control-label"
app/views/notes/_form.html.haml
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 = f.text_area :note, size: 255, class: 'note-text' 11 = f.text_area :note, size: 255, class: 'note-text'
12 #preview-note.preview_note.hide 12 #preview-note.preview_note.hide
13 .hint 13 .hint
14 - .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. 14 + .right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
15 .clearfix 15 .clearfix
16 16
17 .row.note_advanced_opts.hide 17 .row.note_advanced_opts.hide
app/views/notify/new_user_email.html.haml
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} 6 %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
7 Hi #{@user['name']}! 7 Hi #{@user['name']}!
8 %p{style: "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} 8 %p{style: "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "}
9 - Administrator created account for you. Now you are a member of company gitlab application. 9 + Administrator created account for you. Now you are a member of company GitLab application.
10 %td{style: "font-size: 1px; line-height: 1px;", width: "21"} 10 %td{style: "font-size: 1px; line-height: 1px;", width: "21"}
11 %tr 11 %tr
12 %td{style: "font-size: 1px; line-height: 1px;", width: "21"} 12 %td{style: "font-size: 1px; line-height: 1px;", width: "21"}
app/views/wikis/_form.html.haml
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 .middle_box_content 14 .middle_box_content
15 .input 15 .input
16 %span.cgray 16 %span.cgray
17 - Wiki content is parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. 17 + Wiki content is parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
18 To link to a (new) page you can just type 18 To link to a (new) page you can just type
19 %code [Link Title](page-slug) 19 %code [Link Title](page-slug)
20 \. 20 \.
doc/api/README.md
1 -# Gitlab API 1 +# GitLab API
2 2
3 All API requests require authentication. You need to pass a `private_token` parameter to authenticate. You can find or reset your private token in your profile. 3 All API requests require authentication. You need to pass a `private_token` parameter to authenticate. You can find or reset your private token in your profile.
4 4
@@ -10,7 +10,7 @@ If no, or an invalid, `private_token` is provided then an error message will be @@ -10,7 +10,7 @@ If no, or an invalid, `private_token` is provided then an error message will be
10 } 10 }
11 ``` 11 ```
12 12
13 -API requests should be prefixed with `api` and the API version. The API version is equal to the Gitlab major version number, which is defined in `lib/api.rb`. 13 +API requests should be prefixed with `api` and the API version. The API version is equal to the GitLab major version number, which is defined in `lib/api.rb`.
14 14
15 Example of a valid API request: 15 Example of a valid API request:
16 16
doc/installation.md
@@ -167,7 +167,7 @@ and ensure you have followed all of the above steps carefully. @@ -167,7 +167,7 @@ and ensure you have followed all of the above steps carefully.
167 # Login to MySQL 167 # Login to MySQL
168 $ mysql -u root -p 168 $ mysql -u root -p
169 169
170 - # Create the gitlabhq production database 170 + # Create the GitLab production database
171 mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; 171 mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
172 172
173 # Create the MySQL User change $password to a real password 173 # Create the MySQL User change $password to a real password
features/projects/issues/issues.feature
@@ -4,7 +4,7 @@ Feature: Issues @@ -4,7 +4,7 @@ Feature: Issues
4 And I own project "Shop" 4 And I own project "Shop"
5 And project "Shop" have "Release 0.4" open issue 5 And project "Shop" have "Release 0.4" open issue
6 And project "Shop" have "Release 0.3" closed issue 6 And project "Shop" have "Release 0.3" closed issue
7 - And I visit project "Shop" issues page 7 + And I visit project "Shop" issues page
8 8
9 Scenario: I should see open issues 9 Scenario: I should see open issues
10 Given I should see "Release 0.4" in issues 10 Given I should see "Release 0.4" in issues
@@ -36,3 +36,31 @@ Feature: Issues @@ -36,3 +36,31 @@ Feature: Issues
36 Given I visit issue page "Release 0.4" 36 Given I visit issue page "Release 0.4"
37 And I leave a comment like "XML attached" 37 And I leave a comment like "XML attached"
38 Then I should see comment "XML attached" 38 Then I should see comment "XML attached"
  39 +
  40 + @javascript
  41 + Scenario: I search issue
  42 + Given I fill in issue search with "Release"
  43 + Then I should see "Release 0.4" in issues
  44 + And I should not see "Release 0.3" in issues
  45 +
  46 + @javascript
  47 + Scenario: I search issue that not exist
  48 + Given I fill in issue search with "Bug"
  49 + Then I should not see "Release 0.4" in issues
  50 + And I should not see "Release 0.3" in issues
  51 +
  52 +
  53 + @javascript
  54 + Scenario: I search all issues
  55 + Given I click link "All"
  56 + And I fill in issue search with "0.3"
  57 + Then I should see "Release 0.3" in issues
  58 + And I should not see "Release 0.4" in issues
  59 +
  60 + @javascript
  61 + Scenario: I clear search
  62 + Given I click link "All"
  63 + And I fill in issue search with "Something"
  64 + And I fill in issue search with ""
  65 + Then I should see "Release 0.4" in issues
  66 + And I should see "Release 0.3" in issues
features/step_definitions/common_steps.rb 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +include LoginHelpers
  2 +
  3 +Given /^I signin as a user$/ do
  4 + login_as :user
  5 +end
  6 +
  7 +When /^I click link "(.*?)"$/ do |link|
  8 + click_link link
  9 +end
  10 +
  11 +When /^I click button "(.*?)"$/ do |button|
  12 + click_button button
  13 +end
  14 +
  15 +When /^I fill in "(.*?)" with "(.*?)"$/ do |field, value|
  16 + fill_in field, :with => value
  17 +end
  18 +
  19 +Given /^show me page$/ do
  20 + save_and_open_page
  21 +end
features/step_definitions/dashboard_steps.rb
1 -Given /^I visit dashboard page$/ do  
2 - visit dashboard_path  
3 -end  
4 -  
5 Then /^I should see "(.*?)" link$/ do |arg1| 1 Then /^I should see "(.*?)" link$/ do |arg1|
6 page.should have_link(arg1) 2 page.should have_link(arg1)
7 end 3 end
@@ -51,10 +47,10 @@ Then /^I click &quot;(.*?)&quot; link$/ do |arg1| @@ -51,10 +47,10 @@ Then /^I click &quot;(.*?)&quot; link$/ do |arg1|
51 end 47 end
52 48
53 Then /^I see prefilled new Merge Request page$/ do 49 Then /^I see prefilled new Merge Request page$/ do
54 - current_path.should == new_project_merge_request_path(@project)  
55 - find("#merge_request_source_branch").value.should == "new_design"  
56 - find("#merge_request_target_branch").value.should == "master"  
57 - find("#merge_request_title").value.should == "New Design" 50 + current_path.should == new_project_merge_request_path(@project)
  51 + find("#merge_request_source_branch").value.should == "new_design"
  52 + find("#merge_request_target_branch").value.should == "master"
  53 + find("#merge_request_title").value.should == "New Design"
58 end 54 end
59 55
60 Given /^I visit dashboard search page$/ do 56 Given /^I visit dashboard search page$/ do
@@ -66,10 +62,6 @@ Given /^I search for &quot;(.*?)&quot;$/ do |arg1| @@ -66,10 +62,6 @@ Given /^I search for &quot;(.*?)&quot;$/ do |arg1|
66 click_button "Search" 62 click_button "Search"
67 end 63 end
68 64
69 -Given /^I visit dashboard issues page$/ do  
70 - visit dashboard_issues_path  
71 -end  
72 -  
73 Then /^I should see issues assigned to me$/ do 65 Then /^I should see issues assigned to me$/ do
74 issues = @user.issues 66 issues = @user.issues
75 issues.each do |issue| 67 issues.each do |issue|
@@ -78,10 +70,6 @@ Then /^I should see issues assigned to me$/ do @@ -78,10 +70,6 @@ Then /^I should see issues assigned to me$/ do
78 end 70 end
79 end 71 end
80 72
81 -Given /^I visit dashboard merge requests page$/ do  
82 - visit dashboard_merge_requests_path  
83 -end  
84 -  
85 Then /^I should see my merge requests$/ do 73 Then /^I should see my merge requests$/ do
86 merge_requests = @user.merge_requests 74 merge_requests = @user.merge_requests
87 merge_requests.each do |mr| 75 merge_requests.each do |mr|
features/step_definitions/profile/profile_steps.rb
1 -Given /^I visit profile page$/ do  
2 - visit profile_path  
3 -end  
4 -  
5 Then /^I should see my profile info$/ do 1 Then /^I should see my profile info$/ do
6 page.should have_content "Profile" 2 page.should have_content "Profile"
7 page.should have_content @user.name 3 page.should have_content @user.name
8 page.should have_content @user.email 4 page.should have_content @user.email
9 end 5 end
10 6
11 -Given /^I visit profile password page$/ do  
12 - visit profile_password_path  
13 -end  
14 -  
15 Then /^I change my password$/ do 7 Then /^I change my password$/ do
16 fill_in "user_password", :with => "222333" 8 fill_in "user_password", :with => "222333"
17 fill_in "user_password_confirmation", :with => "222333" 9 fill_in "user_password_confirmation", :with => "222333"
@@ -22,10 +14,6 @@ Then /^I should be redirected to sign in page$/ do @@ -22,10 +14,6 @@ Then /^I should be redirected to sign in page$/ do
22 current_path.should == new_user_session_path 14 current_path.should == new_user_session_path
23 end 15 end
24 16
25 -Given /^I visit profile token page$/ do  
26 - visit profile_token_path  
27 -end  
28 -  
29 Then /^I reset my token$/ do 17 Then /^I reset my token$/ do
30 @old_token = @user.private_token 18 @old_token = @user.private_token
31 click_button "Reset" 19 click_button "Reset"
features/step_definitions/project/browse_code_steps.rb
1 -Given /^I visit project source page$/ do  
2 - visit tree_project_ref_path(@project, @project.root_ref)  
3 -end  
4 -  
5 Then /^I should see files from repository$/ do 1 Then /^I should see files from repository$/ do
6 page.should have_content("app") 2 page.should have_content("app")
7 page.should have_content("History") 3 page.should have_content("History")
8 page.should have_content("Gemfile") 4 page.should have_content("Gemfile")
9 end 5 end
10 6
11 -Given /^I visit project source page for "(.*?)"$/ do |arg1|  
12 - visit tree_project_ref_path(@project, arg1)  
13 -end  
14 -  
15 Then /^I should see files from repository for "(.*?)"$/ do |arg1| 7 Then /^I should see files from repository for "(.*?)"$/ do |arg1|
16 current_path.should == tree_project_ref_path(@project, arg1) 8 current_path.should == tree_project_ref_path(@project, arg1)
17 page.should have_content("app") 9 page.should have_content("app")
@@ -31,10 +23,6 @@ Given /^I click on raw button$/ do @@ -31,10 +23,6 @@ Given /^I click on raw button$/ do
31 click_link "raw" 23 click_link "raw"
32 end 24 end
33 25
34 -Given /^I visit blob file from repo$/ do  
35 - visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)  
36 -end  
37 -  
38 Then /^I should see raw file content$/ do 26 Then /^I should see raw file content$/ do
39 page.source.should == ValidCommit::BLOB_FILE 27 page.source.should == ValidCommit::BLOB_FILE
40 end 28 end
features/step_definitions/project/project_commits_steps.rb
1 -Given /^I visit project commits page$/ do  
2 - visit project_commits_path(@project)  
3 -end  
4 -  
5 Then /^I see project commits$/ do 1 Then /^I see project commits$/ do
6 current_path.should == project_commits_path(@project) 2 current_path.should == project_commits_path(@project)
7 3
@@ -23,19 +19,11 @@ Then /^I see commits atom feed$/ do @@ -23,19 +19,11 @@ Then /^I see commits atom feed$/ do
23 page.body.should have_selector("entry summary", :text => commit.description) 19 page.body.should have_selector("entry summary", :text => commit.description)
24 end 20 end
25 21
26 -Given /^I click on commit link$/ do  
27 - visit project_commit_path(@project, ValidCommit::ID)  
28 -end  
29 -  
30 Then /^I see commit info$/ do 22 Then /^I see commit info$/ do
31 page.should have_content ValidCommit::MESSAGE 23 page.should have_content ValidCommit::MESSAGE
32 page.should have_content "Showing 1 changed file" 24 page.should have_content "Showing 1 changed file"
33 end 25 end
34 26
35 -Given /^I visit compare refs page$/ do  
36 - visit compare_project_commits_path(@project)  
37 -end  
38 -  
39 Given /^I fill compare fields with refs$/ do 27 Given /^I fill compare fields with refs$/ do
40 fill_in "from", :with => "master" 28 fill_in "from", :with => "master"
41 fill_in "to", :with => "stable" 29 fill_in "to", :with => "stable"
@@ -48,18 +36,6 @@ Given /^I see compared refs$/ do @@ -48,18 +36,6 @@ Given /^I see compared refs$/ do
48 page.should have_content "Showing 73 changed files" 36 page.should have_content "Showing 73 changed files"
49 end 37 end
50 38
51 -Given /^I visit project branches page$/ do  
52 - visit branches_project_repository_path(@project)  
53 -end  
54 -  
55 -Given /^I visit project commit page$/ do  
56 - visit project_commit_path(@project, ValidCommit::ID)  
57 -end  
58 -  
59 -Given /^I visit project tags page$/ do  
60 - visit tags_project_repository_path(@project)  
61 -end  
62 -  
63 Then /^I should see "(.*?)" recent branches list$/ do |arg1| 39 Then /^I should see "(.*?)" recent branches list$/ do |arg1|
64 page.should have_content("Branches") 40 page.should have_content("Branches")
65 page.should have_content("master") 41 page.should have_content("master")
@@ -76,7 +52,7 @@ Then /^I should see &quot;(.*?)&quot; all tags list$/ do |arg1| @@ -76,7 +52,7 @@ Then /^I should see &quot;(.*?)&quot; all tags list$/ do |arg1|
76 end 52 end
77 53
78 Then /^I should see "(.*?)" protected branches list$/ do |arg1| 54 Then /^I should see "(.*?)" protected branches list$/ do |arg1|
79 - within "table" do 55 + within "table" do
80 page.should have_content "stable" 56 page.should have_content "stable"
81 page.should_not have_content "master" 57 page.should_not have_content "master"
82 end 58 end
features/step_definitions/project/project_issues_steps.rb
@@ -8,16 +8,12 @@ Given /^project &quot;(.*?)&quot; have &quot;(.*?)&quot; closed issue$/ do |arg1, arg2| @@ -8,16 +8,12 @@ Given /^project &quot;(.*?)&quot; have &quot;(.*?)&quot; closed issue$/ do |arg1, arg2|
8 Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true) 8 Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true)
9 end 9 end
10 10
11 -Given /^I visit project "(.*?)" issues page$/ do |arg1|  
12 - visit project_issues_path(Project.find_by_name(arg1))  
13 -end  
14 -  
15 Given /^I should see "(.*?)" in issues$/ do |arg1| 11 Given /^I should see "(.*?)" in issues$/ do |arg1|
16 - page.should have_content arg1 12 + page.should have_content arg1
17 end 13 end
18 14
19 Given /^I should not see "(.*?)" in issues$/ do |arg1| 15 Given /^I should not see "(.*?)" in issues$/ do |arg1|
20 - page.should_not have_content arg1 16 + page.should_not have_content arg1
21 end 17 end
22 18
23 Then /^I should see issue "(.*?)"$/ do |arg1| 19 Then /^I should see issue "(.*?)"$/ do |arg1|
@@ -27,11 +23,6 @@ Then /^I should see issue &quot;(.*?)&quot;$/ do |arg1| @@ -27,11 +23,6 @@ Then /^I should see issue &quot;(.*?)&quot;$/ do |arg1|
27 page.should have_content issue.project.name 23 page.should have_content issue.project.name
28 end 24 end
29 25
30 -Given /^I visit issue page "(.*?)"$/ do |arg1|  
31 - issue = Issue.find_by_title(arg1)  
32 - visit project_issue_path(issue.project, issue)  
33 -end  
34 -  
35 Given /^I submit new issue "(.*?)"$/ do |arg1| 26 Given /^I submit new issue "(.*?)"$/ do |arg1|
36 fill_in "issue_title", with: arg1 27 fill_in "issue_title", with: arg1
37 click_button "Submit new issue" 28 click_button "Submit new issue"
@@ -51,7 +42,16 @@ Given /^I visit project &quot;(.*?)&quot; labels page$/ do |arg1| @@ -51,7 +42,16 @@ Given /^I visit project &quot;(.*?)&quot; labels page$/ do |arg1|
51 end 42 end
52 43
53 Then /^I should see label "(.*?)"$/ do |arg1| 44 Then /^I should see label "(.*?)"$/ do |arg1|
54 - within ".labels-table" do 45 + within ".labels-table" do
55 page.should have_content arg1 46 page.should have_content arg1
56 end 47 end
57 end 48 end
  49 +
  50 +Given /^I fill in issue search with "(.*?)"$/ do |arg1|
  51 + # Because fill_in, with: "" triggers nothing
  52 + # we need to trigger a keyup event
  53 + if arg1 == ''
  54 + page.execute_script("$('.issue_search').val('').keyup();");
  55 + end
  56 + fill_in 'issue_search', with: arg1
  57 +end
features/step_definitions/project/project_merge_requests_steps.rb
@@ -8,21 +8,17 @@ Given /^project &quot;(.*?)&quot; have &quot;(.*?)&quot; closed merge request$/ do |arg1, arg2| @@ -8,21 +8,17 @@ Given /^project &quot;(.*?)&quot; have &quot;(.*?)&quot; closed merge request$/ do |arg1, arg2|
8 Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true) 8 Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true)
9 end 9 end
10 10
11 -Given /^I visit project "(.*?)" merge requests page$/ do |arg1|  
12 - visit project_merge_requests_path(Project.find_by_name(arg1))  
13 -end  
14 -  
15 Then /^I should see "(.*?)" in merge requests$/ do |arg1| 11 Then /^I should see "(.*?)" in merge requests$/ do |arg1|
16 - page.should have_content arg1 12 + page.should have_content arg1
17 end 13 end
18 14
19 Then /^I should not see "(.*?)" in merge requests$/ do |arg1| 15 Then /^I should not see "(.*?)" in merge requests$/ do |arg1|
20 - page.should_not have_content arg1 16 + page.should_not have_content arg1
21 end 17 end
22 18
23 Then /^I should see merge request "(.*?)"$/ do |arg1| 19 Then /^I should see merge request "(.*?)"$/ do |arg1|
24 merge_request = MergeRequest.find_by_title(arg1) 20 merge_request = MergeRequest.find_by_title(arg1)
25 - page.should have_content(merge_request.title[0..10]) 21 + page.should have_content(merge_request.title[0..10])
26 page.should have_content(merge_request.target_branch) 22 page.should have_content(merge_request.target_branch)
27 page.should have_content(merge_request.source_branch) 23 page.should have_content(merge_request.source_branch)
28 end 24 end
@@ -34,11 +30,6 @@ Given /^I submit new merge request &quot;(.*?)&quot;$/ do |arg1| @@ -34,11 +30,6 @@ Given /^I submit new merge request &quot;(.*?)&quot;$/ do |arg1|
34 click_button "Save" 30 click_button "Save"
35 end 31 end
36 32
37 -Given /^I visit merge request page "(.*?)"$/ do |arg1|  
38 - mr = MergeRequest.find_by_title(arg1)  
39 - visit project_merge_request_path(mr.project, mr)  
40 -end  
41 -  
42 Then /^I should see closed merge request "(.*?)"$/ do |arg1| 33 Then /^I should see closed merge request "(.*?)"$/ do |arg1|
43 mr = MergeRequest.find_by_title(arg1) 34 mr = MergeRequest.find_by_title(arg1)
44 mr.closed.should be_true 35 mr.closed.should be_true
features/step_definitions/project/project_milestones_steps.rb
@@ -12,11 +12,6 @@ Given /^project &quot;(.*?)&quot; has milestone &quot;(.*?)&quot;$/ do |arg1, arg2| @@ -12,11 +12,6 @@ Given /^project &quot;(.*?)&quot; has milestone &quot;(.*?)&quot;$/ do |arg1, arg2|
12 end 12 end
13 end 13 end
14 14
15 -Given /^I visit project "(.*?)" milestones page$/ do |arg1|  
16 - @project = Project.find_by_name(arg1)  
17 - visit project_milestones_path(@project)  
18 -end  
19 -  
20 Then /^I should see active milestones$/ do 15 Then /^I should see active milestones$/ do
21 milestone = @project.milestones.first 16 milestone = @project.milestones.first
22 page.should have_content(milestone.title[0..10]) 17 page.should have_content(milestone.title[0..10])
features/step_definitions/project/project_team_steps.rb
@@ -8,10 +8,6 @@ Given /^&quot;(.*?)&quot; is &quot;(.*?)&quot; developer$/ do |arg1, arg2| @@ -8,10 +8,6 @@ Given /^&quot;(.*?)&quot; is &quot;(.*?)&quot; developer$/ do |arg1, arg2|
8 project.add_access(user, :write) 8 project.add_access(user, :write)
9 end 9 end
10 10
11 -Given /^I visit project "(.*?)" team page$/ do |arg1|  
12 - visit team_project_path(Project.find_by_name(arg1))  
13 -end  
14 -  
15 Then /^I should be able to see myself in team$/ do 11 Then /^I should be able to see myself in team$/ do
16 page.should have_content(@user.name) 12 page.should have_content(@user.name)
17 page.should have_content(@user.email) 13 page.should have_content(@user.email)
@@ -23,13 +19,9 @@ Then /^I should see &quot;(.*?)&quot; in team list$/ do |arg1| @@ -23,13 +19,9 @@ Then /^I should see &quot;(.*?)&quot; in team list$/ do |arg1|
23 page.should have_content(user.email) 19 page.should have_content(user.email)
24 end 20 end
25 21
26 -Given /^I click link "(.*?)"$/ do |arg1|  
27 - click_link arg1  
28 -end  
29 -  
30 Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2| 22 Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2|
31 user = User.find_by_name(arg1) 23 user = User.find_by_name(arg1)
32 - within "#new_team_member" do 24 + within "#new_team_member" do
33 select user.name, :from => "team_member_user_id" 25 select user.name, :from => "team_member_user_id"
34 select arg2, :from => "team_member_project_access" 26 select arg2, :from => "team_member_project_access"
35 end 27 end
@@ -44,7 +36,7 @@ end @@ -44,7 +36,7 @@ end
44 36
45 Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2| 37 Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2|
46 user = User.find_by_name(arg1) 38 user = User.find_by_name(arg1)
47 - within ".user_#{user.id}" do 39 + within ".user_#{user.id}" do
48 select arg2, :from => "team_member_project_access" 40 select arg2, :from => "team_member_project_access"
49 end 41 end
50 end 42 end
features/step_definitions/project/project_wiki_steps.rb
1 -Given /^I visit project wiki page$/ do  
2 - visit project_wiki_path(@project, :index)  
3 -end  
4 -  
5 Given /^I create Wiki page$/ do 1 Given /^I create Wiki page$/ do
6 fill_in "Title", :with => 'Test title' 2 fill_in "Title", :with => 'Test title'
7 fill_in "Content", :with => '[link test](test)' 3 fill_in "Content", :with => '[link test](test)'
features/step_definitions/project/projects_steps.rb
1 -include LoginHelpers  
2 -  
3 -Given /^I signin as a user$/ do  
4 - login_as :user  
5 -end  
6 -  
7 When /^I visit new project page$/ do 1 When /^I visit new project page$/ do
8 visit new_project_path 2 visit new_project_path
9 end 3 end
@@ -65,10 +59,6 @@ Given /^I visit project &quot;(.*?)&quot; network page$/ do |arg1| @@ -65,10 +59,6 @@ Given /^I visit project &quot;(.*?)&quot; network page$/ do |arg1|
65 visit graph_project_path(project) 59 visit graph_project_path(project)
66 end 60 end
67 61
68 -Given /^show me page$/ do  
69 - save_and_open_page  
70 -end  
71 -  
72 Given /^page should have network graph$/ do 62 Given /^page should have network graph$/ do
73 page.should have_content "Project Network Graph" 63 page.should have_content "Project Network Graph"
74 within ".graph" do 64 within ".graph" do
features/step_definitions/visit_steps.rb 0 → 100644
@@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
  1 +Given /^I visit project "(.*?)" issues page$/ do |arg1|
  2 + visit project_issues_path(Project.find_by_name(arg1))
  3 +end
  4 +
  5 +Given /^I visit issue page "(.*?)"$/ do |arg1|
  6 + issue = Issue.find_by_title(arg1)
  7 + visit project_issue_path(issue.project, issue)
  8 +end
  9 +
  10 +Given /^I visit project "(.*?)" merge requests page$/ do |arg1|
  11 + visit project_merge_requests_path(Project.find_by_name(arg1))
  12 +end
  13 +
  14 +Given /^I visit merge request page "(.*?)"$/ do |arg1|
  15 + mr = MergeRequest.find_by_title(arg1)
  16 + visit project_merge_request_path(mr.project, mr)
  17 +end
  18 +
  19 +Given /^I visit project "(.*?)" milestones page$/ do |arg1|
  20 + @project = Project.find_by_name(arg1)
  21 + visit project_milestones_path(@project)
  22 +end
  23 +
  24 +Given /^I visit project commits page$/ do
  25 + visit project_commits_path(@project)
  26 +end
  27 +
  28 +Given /^I visit compare refs page$/ do
  29 + visit compare_project_commits_path(@project)
  30 +end
  31 +
  32 +Given /^I visit project branches page$/ do
  33 + visit branches_project_repository_path(@project)
  34 +end
  35 +
  36 +Given /^I visit project commit page$/ do
  37 + visit project_commit_path(@project, ValidCommit::ID)
  38 +end
  39 +
  40 +Given /^I visit project tags page$/ do
  41 + visit tags_project_repository_path(@project)
  42 +end
  43 +
  44 +Given /^I click on commit link$/ do
  45 + visit project_commit_path(@project, ValidCommit::ID)
  46 +end
  47 +
  48 +Given /^I visit project source page$/ do
  49 + visit tree_project_ref_path(@project, @project.root_ref)
  50 +end
  51 +
  52 +Given /^I visit project source page for "(.*?)"$/ do |arg1|
  53 + visit tree_project_ref_path(@project, arg1)
  54 +end
  55 +
  56 +Given /^I visit blob file from repo$/ do
  57 + visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
  58 +end
  59 +
  60 +Given /^I visit project "(.*?)" team page$/ do |arg1|
  61 + visit team_project_path(Project.find_by_name(arg1))
  62 +end
  63 +
  64 +Given /^I visit project wiki page$/ do
  65 + visit project_wiki_path(@project, :index)
  66 +end
  67 +
  68 +Given /^I visit profile page$/ do
  69 + visit profile_path
  70 +end
  71 +
  72 +Given /^I visit profile token page$/ do
  73 + visit profile_token_path
  74 +end
  75 +
  76 +Given /^I visit profile password page$/ do
  77 + visit profile_password_path
  78 +end
  79 +
  80 +Given /^I visit dashboard page$/ do
  81 + visit dashboard_path
  82 +end
  83 +
  84 +Given /^I visit dashboard issues page$/ do
  85 + visit dashboard_issues_path
  86 +end
  87 +
  88 +Given /^I visit dashboard merge requests page$/ do
  89 + visit dashboard_merge_requests_path
  90 +end
  91 +
lib/gitlab/backend/gitolite.rb
@@ -170,7 +170,7 @@ module Gitlab @@ -170,7 +170,7 @@ module Gitlab
170 def push 170 def push
171 Dir.chdir(File.join(@local_dir, "gitolite")) 171 Dir.chdir(File.join(@local_dir, "gitolite"))
172 `git add -A` 172 `git add -A`
173 - `git commit -am "Gitlab"` 173 + `git commit -am "GitLab"`
174 `git push` 174 `git push`
175 Dir.chdir(Rails.root) 175 Dir.chdir(Rails.root)
176 176
lib/gitlab/markdown.rb
1 module Gitlab 1 module Gitlab
2 - # Custom parser for Gitlab-flavored Markdown 2 + # Custom parser for GitLab-flavored Markdown
3 # 3 #
4 # It replaces references in the text with links to the appropriate items in 4 # It replaces references in the text with links to the appropriate items in
5 - # Gitlab. 5 + # GitLab.
6 # 6 #
7 # Supported reference formats are: 7 # Supported reference formats are:
8 # * @foo for team members 8 # * @foo for team members
lib/hooks/post-receive
1 #!/usr/bin/env bash 1 #!/usr/bin/env bash
2 2
3 -# This file was placed here by Gitlab. It makes sure that your pushed commits 3 +# This file was placed here by GitLab. It makes sure that your pushed commits
4 # will be processed properly. 4 # will be processed properly.
5 5
6 while read oldrev newrev ref 6 while read oldrev newrev ref
lib/tasks/gitlab/write_hook.rake
1 namespace :gitlab do 1 namespace :gitlab do
2 namespace :gitolite do 2 namespace :gitolite do
3 - desc "GITLAB | Write GITLAB hook for gitolite" 3 + desc "GITLAB | Write GitLab hook for gitolite"
4 task :write_hooks => :environment do 4 task :write_hooks => :environment do
5 gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") 5 gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common")
6 gitlab_hooks_path = Rails.root.join("lib", "hooks") 6 gitlab_hooks_path = Rails.root.join("lib", "hooks")
spec/factories_spec.rb
1 require 'spec_helper' 1 require 'spec_helper'
2 2
3 -describe "Factories" do  
4 - describe 'User' do  
5 - it "builds a valid instance" do  
6 - build(:user).should be_valid  
7 - end  
8 -  
9 - it "builds a valid admin instance" do  
10 - build(:admin).should be_valid  
11 - end  
12 - end  
13 -  
14 - describe 'Project' do  
15 - it "builds a valid instance" do  
16 - build(:project).should be_valid  
17 - end  
18 - end  
19 -  
20 - describe 'Issue' do  
21 - it "builds a valid instance" do  
22 - build(:issue).should be_valid  
23 - end  
24 -  
25 - it "builds a valid closed instance" do  
26 - build(:closed_issue).should be_valid  
27 - end  
28 - end  
29 -  
30 - describe 'MergeRequest' do  
31 - it "builds a valid instance" do  
32 - build(:merge_request).should be_valid  
33 - end  
34 - end  
35 -  
36 - describe 'Note' do  
37 - it "builds a valid instance" do  
38 - build(:note).should be_valid  
39 - end  
40 - end  
41 -  
42 - describe 'Event' do  
43 - it "builds a valid instance" do  
44 - build(:event).should be_valid  
45 - end  
46 - end  
47 -  
48 - describe 'Key' do  
49 - it "builds a valid instance" do  
50 - build(:key).should be_valid  
51 - end  
52 -  
53 - it "builds a valid deploy key instance" do  
54 - build(:deploy_key).should be_valid  
55 - end  
56 -  
57 - it "builds a valid personal key instance" do  
58 - build(:personal_key).should be_valid  
59 - end  
60 - end  
61 -  
62 - describe 'Milestone' do  
63 - it "builds a valid instance" do  
64 - build(:milestone).should be_valid  
65 - end  
66 - end  
67 -  
68 - describe 'SystemHook' do  
69 - it "builds a valid instance" do  
70 - build(:system_hook).should be_valid  
71 - end  
72 - end  
73 -  
74 - describe 'ProjectHook' do  
75 - it "builds a valid instance" do  
76 - build(:project_hook).should be_valid  
77 - end  
78 - end  
79 -  
80 - describe 'Wiki' do  
81 - it "builds a valid instance" do  
82 - build(:wiki).should be_valid  
83 - end  
84 - end  
85 -  
86 - describe 'Snippet' do  
87 - it "builds a valid instance" do  
88 - build(:snippet).should be_valid 3 +FactoryGirl.factories.map(&:name).each do |factory_name|
  4 + describe "#{factory_name} factory" do
  5 + it 'should be valid' do
  6 + build(factory_name).should be_valid
89 end 7 end
90 end 8 end
91 end 9 end
spec/mailers/notify_spec.rb
@@ -24,7 +24,7 @@ describe Notify do @@ -24,7 +24,7 @@ describe Notify do
24 end 24 end
25 25
26 it 'has the correct subject' do 26 it 'has the correct subject' do
27 - should have_subject /^gitlab \| Account was created for you$/ 27 + should have_subject /^gitlab \| Account was created for you$/i
28 end 28 end
29 29
30 it 'contains the new user\'s login name' do 30 it 'contains the new user\'s login name' do