Commit 8808c5fa8d0102d1cf0641812a029434b0d6ede8
Exists in
master
and in
4 other branches
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 | -$(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/application.js
| ... | ... | @@ -17,134 +17,3 @@ |
| 17 | 17 | //= require raphael |
| 18 | 18 | //= require branch-graph |
| 19 | 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 | -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 | -} |
| ... | ... | @@ -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
| ... | ... | @@ -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 | 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 | 13 | # Git clone panel switcher |
| 15 | 14 | $ -> |
| 16 | - scope = $('.project_clone_holder') | |
| 15 | + scope = $ '.project_clone_holder' | |
| 17 | 16 | if scope.length > 0 |
| 18 | 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
app/assets/javascripts/team.js
app/assets/stylesheets/gitlab_bootstrap/files.scss
app/assets/stylesheets/main.scss
| 1 | 1 | @import "bootstrap"; |
| 2 | 2 | @import "bootstrap-responsive"; |
| 3 | 3 | |
| 4 | -/** GITLAB colors **/ | |
| 4 | +/** GitLab colors **/ | |
| 5 | 5 | $link_color:#3A89A3; |
| 6 | 6 | $blue_link: #2fa0bb; |
| 7 | 7 | $style_color: #474d57; |
| 8 | 8 | $hover: #fdf5d9; |
| 9 | 9 | |
| 10 | -/** GITLAB Fonts **/ | |
| 10 | +/** GitLab Fonts **/ | |
| 11 | 11 | @font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } |
| 12 | 12 | |
| 13 | 13 | /** MIXINS **/ |
| ... | ... | @@ -113,9 +113,9 @@ $hover: #fdf5d9; |
| 113 | 113 | @import "themes/ui_modern.scss"; |
| 114 | 114 | |
| 115 | 115 | /** |
| 116 | - * Gitlab bootstrap. | |
| 116 | + * GitLab bootstrap. | |
| 117 | 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 | 120 | @import "gitlab_bootstrap/common.scss"; |
| 121 | 121 | @import "gitlab_bootstrap/typography.scss"; | ... | ... |
app/assets/stylesheets/sections/header.scss
| ... | ... | @@ -22,7 +22,7 @@ header { |
| 22 | 22 | * |
| 23 | 23 | */ |
| 24 | 24 | .app_logo { |
| 25 | - width:230px; | |
| 25 | + width:200px; | |
| 26 | 26 | float:left; |
| 27 | 27 | position:relative; |
| 28 | 28 | top:-5px; |
| ... | ... | @@ -31,7 +31,7 @@ header { |
| 31 | 31 | |
| 32 | 32 | h1 { |
| 33 | 33 | padding-top: 5px; |
| 34 | - width:102px; | |
| 34 | + width:90px; | |
| 35 | 35 | background: url('logo_dark.png') no-repeat 0px -3px; |
| 36 | 36 | float:left; |
| 37 | 37 | margin-left:5px; | ... | ... |
app/assets/stylesheets/sections/nav.scss
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | * Main Menu of Application |
| 3 | 3 | * |
| 4 | 4 | */ |
| 5 | -ul.main_menu { | |
| 5 | +ul.main_menu { | |
| 6 | 6 | border-radius: 4px; |
| 7 | 7 | margin: auto; |
| 8 | 8 | margin:30px 0; |
| ... | ... | @@ -12,7 +12,7 @@ ul.main_menu { |
| 12 | 12 | position:relative; |
| 13 | 13 | overflow:hidden; |
| 14 | 14 | @include shade; |
| 15 | - .count { | |
| 15 | + .count { | |
| 16 | 16 | position: relative; |
| 17 | 17 | top: -1px; |
| 18 | 18 | display: inline-block; |
| ... | ... | @@ -29,12 +29,12 @@ ul.main_menu { |
| 29 | 29 | border-radius: 8px; |
| 30 | 30 | -moz-border-radius: 8px; |
| 31 | 31 | } |
| 32 | - .label { | |
| 32 | + .label { | |
| 33 | 33 | background:$hover; |
| 34 | 34 | text-shadow:none; |
| 35 | 35 | color:$style_color; |
| 36 | 36 | } |
| 37 | - li { | |
| 37 | + li { | |
| 38 | 38 | list-style-type: none; |
| 39 | 39 | margin: 0; |
| 40 | 40 | display: table-cell; |
| ... | ... | @@ -43,7 +43,7 @@ ul.main_menu { |
| 43 | 43 | border-left: 1px solid #EEE; |
| 44 | 44 | border-bottom:2px solid #CFCFCF; |
| 45 | 45 | |
| 46 | - &:first-child{ | |
| 46 | + &:first-child{ | |
| 47 | 47 | -webkit-border-top-left-radius: 4px; |
| 48 | 48 | -webkit-border-bottom-left-radius: 4px; |
| 49 | 49 | -moz-border-radius-topleft: 4px; |
| ... | ... | @@ -53,31 +53,31 @@ ul.main_menu { |
| 53 | 53 | border-left: 0; |
| 54 | 54 | } |
| 55 | 55 | |
| 56 | - &.current { | |
| 56 | + &.current { | |
| 57 | 57 | background-color:#D5D5D5; |
| 58 | - border-bottom: 2px solid $style_color; | |
| 58 | + border-bottom: 1px solid #AAA; | |
| 59 | 59 | border-right: 1px solid #BBB; |
| 60 | 60 | border-left: 1px solid #BBB; |
| 61 | 61 | border-radius: 0 0 1px 1px; |
| 62 | - &:first-child{ | |
| 62 | + &:first-child{ | |
| 63 | 63 | border-bottom:none; |
| 64 | 64 | border-left:none; |
| 65 | 65 | } |
| 66 | 66 | } |
| 67 | 67 | |
| 68 | - &.home { | |
| 69 | - a { | |
| 68 | + &.home { | |
| 69 | + a { | |
| 70 | 70 | background: url(home_icon.PNG) no-repeat center center; |
| 71 | 71 | text-indent:-9999px; |
| 72 | 72 | min-width:20px; |
| 73 | - img { | |
| 73 | + img { | |
| 74 | 74 | position:relative; |
| 75 | 75 | top:4px; |
| 76 | 76 | } |
| 77 | 77 | } |
| 78 | 78 | } |
| 79 | 79 | } |
| 80 | - a { | |
| 80 | + a { | |
| 81 | 81 | display: block; |
| 82 | 82 | text-align: center; |
| 83 | 83 | font-weight:bold; | ... | ... |
app/controllers/commits_controller.rb
| ... | ... | @@ -64,19 +64,14 @@ class CommitsController < ApplicationController |
| 64 | 64 | @commit.to_patch, |
| 65 | 65 | type: "text/plain", |
| 66 | 66 | disposition: 'attachment', |
| 67 | - filename: (@commit.id.to_s + ".patch") | |
| 67 | + filename: "#{@commit.id.patch}" | |
| 68 | 68 | ) |
| 69 | 69 | end |
| 70 | 70 | |
| 71 | 71 | protected |
| 72 | 72 | |
| 73 | 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 | 76 | end |
| 82 | 77 | end | ... | ... |
app/mailers/notify.rb
| ... | ... | @@ -111,18 +111,18 @@ class Notify < ActionMailer::Base |
| 111 | 111 | # Examples |
| 112 | 112 | # |
| 113 | 113 | # >> subject('Lorem ipsum') |
| 114 | - # => "gitlab | Lorem ipsum" | |
| 114 | + # => "GitLab | Lorem ipsum" | |
| 115 | 115 | # |
| 116 | 116 | # # Automatically inserts Project name when @project is set |
| 117 | 117 | # >> @project = Project.last |
| 118 | 118 | # => #<Project id: 1, name: "Ruby on Rails", path: "ruby_on_rails", ...> |
| 119 | 119 | # >> subject('Lorem ipsum') |
| 120 | - # => "gitlab | Lorem ipsum | Ruby on Rails" | |
| 120 | + # => "GitLab | Lorem ipsum | Ruby on Rails" | |
| 121 | 121 | # |
| 122 | 122 | # # Accepts multiple arguments |
| 123 | 123 | # >> subject('Lorem ipsum', 'Dolor sit amet') |
| 124 | - # => "gitlab | Lorem ipsum | Dolor sit amet" | |
| 124 | + # => "GitLab | Lorem ipsum | Dolor sit amet" | |
| 125 | 125 | def subject(*extra) |
| 126 | - "gitlab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "") | |
| 126 | + "GitLab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "") | |
| 127 | 127 | end |
| 128 | 128 | end | ... | ... |
app/views/errors/gitolite.html.haml
app/views/help/index.html.haml
app/views/help/markdown.html.haml
| 1 | -%h3.page_title Gitlab Flavored Markdown | |
| 1 | +%h3.page_title GitLab Flavored Markdown | |
| 2 | 2 | .back_link |
| 3 | 3 | = link_to help_path do |
| 4 | 4 | ← to index |
| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | .row |
| 8 | 8 | .span8 |
| 9 | 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 | 11 | It extends the standard Markdown in a few significant ways adds some useful functionality. |
| 12 | 12 | |
| 13 | 13 | %p You can use GFM in: |
| ... | ... | @@ -62,7 +62,7 @@ |
| 62 | 62 | %p becomes |
| 63 | 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 | 67 | %p |
| 68 | 68 | GFM recognizes special references. | ... | ... |
app/views/help/ssh.html.haml
| ... | ... | @@ -5,7 +5,7 @@ |
| 5 | 5 | %hr |
| 6 | 6 | |
| 7 | 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 | 10 | %p.slead |
| 11 | 11 | To generate a new SSH key just open your terminal and use code below. |
| ... | ... | @@ -17,7 +17,7 @@ |
| 17 | 17 | \# Generating public/private rsa key pair... |
| 18 | 18 | |
| 19 | 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 | 22 | %pre.dark |
| 23 | 23 | cat ~/.ssh/id_rsa.pub | ... | ... |
app/views/help/system_hooks.html.haml
| ... | ... | @@ -5,7 +5,7 @@ |
| 5 | 5 | %hr |
| 6 | 6 | |
| 7 | 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 | 9 | %br |
| 10 | 10 | System Hooks can be used for logging or change information in LDAP server. |
| 11 | 11 | %br | ... | ... |
app/views/help/web_hooks.html.haml
| ... | ... | @@ -5,11 +5,11 @@ |
| 5 | 5 | %hr |
| 6 | 6 | |
| 7 | 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 | 9 | %br |
| 10 | 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 | 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 | 13 | %h5 Hooks request example: |
| 14 | 14 | = render "hooks/data_ex" |
| 15 | 15 | ... | ... |
app/views/help/workflow.html.haml
app/views/hooks/_data_ex.html.erb
app/views/issues/_form.html.haml
| ... | ... | @@ -38,7 +38,7 @@ |
| 38 | 38 | = f.label :description, "Details" |
| 39 | 39 | .input |
| 40 | 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 | 44 | .actions | ... | ... |
app/views/keys/index.html.haml
app/views/layouts/notify.html.haml
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | %head |
| 3 | 3 | %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"} |
| 4 | 4 | %title |
| 5 | - gitlabhq | |
| 5 | + GitLab | |
| 6 | 6 | :css |
| 7 | 7 | .header h1 {color: #BBBBBB !important; font: bold 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;} |
| 8 | 8 | .header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;} |
| ... | ... | @@ -21,7 +21,7 @@ |
| 21 | 21 | \ |
| 22 | 22 | %td{align: "left", style: "padding: 18px 0 10px;", width: "580"} |
| 23 | 23 | %h1{style: "color: #BBBBBB; font: normal 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;"} |
| 24 | - gitlab | |
| 24 | + GITLAB | |
| 25 | 25 | - if @project |
| 26 | 26 | | #{@project.name} |
| 27 | 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 | 22 | = f.label :description, "Description", class: "control-label" |
| 23 | 23 | .controls |
| 24 | 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 | 26 | .span6 |
| 27 | 27 | .control-group |
| 28 | 28 | = f.label :due_date, "Due Date", class: "control-label" | ... | ... |
app/views/notes/_form.html.haml
| ... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 | = f.text_area :note, size: 255, class: 'note-text' |
| 12 | 12 | #preview-note.preview_note.hide |
| 13 | 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 | 15 | .clearfix |
| 16 | 16 | |
| 17 | 17 | .row.note_advanced_opts.hide | ... | ... |
app/views/notify/new_user_email.html.haml
| ... | ... | @@ -6,7 +6,7 @@ |
| 6 | 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 | 7 | Hi #{@user['name']}! |
| 8 | 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 | 10 | %td{style: "font-size: 1px; line-height: 1px;", width: "21"} |
| 11 | 11 | %tr |
| 12 | 12 | %td{style: "font-size: 1px; line-height: 1px;", width: "21"} | ... | ... |
app/views/wikis/_form.html.haml
| ... | ... | @@ -14,7 +14,7 @@ |
| 14 | 14 | .middle_box_content |
| 15 | 15 | .input |
| 16 | 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 | 18 | To link to a (new) page you can just type |
| 19 | 19 | %code [Link Title](page-slug) |
| 20 | 20 | \. | ... | ... |
doc/api/README.md
| 1 | -# Gitlab API | |
| 1 | +# GitLab API | |
| 2 | 2 | |
| 3 | 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 | 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 | 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 | 167 | # Login to MySQL |
| 168 | 168 | $ mysql -u root -p |
| 169 | 169 | |
| 170 | - # Create the gitlabhq production database | |
| 170 | + # Create the GitLab production database | |
| 171 | 171 | mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; |
| 172 | 172 | |
| 173 | 173 | # Create the MySQL User change $password to a real password | ... | ... |
features/projects/issues/issues.feature
| ... | ... | @@ -4,7 +4,7 @@ Feature: Issues |
| 4 | 4 | And I own project "Shop" |
| 5 | 5 | And project "Shop" have "Release 0.4" open issue |
| 6 | 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 | 9 | Scenario: I should see open issues |
| 10 | 10 | Given I should see "Release 0.4" in issues |
| ... | ... | @@ -36,3 +36,31 @@ Feature: Issues |
| 36 | 36 | Given I visit issue page "Release 0.4" |
| 37 | 37 | And I leave a comment like "XML attached" |
| 38 | 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 | ... | ... |
| ... | ... | @@ -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 | 1 | Then /^I should see "(.*?)" link$/ do |arg1| |
| 6 | 2 | page.should have_link(arg1) |
| 7 | 3 | end |
| ... | ... | @@ -51,10 +47,10 @@ Then /^I click "(.*?)" link$/ do |arg1| |
| 51 | 47 | end |
| 52 | 48 | |
| 53 | 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 | 54 | end |
| 59 | 55 | |
| 60 | 56 | Given /^I visit dashboard search page$/ do |
| ... | ... | @@ -66,10 +62,6 @@ Given /^I search for "(.*?)"$/ do |arg1| |
| 66 | 62 | click_button "Search" |
| 67 | 63 | end |
| 68 | 64 | |
| 69 | -Given /^I visit dashboard issues page$/ do | |
| 70 | - visit dashboard_issues_path | |
| 71 | -end | |
| 72 | - | |
| 73 | 65 | Then /^I should see issues assigned to me$/ do |
| 74 | 66 | issues = @user.issues |
| 75 | 67 | issues.each do |issue| |
| ... | ... | @@ -78,10 +70,6 @@ Then /^I should see issues assigned to me$/ do |
| 78 | 70 | end |
| 79 | 71 | end |
| 80 | 72 | |
| 81 | -Given /^I visit dashboard merge requests page$/ do | |
| 82 | - visit dashboard_merge_requests_path | |
| 83 | -end | |
| 84 | - | |
| 85 | 73 | Then /^I should see my merge requests$/ do |
| 86 | 74 | merge_requests = @user.merge_requests |
| 87 | 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 | 1 | Then /^I should see my profile info$/ do |
| 6 | 2 | page.should have_content "Profile" |
| 7 | 3 | page.should have_content @user.name |
| 8 | 4 | page.should have_content @user.email |
| 9 | 5 | end |
| 10 | 6 | |
| 11 | -Given /^I visit profile password page$/ do | |
| 12 | - visit profile_password_path | |
| 13 | -end | |
| 14 | - | |
| 15 | 7 | Then /^I change my password$/ do |
| 16 | 8 | fill_in "user_password", :with => "222333" |
| 17 | 9 | fill_in "user_password_confirmation", :with => "222333" |
| ... | ... | @@ -22,10 +14,6 @@ Then /^I should be redirected to sign in page$/ do |
| 22 | 14 | current_path.should == new_user_session_path |
| 23 | 15 | end |
| 24 | 16 | |
| 25 | -Given /^I visit profile token page$/ do | |
| 26 | - visit profile_token_path | |
| 27 | -end | |
| 28 | - | |
| 29 | 17 | Then /^I reset my token$/ do |
| 30 | 18 | @old_token = @user.private_token |
| 31 | 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 | 1 | Then /^I should see files from repository$/ do |
| 6 | 2 | page.should have_content("app") |
| 7 | 3 | page.should have_content("History") |
| 8 | 4 | page.should have_content("Gemfile") |
| 9 | 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 | 7 | Then /^I should see files from repository for "(.*?)"$/ do |arg1| |
| 16 | 8 | current_path.should == tree_project_ref_path(@project, arg1) |
| 17 | 9 | page.should have_content("app") |
| ... | ... | @@ -31,10 +23,6 @@ Given /^I click on raw button$/ do |
| 31 | 23 | click_link "raw" |
| 32 | 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 | 26 | Then /^I should see raw file content$/ do |
| 39 | 27 | page.source.should == ValidCommit::BLOB_FILE |
| 40 | 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 | 1 | Then /^I see project commits$/ do |
| 6 | 2 | current_path.should == project_commits_path(@project) |
| 7 | 3 | |
| ... | ... | @@ -23,19 +19,11 @@ Then /^I see commits atom feed$/ do |
| 23 | 19 | page.body.should have_selector("entry summary", :text => commit.description) |
| 24 | 20 | end |
| 25 | 21 | |
| 26 | -Given /^I click on commit link$/ do | |
| 27 | - visit project_commit_path(@project, ValidCommit::ID) | |
| 28 | -end | |
| 29 | - | |
| 30 | 22 | Then /^I see commit info$/ do |
| 31 | 23 | page.should have_content ValidCommit::MESSAGE |
| 32 | 24 | page.should have_content "Showing 1 changed file" |
| 33 | 25 | end |
| 34 | 26 | |
| 35 | -Given /^I visit compare refs page$/ do | |
| 36 | - visit compare_project_commits_path(@project) | |
| 37 | -end | |
| 38 | - | |
| 39 | 27 | Given /^I fill compare fields with refs$/ do |
| 40 | 28 | fill_in "from", :with => "master" |
| 41 | 29 | fill_in "to", :with => "stable" |
| ... | ... | @@ -48,18 +36,6 @@ Given /^I see compared refs$/ do |
| 48 | 36 | page.should have_content "Showing 73 changed files" |
| 49 | 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 | 39 | Then /^I should see "(.*?)" recent branches list$/ do |arg1| |
| 64 | 40 | page.should have_content("Branches") |
| 65 | 41 | page.should have_content("master") |
| ... | ... | @@ -76,7 +52,7 @@ Then /^I should see "(.*?)" all tags list$/ do |arg1| |
| 76 | 52 | end |
| 77 | 53 | |
| 78 | 54 | Then /^I should see "(.*?)" protected branches list$/ do |arg1| |
| 79 | - within "table" do | |
| 55 | + within "table" do | |
| 80 | 56 | page.should have_content "stable" |
| 81 | 57 | page.should_not have_content "master" |
| 82 | 58 | end | ... | ... |
features/step_definitions/project/project_issues_steps.rb
| ... | ... | @@ -8,16 +8,12 @@ Given /^project "(.*?)" have "(.*?)" closed issue$/ do |arg1, arg2| |
| 8 | 8 | Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true) |
| 9 | 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 | 11 | Given /^I should see "(.*?)" in issues$/ do |arg1| |
| 16 | - page.should have_content arg1 | |
| 12 | + page.should have_content arg1 | |
| 17 | 13 | end |
| 18 | 14 | |
| 19 | 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 | 17 | end |
| 22 | 18 | |
| 23 | 19 | Then /^I should see issue "(.*?)"$/ do |arg1| |
| ... | ... | @@ -27,11 +23,6 @@ Then /^I should see issue "(.*?)"$/ do |arg1| |
| 27 | 23 | page.should have_content issue.project.name |
| 28 | 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 | 26 | Given /^I submit new issue "(.*?)"$/ do |arg1| |
| 36 | 27 | fill_in "issue_title", with: arg1 |
| 37 | 28 | click_button "Submit new issue" |
| ... | ... | @@ -51,7 +42,16 @@ Given /^I visit project "(.*?)" labels page$/ do |arg1| |
| 51 | 42 | end |
| 52 | 43 | |
| 53 | 44 | Then /^I should see label "(.*?)"$/ do |arg1| |
| 54 | - within ".labels-table" do | |
| 45 | + within ".labels-table" do | |
| 55 | 46 | page.should have_content arg1 |
| 56 | 47 | end |
| 57 | 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 "(.*?)" have "(.*?)" closed merge request$/ do |arg1, arg2| |
| 8 | 8 | Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true) |
| 9 | 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 | 11 | Then /^I should see "(.*?)" in merge requests$/ do |arg1| |
| 16 | - page.should have_content arg1 | |
| 12 | + page.should have_content arg1 | |
| 17 | 13 | end |
| 18 | 14 | |
| 19 | 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 | 17 | end |
| 22 | 18 | |
| 23 | 19 | Then /^I should see merge request "(.*?)"$/ do |arg1| |
| 24 | 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 | 22 | page.should have_content(merge_request.target_branch) |
| 27 | 23 | page.should have_content(merge_request.source_branch) |
| 28 | 24 | end |
| ... | ... | @@ -34,11 +30,6 @@ Given /^I submit new merge request "(.*?)"$/ do |arg1| |
| 34 | 30 | click_button "Save" |
| 35 | 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 | 33 | Then /^I should see closed merge request "(.*?)"$/ do |arg1| |
| 43 | 34 | mr = MergeRequest.find_by_title(arg1) |
| 44 | 35 | mr.closed.should be_true | ... | ... |
features/step_definitions/project/project_milestones_steps.rb
| ... | ... | @@ -12,11 +12,6 @@ Given /^project "(.*?)" has milestone "(.*?)"$/ do |arg1, arg2| |
| 12 | 12 | end |
| 13 | 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 | 15 | Then /^I should see active milestones$/ do |
| 21 | 16 | milestone = @project.milestones.first |
| 22 | 17 | page.should have_content(milestone.title[0..10]) | ... | ... |
features/step_definitions/project/project_team_steps.rb
| ... | ... | @@ -8,10 +8,6 @@ Given /^"(.*?)" is "(.*?)" developer$/ do |arg1, arg2| |
| 8 | 8 | project.add_access(user, :write) |
| 9 | 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 | 11 | Then /^I should be able to see myself in team$/ do |
| 16 | 12 | page.should have_content(@user.name) |
| 17 | 13 | page.should have_content(@user.email) |
| ... | ... | @@ -23,13 +19,9 @@ Then /^I should see "(.*?)" in team list$/ do |arg1| |
| 23 | 19 | page.should have_content(user.email) |
| 24 | 20 | end |
| 25 | 21 | |
| 26 | -Given /^I click link "(.*?)"$/ do |arg1| | |
| 27 | - click_link arg1 | |
| 28 | -end | |
| 29 | - | |
| 30 | 22 | Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2| |
| 31 | 23 | user = User.find_by_name(arg1) |
| 32 | - within "#new_team_member" do | |
| 24 | + within "#new_team_member" do | |
| 33 | 25 | select user.name, :from => "team_member_user_id" |
| 34 | 26 | select arg2, :from => "team_member_project_access" |
| 35 | 27 | end |
| ... | ... | @@ -44,7 +36,7 @@ end |
| 44 | 36 | |
| 45 | 37 | Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2| |
| 46 | 38 | user = User.find_by_name(arg1) |
| 47 | - within ".user_#{user.id}" do | |
| 39 | + within ".user_#{user.id}" do | |
| 48 | 40 | select arg2, :from => "team_member_project_access" |
| 49 | 41 | end |
| 50 | 42 | end | ... | ... |
features/step_definitions/project/project_wiki_steps.rb
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 | 1 | When /^I visit new project page$/ do |
| 8 | 2 | visit new_project_path |
| 9 | 3 | end |
| ... | ... | @@ -65,10 +59,6 @@ Given /^I visit project "(.*?)" network page$/ do |arg1| |
| 65 | 59 | visit graph_project_path(project) |
| 66 | 60 | end |
| 67 | 61 | |
| 68 | -Given /^show me page$/ do | |
| 69 | - save_and_open_page | |
| 70 | -end | |
| 71 | - | |
| 72 | 62 | Given /^page should have network graph$/ do |
| 73 | 63 | page.should have_content "Project Network Graph" |
| 74 | 64 | within ".graph" do | ... | ... |
| ... | ... | @@ -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
lib/gitlab/markdown.rb
| 1 | 1 | module Gitlab |
| 2 | - # Custom parser for Gitlab-flavored Markdown | |
| 2 | + # Custom parser for GitLab-flavored Markdown | |
| 3 | 3 | # |
| 4 | 4 | # It replaces references in the text with links to the appropriate items in |
| 5 | - # Gitlab. | |
| 5 | + # GitLab. | |
| 6 | 6 | # |
| 7 | 7 | # Supported reference formats are: |
| 8 | 8 | # * @foo for team members | ... | ... |
lib/hooks/post-receive
lib/tasks/gitlab/write_hook.rake
| 1 | 1 | namespace :gitlab do |
| 2 | 2 | namespace :gitolite do |
| 3 | - desc "GITLAB | Write GITLAB hook for gitolite" | |
| 3 | + desc "GITLAB | Write GitLab hook for gitolite" | |
| 4 | 4 | task :write_hooks => :environment do |
| 5 | 5 | gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") |
| 6 | 6 | gitlab_hooks_path = Rails.root.join("lib", "hooks") | ... | ... |
spec/factories_spec.rb
| 1 | 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 | 7 | end |
| 90 | 8 | end |
| 91 | 9 | end | ... | ... |
spec/mailers/notify_spec.rb
| ... | ... | @@ -24,7 +24,7 @@ describe Notify do |
| 24 | 24 | end |
| 25 | 25 | |
| 26 | 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 | 28 | end |
| 29 | 29 | |
| 30 | 30 | it 'contains the new user\'s login name' do | ... | ... |