Commit aec8c717 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq

Conflicts:
	Gemfile
	VERSION
	app/models/service.rb
parents 7c11a740 1646bfc2
Please view this file on the master branch, on stable branches it's out of date.
v 7.10.0 (unreleased)
- enable line wrapping per default and remove the checkbox to toggle it (Hannes Rosenögger)
- extend the commit calendar to show the actual commits made on a date (Hannes Rosenögger)
- Add a service to support external wikis (Hannes Rosenögger)
v 7.9.0 (unreleased)
- Add HipChat integration documentation (Stan Hu)
- Update documentation for object_kind field in Webhook push and tag push Webhooks (Stan Hu)
......
......@@ -45,7 +45,7 @@ gem "gitlab_git", '~> 7.1.0'
gem 'gitlab-grack', '~> 2.0.0.rc2', require: 'grack'
# LDAP Auth
gem 'gitlab_omniauth-ldap', '1.2.0', require: "omniauth-ldap"
gem 'gitlab_omniauth-ldap', '1.2.1', require: "omniauth-ldap"
gem 'net-ldap'
# Git Wiki
......
......@@ -200,7 +200,7 @@ GEM
gitlab-flowdock-git-hook (0.4.2.2)
gitlab-grit (>= 2.4.1)
multi_json
gitlab-grack (2.0.0.rc2)
gitlab-grack (2.0.0)
rack (~> 1.5.1)
gitlab-grit (2.7.2)
charlock_holmes (~> 0.6)
......@@ -219,7 +219,7 @@ GEM
gitlab-linguist (~> 3.0)
rugged (~> 0.21.2)
gitlab_meta (7.0)
gitlab_omniauth-ldap (1.2.0)
gitlab_omniauth-ldap (1.2.1)
net-ldap (~> 0.9)
omniauth (~> 1.0)
pyu-ruby-sasl (~> 0.0.3.1)
......@@ -337,7 +337,7 @@ GEM
multi_xml (0.5.5)
multipart-post (1.2.0)
mysql2 (0.3.16)
net-ldap (0.9.0)
net-ldap (0.11)
net-scp (1.1.2)
net-ssh (>= 2.6.5)
net-ssh (2.8.0)
......@@ -517,7 +517,7 @@ GEM
sexp_processor (~> 4.0)
ruby_parser (3.5.0)
sexp_processor (~> 4.1)
rubyntlm (0.4.0)
rubyntlm (0.5.0)
rubypants (0.2.0)
rugged (0.21.4)
rugments (1.0.0.beta3)
......@@ -712,7 +712,7 @@ DEPENDENCIES
gitlab_emoji (~> 0.1)
gitlab_git (~> 7.1.0)
gitlab_meta (= 7.0)
gitlab_omniauth-ldap (= 1.2.0)
gitlab_omniauth-ldap (= 1.2.1)
gollum-lib (~> 4.0.0)
gon (~> 5.0.0)
grape (~> 0.6.1)
......
7.9.0.pre-ee
7.10.0.pre-ee
$ ->
# Toggle line wrapping in diff.
#
# %div.diff-file
# %input.js-toggle-diff-line-wrap
# %td.line_content
#
$("body").on "click", ".js-toggle-diff-line-wrap", (e) ->
diffFile = $(@).closest(".diff-file")
if $(@).is(":checked")
diffFile.addClass("diff-wrap-lines")
else
diffFile.removeClass("diff-wrap-lines")
......@@ -4,7 +4,7 @@ class @calendar
day: "numeric"
year: "numeric"
constructor: (timestamps, starting_year, starting_month) ->
constructor: (timestamps, starting_year, starting_month, calendar_activities_path) ->
cal = new CalHeatMap()
cal.init
itemName: ["commit"]
......@@ -26,5 +26,16 @@ class @calendar
]
legendCellPadding: 3
onClick: (date, count) ->
return
return
formated_date = date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate()
$(".calendar_commit_activity").fadeOut 400
$.ajax
url: calendar_activities_path
data:
date: formated_date
cache: false
dataType: "html"
success: (data) ->
$(".user-calendar-activities").html data
$(".calendar_commit_activity").find(".js-toggle-content").hide()
$(".calendar_commit_activity").fadeIn 400
// Override Bootstrap variables here (defaults from bootstrap-sass v3.3.3):
// For all variables see https://github.com/twbs/bootstrap-sass/blob/master/templates/project/_bootstrap-variables.sass
//
// Variables
// --------------------------------------------------
......@@ -15,12 +15,6 @@
// $gray: lighten($gray-base, 33.5%) // #555
// $gray-light: lighten($gray-base, 46.7%) // #777
// $gray-lighter: lighten($gray-base, 93.5%) // #eee
$gray-base: #000;
$gray-darker: lighten($gray-base, 13.5%); // #222
$gray-dark: #7b8a8b; // #333
$gray: #95a5a6; // #555
$gray-light: #b4bcc2; // #999
$gray-lighter: #ecf0f1; // #eee
$brand-primary: $gl-primary;
$brand-success: $gl-success;
......@@ -31,68 +25,17 @@ $brand-danger: $gl-danger;
//== Scaffolding
//
//## Settings for some of the most global styles.
//** Background color for `<body>`.
// $body-bg: #fff
//** Global text color on `<body>`.
$text-color: $brand-primary;
//** Global textual link color.
$text-color: $gl-text-color;
$link-color: $gl-link-color;
//** Link hover color set via `darken()` function.
// $link-hover-color: darken($link-color, 15%)
//** Link hover decoration.
// $link-hover-decoration: underline
//== Typography
//
//## Font, line-height, and color for body text, headings, and more.
// $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif
// $font-family-serif: Georgia, "Times New Roman", Times, serif
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
// $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace
// $font-family-base: $font-family-sans-serif
$font-size-base: $gl-font-size;
// $font-size-large: ceil(($font-size-base * 1.25)) // ~18px
// $font-size-small: ceil(($font-size-base * 0.85)) // ~12px
// $font-size-h1: floor(($font-size-base * 2.6)) // ~36px
// $font-size-h2: floor(($font-size-base * 2.15)) // ~30px
// $font-size-h3: ceil(($font-size-base * 1.7)) // ~24px
// $font-size-h4: ceil(($font-size-base * 1.25)) // ~18px
// $font-size-h5: $font-size-base
// $font-size-h6: ceil(($font-size-base * 0.85)) // ~12px
//** Unit-less `line-height` for use in components like buttons.
// $line-height-base: 1.428571429 // 20/14
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
// $line-height-computed: floor(($font-size-base * $line-height-base)) // ~20px
//** By default, this inherits from the `<body>`.
// $headings-font-family: inherit
// $headings-font-weight: 500
// $headings-line-height: 1.1
// $headings-color: inherit
//== Iconography
//
//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
//** Load fonts from this directory.
// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
// $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/")
//** File name for all font files.
// $icon-font-name: "glyphicons-halflings-regular"
//** Element ID within SVG icon file.
// $icon-font-svg-id: "glyphicons_halflingsregular"
$font-family-sans-serif: $regular_font;
$font-family-monospace: $monospace_font;
$font-size-base: $gl-font-size;
//== Components
......@@ -102,348 +45,15 @@ $font-size-base: $gl-font-size;
$padding-base-vertical: 6px;
$padding-base-horizontal: 14px;
// $padding-large-vertical: 10px
// $padding-large-horizontal: 16px
// $padding-small-vertical: 5px
// $padding-small-horizontal: 10px
// $padding-xs-vertical: 1px
// $padding-xs-horizontal: 5px
// $line-height-large: 1.3333333 // extra decimals for Win 8.1 Chrome
// $line-height-small: 1.5
// $border-radius-base: 4px
// $border-radius-large: 6px
// $border-radius-small: 3px
//** Global color for active items (e.g., navs or dropdowns).
// $component-active-color: #fff
//** Global background color for active items (e.g., navs or dropdowns).
// $component-active-bg: $brand-primary
//** Width of the `border` for generating carets that indicator dropdowns.
// $caret-width-base: 4px
//** Carets increase slightly in size for larger components.
// $caret-width-large: 5px
//== Tables
//
//## Customizes the `.table` component with basic values, each used across all table variations.
//** Padding for `<th>`s and `<td>`s.
// $table-cell-padding: 8px
//** Padding for cells in `.table-condensed`.
// $table-condensed-cell-padding: 5px
//** Default background color used for all tables.
// $table-bg: transparent
//** Background color used for `.table-striped`.
// $table-bg-accent: #f9f9f9
//** Background color used for `.table-hover`.
// $table-bg-hover: #f5f5f5
// $table-bg-active: $table-bg-hover
//** Border color for table and cell borders.
// $table-border-color: #ddd
//== Buttons
//
//## For each of Bootstrap's buttons, define text, background and border color.
// $btn-font-weight: normal
// $btn-default-color: #333
// $btn-default-bg: #fff
// $btn-default-border: #ccc
// $btn-primary-color: #fff
// $btn-primary-bg: $brand-primary
// $btn-primary-border: darken($btn-primary-bg, 5%)
// $btn-success-color: #fff
// $btn-success-bg: $brand-success
// $btn-success-border: darken($btn-success-bg, 5%)
// $btn-info-color: #fff
// $btn-info-bg: $brand-info
// $btn-info-border: darken($btn-info-bg, 5%)
// $btn-warning-color: #fff
// $btn-warning-bg: $brand-warning
// $btn-warning-border: darken($btn-warning-bg, 5%)
// $btn-danger-color: #fff
// $btn-danger-bg: $brand-danger
// $btn-danger-border: darken($btn-danger-bg, 5%)
// $btn-link-disabled-color: $gray-light
//== Forms
//
//##
//** `<input>` background color
// $input-bg: #fff
//** `<input disabled>` background color
// $input-bg-disabled: $gray-lighter
//** Text color for `<input>`s
$input-color: $text-color;
//** `<input>` border color
$input-border: #dce4ec;
// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
//** Default `.form-control` border radius
// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
// $input-border-radius: $border-radius-base
//** Large `.form-control` border radius
// $input-border-radius-large: $border-radius-large
//** Small `.form-control` border radius
// $input-border-radius-small: $border-radius-small
//** Border color for inputs on focus
$input-border: #DDD;
$input-border-focus: $brand-info;
//** Placeholder text color
// $input-color-placeholder: #999
//** Default `.form-control` height
// $input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2)
//** Large `.form-control` height
// $input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2)
//** Small `.form-control` height
// $input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2)
$legend-color: $text-color;
// $legend-border-color: #e5e5e5
//** Background color for textual input addons
// $input-group-addon-bg: $gray-lighter
//** Border color for textual input addons
// $input-group-addon-border-color: $input-border
//** Disabled cursor for form controls and buttons.
// $cursor-disabled: not-allowed
//== Dropdowns
//
//## Dropdown menu container and contents.
//** Background for the dropdown menu.
// $dropdown-bg: #fff
//** Dropdown menu `border-color`.
// $dropdown-border: rgba(0,0,0,.15)
//** Dropdown menu `border-color` **for IE8**.
// $dropdown-fallback-border: #ccc
//** Divider color for between dropdown items.
// $dropdown-divider-bg: #e5e5e5
//** Dropdown link text color.
// $dropdown-link-color: $gray-dark
//** Hover color for dropdown links.
// $dropdown-link-hover-color: darken($gray-dark, 5%)
//** Hover background for dropdown links.
// $dropdown-link-hover-bg: #f5f5f5
//** Active dropdown menu item text color.
// $dropdown-link-active-color: $component-active-color
//** Active dropdown menu item background color.
// $dropdown-link-active-bg: $component-active-bg
//** Disabled dropdown menu item background color.
// $dropdown-link-disabled-color: $gray-light
//** Text color for headers within dropdown menus.
// $dropdown-header-color: $gray-light
//** Deprecated `$dropdown-caret-color` as of v3.1.0
// $dropdown-caret-color: #000
//-- Z-index master list
//
// Warning: Avoid customizing these values. They're used for a bird's eye view
// of components dependent on the z-axis and are designed to all work together.
//
// Note: These variables are not generated into the Customizer.
// $zindex-navbar: 1000
// $zindex-dropdown: 1000
// $zindex-popover: 1060
// $zindex-tooltip: 1070
// $zindex-navbar-fixed: 1030
// $zindex-modal: 1040
//== Media queries breakpoints
//
//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
// Extra small screen / phone
//** Deprecated `$screen-xs` as of v3.0.1
// $screen-xs: 480px
//** Deprecated `$screen-xs-min` as of v3.2.0
// $screen-xs-min: $screen-xs
//** Deprecated `$screen-phone` as of v3.0.1
// $screen-phone: $screen-xs-min
// Small screen / tablet
//** Deprecated `$screen-sm` as of v3.0.1
// $screen-sm: 768px
// $screen-sm-min: $screen-sm
//** Deprecated `$screen-tablet` as of v3.0.1
// $screen-tablet: $screen-sm-min
// Medium screen / desktop
//** Deprecated `$screen-md` as of v3.0.1
// $screen-md: 992px
// $screen-md-min: $screen-md
//** Deprecated `$screen-desktop` as of v3.0.1
// $screen-desktop: $screen-md-min
// Large screen / wide desktop
//** Deprecated `$screen-lg` as of v3.0.1
// $screen-lg: 1200px
// $screen-lg-min: $screen-lg
//** Deprecated `$screen-lg-desktop` as of v3.0.1
// $screen-lg-desktop: $screen-lg-min
// So media queries don't overlap when required, provide a maximum
// $screen-xs-max: ($screen-sm-min - 1)
// $screen-sm-max: ($screen-md-min - 1)
// $screen-md-max: ($screen-lg-min - 1)
//== Grid system
//
//## Define your custom responsive grid.
//** Number of columns in the grid.
// $grid-columns: 12
//** Padding between columns. Gets divided in half for the left and right.
// $grid-gutter-width: 30px
// Navbar collapse
//** Point at which the navbar becomes uncollapsed.
// $grid-float-breakpoint: $screen-sm-min
//** Point at which the navbar begins collapsing.
// $grid-float-breakpoint-max: ($grid-float-breakpoint - 1)
//== Container sizes
//
//## Define the maximum width of `.container` for different screen sizes.
// Small screen / tablet
// $container-tablet: (720px + $grid-gutter-width)
//** For `$screen-sm-min` and up.
// $container-sm: $container-tablet
// Medium screen / desktop
// $container-desktop: (940px + $grid-gutter-width)
//** For `$screen-md-min` and up.
// $container-md: $container-desktop
// Large screen / wide desktop
// $container-large-desktop: (1140px + $grid-gutter-width)
//** For `$screen-lg-min` and up.
// $container-lg: $container-large-desktop
//== Navbar
//
//##
// Basics of a navbar
// $navbar-height: 50px
// $navbar-margin-bottom: $line-height-computed
// $navbar-border-radius: $border-radius-base
// $navbar-padding-horizontal: floor(($grid-gutter-width / 2))
// $navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2)
// $navbar-collapse-max-height: 340px
// $navbar-default-color: #777
// $navbar-default-bg: #f8f8f8
// $navbar-default-border: darken($navbar-default-bg, 6.5%)
// Navbar links
// $navbar-default-link-color: #777
// $navbar-default-link-hover-color: #333
// $navbar-default-link-hover-bg: transparent
// $navbar-default-link-active-color: #555
// $navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%)
// $navbar-default-link-disabled-color: #ccc
// $navbar-default-link-disabled-bg: transparent
// Navbar brand label
// $navbar-default-brand-color: $navbar-default-link-color
// $navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%)
// $navbar-default-brand-hover-bg: transparent
// Navbar toggle
// $navbar-default-toggle-hover-bg: #ddd
// $navbar-default-toggle-icon-bar-bg: #888
// $navbar-default-toggle-border-color: #ddd
// Inverted navbar
// Reset inverted navbar basics
// $navbar-inverse-color: lighten($gray-light, 15%)
// $navbar-inverse-bg: #222
// $navbar-inverse-border: darken($navbar-inverse-bg, 10%)
// Inverted navbar links
// $navbar-inverse-link-color: lighten($gray-light, 15%)
// $navbar-inverse-link-hover-color: #fff
// $navbar-inverse-link-hover-bg: transparent
// $navbar-inverse-link-active-color: $navbar-inverse-link-hover-color
// $navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%)
// $navbar-inverse-link-disabled-color: #444
// $navbar-inverse-link-disabled-bg: transparent
// Inverted navbar brand label
// $navbar-inverse-brand-color: $navbar-inverse-link-color
// $navbar-inverse-brand-hover-color: #fff
// $navbar-inverse-brand-hover-bg: transparent
// Inverted navbar toggle
// $navbar-inverse-toggle-hover-bg: #333
// $navbar-inverse-toggle-icon-bar-bg: #fff
// $navbar-inverse-toggle-border-color: #333
//== Navs
//
//##
//=== Shared nav styles
// $nav-link-padding: 10px 15px
// $nav-link-hover-bg: $gray-lighter
// $nav-disabled-link-color: $gray-light
// $nav-disabled-link-hover-color: $gray-light
//== Tabs
// $nav-tabs-border-color: #ddd
// $nav-tabs-link-hover-border-color: $gray-lighter
// $nav-tabs-active-link-hover-bg: $body-bg
// $nav-tabs-active-link-hover-color: $gray
// $nav-tabs-active-link-hover-border-color: #ddd
// $nav-tabs-justified-link-border-color: #ddd
// $nav-tabs-justified-active-link-border-color: $body-bg
//== Pills
// $nav-pills-border-radius: $border-radius-base
// $nav-pills-active-link-hover-bg: $component-active-bg
// $nav-pills-active-link-hover-color: $component-active-color
//== Pagination
......@@ -467,38 +77,10 @@ $pagination-disabled-bg: lighten($brand-success, 15%);
$pagination-disabled-border: transparent;
//== Pager
//
//##
// $pager-bg: $pagination-bg
// $pager-border: $pagination-border
// $pager-border-radius: 15px
// $pager-hover-bg: $pagination-hover-bg
// $pager-active-bg: $pagination-active-bg
// $pager-active-color: $pagination-active-color
// $pager-disabled-color: $pagination-disabled-color
//== Jumbotron
//
//##
// $jumbotron-padding: 30px
// $jumbotron-color: inherit
// $jumbotron-bg: $gray-lighter
// $jumbotron-heading-color: inherit
// $jumbotron-font-size: ceil(($font-size-base * 1.5))
//== Form states and alerts
//
//## Define colors for form feedback states and, by default, alerts.
$state-success-text: #fff;
$state-success-bg: $brand-success;
$state-success-border: $brand-success;
......@@ -516,316 +98,22 @@ $state-danger-bg: $brand-danger;
$state-danger-border: $brand-danger;
//== Tooltips
//
//##
//** Tooltip max width
// $tooltip-max-width: 200px
//** Tooltip text color
// $tooltip-color: #fff
//** Tooltip background color
// $tooltip-bg: #000
// $tooltip-opacity: .9
//** Tooltip arrow width
// $tooltip-arrow-width: 5px
//** Tooltip arrow color
// $tooltip-arrow-color: $tooltip-bg
//== Popovers
//
//##
//** Popover body background color
// $popover-bg: #fff
//** Popover maximum width
// $popover-max-width: 276px
//** Popover border color
// $popover-border-color: rgba(0,0,0,.2)
//** Popover fallback border color
// $popover-fallback-border-color: #ccc
//** Popover title background color
// $popover-title-bg: darken($popover-bg, 3%)
//** Popover arrow width
// $popover-arrow-width: 10px
//** Popover arrow color
// $popover-arrow-color: $popover-bg
//** Popover outer arrow width
// $popover-arrow-outer-width: ($popover-arrow-width + 1)
//** Popover outer arrow color
// $popover-arrow-outer-color: fade_in($popover-border-color, 0.05)
//** Popover outer arrow fallback color
// $popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%)
//== Labels
//
//##
//** Default label background color
// $label-default-bg: $gray-light
//** Primary label background color
// $label-primary-bg: $brand-primary
//** Success label background color
// $label-success-bg: $brand-success
//** Info label background color
// $label-info-bg: $brand-info
//** Warning label background color
// $label-warning-bg: $brand-warning
//** Danger label background color
// $label-danger-bg: $brand-danger
//** Default label text color
// $label-color: #fff
//** Default text color of a linked label
// $label-link-hover-color: #fff
//== Modals
//
//##
//** Padding applied to the modal body
// $modal-inner-padding: 15px
//** Padding applied to the modal title
// $modal-title-padding: 15px
//** Modal title line-height
// $modal-title-line-height: $line-height-base
//** Background color of modal content area
// $modal-content-bg: #fff
//** Modal content border color
// $modal-content-border-color: rgba(0,0,0,.2)
//** Modal content border color **for IE8**
// $modal-content-fallback-border-color: #999
//** Modal backdrop background color
// $modal-backdrop-bg: #000
//** Modal backdrop opacity
// $modal-backdrop-opacity: .5
//** Modal header border color
// $modal-header-border-color: #e5e5e5
//** Modal footer border color
// $modal-footer-border-color: $modal-header-border-color
// $modal-lg: 900px
// $modal-md: 600px
// $modal-sm: 300px
//== Alerts
//
//## Define alert colors, border radius, and padding.
// $alert-padding: 15px
$alert-border-radius: 0;
// $alert-link-font-weight: bold
// $alert-success-bg: $state-success-bg
// $alert-success-text: $state-success-text
// $alert-success-border: $state-success-border
// $alert-info-bg: $state-info-bg
// $alert-info-text: $state-info-text
// $alert-info-border: $state-info-border
// $alert-warning-bg: $state-warning-bg
// $alert-warning-text: $state-warning-text
// $alert-warning-border: $state-warning-border
// $alert-danger-bg: $state-danger-bg
// $alert-danger-text: $state-danger-text
// $alert-danger-border: $state-danger-border
//== Progress bars
//
//##
//** Background color of the whole progress component
// $progress-bg: #f5f5f5
//** Progress bar text color
// $progress-bar-color: #fff
//** Variable for setting rounded corners on progress bar.
// $progress-border-radius: $border-radius-base
//** Default progress bar color
// $progress-bar-bg: $brand-primary
//** Success progress bar color
// $progress-bar-success-bg: $brand-success
//** Warning progress bar color
// $progress-bar-warning-bg: $brand-warning
//** Danger progress bar color
// $progress-bar-danger-bg: $brand-danger
//** Info progress bar color
// $progress-bar-info-bg: $brand-info
//== List group
//
//##
//** Background color on `.list-group-item`
// $list-group-bg: #fff
//** `.list-group-item` border color
// $list-group-border: #ddd
//** List group border radius
// $list-group-border-radius: $border-radius-base
//** Background color of single list items on hover
// $list-group-hover-bg: #f5f5f5
//** Text color of active list items
// $list-group-active-color: $component-active-color
//** Background color of active list items
// $list-group-active-bg: $component-active-bg
//** Border color of active list elements
// $list-group-active-border: $list-group-active-bg
//** Text color for content within active list items
// $list-group-active-text-color: lighten($list-group-active-bg, 40%)
//** Text color of disabled list items
// $list-group-disabled-color: $gray-light
//** Background color of disabled list items
// $list-group-disabled-bg: $gray-lighter
//** Text color for content within disabled list items
// $list-group-disabled-text-color: $list-group-disabled-color
// $list-group-link-color: #555
// $list-group-link-hover-color: $list-group-link-color
// $list-group-link-heading-color: #333
//== Panels
//
//##
// $panel-bg: #fff
// $panel-body-padding: 15px
// $panel-heading-padding: 10px 15px
// $panel-footer-padding: $panel-heading-padding
$panel-border-radius: 0;
//** Border color for elements within panels
// $panel-inner-border: #ddd
// $panel-footer-bg: #f5f5f5
$panel-default-text: $text-color;
$panel-default-border: $border-color;
$panel-default-heading-bg: $background-color;
// $panel-primary-text: #fff
// $panel-primary-border: $brand-primary
// $panel-primary-heading-bg: $brand-primary
// $panel-success-text: $state-success-text
// $panel-success-border: $state-success-border
// $panel-success-heading-bg: $state-success-bg
// $panel-info-text: $state-info-text
// $panel-info-border: $state-info-border
// $panel-info-heading-bg: $state-info-bg
// $panel-warning-text: $state-warning-text
// $panel-warning-border: $state-warning-border
// $panel-warning-heading-bg: $state-warning-bg
// $panel-danger-text: $state-danger-text
// $panel-danger-border: $state-danger-border
// $panel-danger-heading-bg: $state-danger-bg
//== Thumbnails
//
//##
//** Padding around the thumbnail image
// $thumbnail-padding: 4px
//** Thumbnail background color
// $thumbnail-bg: $body-bg
//** Thumbnail border color
// $thumbnail-border: #ddd
//** Thumbnail border radius
// $thumbnail-border-radius: $border-radius-base
//** Custom text color for thumbnail captions
// $thumbnail-caption-color: $text-color
//** Padding around the thumbnail caption
// $thumbnail-caption-padding: 9px
//== Wells
//
//##
$well-bg: $gray-lighter;
$well-border: transparent;
//== Badges
//
//##
// $badge-color: #fff
//** Linked badge text color on hover
// $badge-link-hover-color: #fff
// $badge-bg: $gray-light
//** Badge text color in active nav link
// $badge-active-color: $link-color
//** Badge background color in active nav link
// $badge-active-bg: #fff
// $badge-font-weight: bold
// $badge-line-height: 1
// $badge-border-radius: 10px
//== Breadcrumbs
//
//##
// $breadcrumb-padding-vertical: 8px
// $breadcrumb-padding-horizontal: 15px
//** Breadcrumb background color
// $breadcrumb-bg: #f5f5f5
//** Breadcrumb text color
// $breadcrumb-color: #ccc
//** Text color of current page in the breadcrumb
// $breadcrumb-active-color: $gray-light
//** Textual separator for between breadcrumb elements
// $breadcrumb-separator: "/"
//== Carousel
//
//##
// $carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6)
// $carousel-control-color: #fff
// $carousel-control-width: 15%
// $carousel-control-opacity: .5
// $carousel-control-font-size: 20px
// $carousel-indicator-active-bg: #fff
// $carousel-indicator-border-color: #fff
// $carousel-caption-color: #fff
//== Close
//
//##
// $close-font-weight: bold
// $close-color: #000
// $close-text-shadow: 0 1px 0 #fff
//== Code
......@@ -837,34 +125,3 @@ $code-bg: #f9f2f4;
$kbd-color: #fff;
$kbd-bg: #333;
$pre-bg: $gray-lighter;
$pre-color: $text-color;
$pre-border-color: #ccc;
// $pre-scrollable-max-height: 340px
//== Type
//
//##
//** Horizontal offset for forms and lists.
// $component-offset-horizontal: 180px
//** Text muted color
// $text-muted: $gray-light
//** Abbreviations and acronyms border color
// $abbr-border-color: $gray-light
//** Headings small color
$headings-small-color: $gray-dark;
//** Blockquote small color
// $blockquote-small-color: $gray-light
//** Blockquote font size
// $blockquote-font-size: ($font-size-base * 1.25)
//** Blockquote border color
// $blockquote-border-color: $gray-lighter
//** Page header border color
// $page-header-border-color: $gray-lighter
//** Width of horizontal description list titles
// $dl-horizontal-offset: $component-offset-horizontal
//** Horizontal line color.
// $hr-border: $gray-lighter
$style_color: #474D57;
$hover: #FFF3EB;
$gl-text-color: #222222;
$gl-link-color: #446e9b;
$nprogress-color: #c0392b;
$gl-font-size: 14px;
......@@ -8,23 +9,18 @@ $sidebar_width: 230px;
$avatar_radius: 50%;
$code_font_size: 13px;
$code_line_height: 1.5;
$border-color: #dce4ec;
$background-color: #ECF0F1;
$border-color: #E5E5E5;
$background-color: #f5f5f5;
/*
* State colors:
*/
$gl-success: #019875;
$gl-danger: #d9534f;
$gl-primary: #446e9b;
$gl-success: #019875;
$gl-info: #029ACF;
$gl-warning: #EB9532;
$gl-danger: #d9534f;
$gl-primary: #2C3E50;
$gl-success: #18BC9C;
$gl-info: #3498DB;
$gl-warning: #F39C12;
$gl-danger: #E74C3C;
/*
* Commit Diff Colors
*/
......
.calendar_onclick_placeholder {
padding: 0 0 2px 0;
}
.calendar_commit_activity {
padding: 5px 0 0;
}
.calendar_onclick_second {
font-size: 14px;
display: block;
}
.calendar_onclick_hr {
padding: 0;
margin: 10px 0;
}
.user-calendar-activities {
.calendar_commit_activity {
padding: 5px 0 0;
}
.calendar_onclick_hr {
padding: 0;
margin: 10px 0;
}
.calendar_commit_date {
color: #999;
}
.calendar_activity_summary {
font-size: 14px;
}
.calendar_commit_date {
color: #999;
}
.str-truncated {
max-width: 70%;
}
.calendar_activity_summary {
font-size: 14px;
.text-expander {
background: #eee;
color: #555;
padding: 0 5px;
cursor: pointer;
margin-left: 4px;
&:hover {
background-color: #ddd;
}
}
.commit-row-message {
color: #333;
&:hover {
color: #444;
text-decoration: underline;
}
}
}
/**
* This overwrites the default values of the cal-heatmap gem
*/
......
......@@ -94,7 +94,7 @@
}
.author,
.blame_commit {
background: #f5f5f5;
background: $background-color;
vertical-align: top;
}
.lines {
......
......@@ -29,8 +29,8 @@ fieldset legend {
padding: 17px 20px 18px;
margin-top: 18px;
margin-bottom: 18px;
background-color: #ecf0f1;
border-top: 1px solid #e5e5e5;
background-color: $background-color;
border-top: 1px solid $border-color;
}
@media (min-width: $screen-sm-min) {
......
......@@ -35,7 +35,7 @@
color: #8a6d3b;
}
&.smoke { background-color: #f5f5f5; }
&.smoke { background-color: $background-color; }
&:hover {
background: $hover;
......@@ -46,7 +46,7 @@
border-bottom: none;
&.bottom {
background: #f5f5f5;
background: $background-color;
}
}
......@@ -61,7 +61,7 @@
p {
padding-top: 1px;
margin: 0;
color: #222;
color: $gray-dark;
img {
position: relative;
top: 3px;
......@@ -74,9 +74,10 @@
}
.row_title {
color: #444;
color: $gray-dark;
&:hover {
color: #444;
color: $text-color;
text-decoration: underline;
}
}
......
.page-with-sidebar {
background: #F5F5F5;
background: $background-color;
.sidebar-wrapper {
position: fixed;
top: 0;
left: 0;
height: 100%;
border-right: 1px solid #EAEAEA;
border-right: 1px solid $border-color;
}
}
.sidebar-wrapper {
z-index: 99;
background: #F5F5F5;
background: $background-color;
}
.content-wrapper {
......@@ -39,7 +39,7 @@
.nav-sidebar li {
&.active a {
color: #333;
color: $text-color;
background: #FFF !important;
font-weight: bold;
border: 1px solid #EEE;
......@@ -52,32 +52,31 @@
}
i {
color: #444;
color: $text-color;
}
}
}
.nav-sidebar li {
&.separate-item {
border-top: 1px solid #ddd;
border-top: 1px solid $border-color;
padding-top: 10px;
margin-top: 10px;
}
a {
color: #555;
color: $gray;
display: block;
text-decoration: none;
padding: 8px 15px;
font-size: 13px;
line-height: 20px;
text-shadow: 0 1px 2px #FFF;
padding-left: 20px;
&:hover {
text-decoration: none;
color: #333;
background: #EEE;
color: $text-color;
background: $border-color;
}
&:active, &:focus {
......@@ -86,7 +85,7 @@
i {
width: 20px;
color: #888;
color: $gray-light;
margin-right: 23px;
}
}
......@@ -156,18 +155,17 @@
position: fixed;
top: 46px;
padding: 5px 13px 5px 13px;
left: 197px;
left: 198px;
font-size: 13px;
background: #EEE;
background: transparent;
color: black;
border-left: 1px solid rgba(0,0,0,0.035);
border-right: 1px solid rgba(0,0,0,0.035);
border-left: 1px solid $border-color;
border-bottom: 1px solid $border-color;
}
.collapse-nav a:hover {
text-decoration: none;
color: #333;
background: #eaeaea;
background: #f2f6f7;
}
@media (max-width: $screen-md-max) {
......
......@@ -54,7 +54,7 @@
.timeline-content {
position: relative;
background: #f5f5f6;
background: $background-color;
padding: 10px 15px;
margin-left: 60px;
......@@ -70,7 +70,7 @@
height: 0;
border-style: solid;
border-width: 9px 9px 9px 0;
border-color: transparent #f5f5f6 transparent transparent;
border-color: transparent $background-color transparent transparent;
left: 0;
top: 10px;
margin-left: -9px;
......
......@@ -4,7 +4,6 @@
*/
.page-title {
margin-top: 0px;
color: #333;
line-height: 1.5;
font-weight: normal;
margin-bottom: 5px;
......@@ -16,7 +15,7 @@ pre {
&.dark {
background: #333;
color: #f5f5f5;
color: $background-color;
}
}
......
......@@ -89,7 +89,7 @@
margin: 0px;
padding: 0px;
border: none;
background: #F5F5F5;
background: $background-color;
color: rgba(0,0,0,0.3);
padding: 0px 5px;
border-right: 1px solid $border-color;
......
......@@ -37,7 +37,7 @@
}
.editor-ref {
background: #f5f5f5;
background: $background-color;
padding: 11px 15px;
border-right: 1px solid #CCC;
display: inline-block;
......
......@@ -154,10 +154,12 @@
overflow: auto;
.event-last-push-text {
@include str-truncated(100%);
padding: 5px 0;
font-size: 13px;
float:left;
margin-right: -150px;
padding-right: 150px;
line-height: 24px;
line-height: 20px;
}
}
......@@ -188,7 +190,7 @@
li a {
font-size: 13px;
padding: 5px 10px;
background: rgba(0,0,0,0.045);
background: $background-color;
margin-left: 4px;
}
}
......@@ -129,7 +129,7 @@
font-size: 15px;
border-bottom: 1px solid #BBB;
color: #777;
background-color: #F5F5F5;
background-color: $background-color;
&.ci-success {
color: $gl-success;
......
......@@ -27,7 +27,7 @@
}
&.selected {
td {
background: #f5f5f5;
background: $background-color;
border-top: 1px solid #EEE;
border-bottom: 1px solid #EEE;
}
......
......@@ -53,7 +53,7 @@ class Projects::ServicesController < Projects::ApplicationController
:description, :issues_url, :new_issue_url, :restrict_to_branch, :channel,
:colorize_messages, :channels,
:push_events, :issues_events, :merge_requests_events, :tag_push_events,
:note_events, :send_from_committer_email, :disable_diffs
:note_events, :send_from_committer_email, :disable_diffs, :external_wiki_url
)
end
end
......@@ -32,6 +32,7 @@ class UsersController < ApplicationController
def calendar
projects = Project.where(id: authorized_projects_ids & @user.contributed_projects_ids)
calendar = Gitlab::CommitsCalendar.new(projects, @user)
@timestamps = calendar.timestamps
@starting_year = calendar.starting_year
......@@ -40,6 +41,24 @@ class UsersController < ApplicationController
render 'calendar', layout: false
end
def calendar_activities
projects = Project.where(id: authorized_projects_ids & @user.contributed_projects_ids)
date = Date.parse(params[:date]) rescue nil
if date
@calendar_activities = Gitlab::CommitsCalendar.get_commits_for_date(projects, @user, date)
else
@calendar_activities = {}
end
# get the total number of unique commits
@commit_count = @calendar_activities.values.flatten.map(&:id).uniq.count
@calendar_date = date
render 'calendar_activities', layout: false
end
def determine_layout
if current_user
'navless'
......
module ExternalWikiHelper
def get_project_wiki_path(project)
external_wiki_service = project.services.
select { |service| service.to_param == 'external_wiki' }.first
if external_wiki_service.present? && external_wiki_service.active?
external_wiki_service.properties['external_wiki_url']
else
namespace_project_wiki_path(project.namespace, project, :home)
end
end
end
......@@ -91,6 +91,7 @@ class Project < ActiveRecord::Base
has_one :redmine_service, dependent: :destroy
has_one :custom_issue_tracker_service, dependent: :destroy
has_one :gitlab_issue_tracker_service, dependent: :destroy
has_one :external_wiki_service, dependent: :destroy
has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id"
......
......@@ -17,6 +17,15 @@ class ProjectContributions
end
end
def user_commits_on_date(date)
repository = @project.repository
if !repository.exists? || repository.empty?
return []
end
commits = repository.commits_by_user_on_date_log(@user, date)
end
def cache_key
"#{Date.today.to_s}-commits-log-#{project.id}-#{user.email}"
end
......
# == Schema Information
#
# Table name: services
#
# id :integer not null, primary key
# type :string(255)
# title :string(255)
# project_id :integer not null
# created_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# properties :text
#
class ExternalWikiService < Service
include HTTParty
prop_accessor :external_wiki_url
validates :external_wiki_url,
presence: true,
format: { with: URI::regexp },
if: :activated?
def title
'External Wiki'
end
def description
'Replaces the link to the internal wiki with a link to an external wiki.'
end
def to_param
'external_wiki'
end
def fields
[
{ type: 'text', name: 'external_wiki_url', placeholder: 'The URL of the external Wiki' },
]
end
def execute(_data)
@response = HTTParty.get(properties['external_wiki_url'], verify: true) rescue nil
if @response !=200
nil
end
end
end
......@@ -157,6 +157,20 @@ class Repository
end
end
def commits_by_user_on_date_log(user, date)
# format the date string for git
start_date = date.strftime("%Y-%m-%d 00:00:00")
end_date = date.strftime("%Y-%m-%d 23:59:59")
author_emails = '(' + user.all_emails.map{ |e| Regexp.escape(e) }.join('|') + ')'
args = %W(git log -E --author=#{author_emails} --after=#{start_date.to_s} --until=#{end_date.to_s} --branches --pretty=format:%h)
commits = Gitlab::Popen.popen(args, path_to_repo).first.split("\n")
commits.map! do |commit_id|
commit(commit_id)
end
end
def commits_per_day_for_user(user)
timestamps_by_user_log(user).
group_by { |commit_date| commit_date }.
......
......@@ -112,7 +112,7 @@ class Service < ActiveRecord::Base
def async_execute(data)
return unless supported_events.include?(data[:object_kind])
Sidekiq::Client.enqueue(ProjectServiceWorker, id, data)
end
......@@ -141,6 +141,7 @@ class Service < ActiveRecord::Base
redmine
custom_issue_tracker
irker
external_wiki
)
end
......
......@@ -12,13 +12,13 @@
.checkbox
= f.label :signup_enabled do
= f.check_box :signup_enabled
Signin enabled
Signup enabled
.form-group
.col-sm-offset-2.col-sm-10
.checkbox
= f.label :signin_enabled do
= f.check_box :signin_enabled
Signup enabled
Signin enabled
.form-group
.col-sm-offset-2.col-sm-10
.checkbox
......
......@@ -75,7 +75,7 @@
- if project_nav_tab? :wiki
= nav_link(controller: :wikis) do
= link_to namespace_project_wiki_path(@project.namespace, @project, :home), title: 'Wiki', class: 'shortcuts-wiki' do
= link_to get_project_wiki_path(@project), title: 'Wiki', class: 'shortcuts-wiki' do
%i.fa.fa-book
%span
Wiki
......
......@@ -6,10 +6,10 @@
= @project.name_with_namespace
%p
To update the remote url in your local repository run (for ssh):
%p{ style: "background:#f5f5f5; padding:10px; border:1px solid #ddd" }
%p{ style: "background: #f5f5f5; padding:10px; border:1px solid #ddd" }
git remote set-url origin #{@project.ssh_url_to_repo}
%p
or for http(s):
%p{ style: "background:#f5f5f5; padding:10px; border:1px solid #ddd" }
%p{ style: "background: #f5f5f5; padding:10px; border:1px solid #ddd" }
git remote set-url origin #{@project.http_url_to_repo}
%br
......@@ -22,11 +22,6 @@
.diff-btn-group
- if blob.text?
- unless params[:view] == 'parallel'
%label
= check_box_tag nil, 1, false, class: 'js-toggle-diff-line-wrap'
Wrap text
&nbsp;
= link_to '#', class: 'js-toggle-diff-comments btn btn-sm' do
%i.fa.fa-chevron-down
Show/Hide comments
......@@ -39,7 +34,7 @@
= view_file_btn(@commit.id, diff_file, project)
.diff-content
.diff-content.diff-wrap-lines
-# Skipp all non non-supported blobs
- return unless blob.respond_to?('text?')
- if blob.text?
......
......@@ -27,19 +27,20 @@
= hidden_field_tag :issue_context
= f.submit class: 'btn'
%div.prepend-top-20.clearfix
.issuable-context-title
%label
Subscription:
%button.btn.btn-block.subscribe-button
%i.fa.fa-eye
%span= @issue.subscribed?(current_user) ? "Unsubscribe" : "Subscribe"
- subscribtion_status = @issue.subscribed?(current_user) ? "subscribed" : "unsubscribed"
.subscription-status{"data-status" => subscribtion_status}
.description-block.unsubscribed{class: ( "hidden" if @issue.subscribed?(current_user) )}
You're not receiving notifications from this thread.
.description-block.subscribed{class: ( "hidden" unless @issue.subscribed?(current_user) )}
You're receiving notifications because you're subscribed to this thread.
- if current_user
%div.prepend-top-20.clearfix
.issuable-context-title
%label
Subscription:
%button.btn.btn-block.subscribe-button
%i.fa.fa-eye
%span= @issue.subscribed?(current_user) ? "Unsubscribe" : "Subscribe"
- subscribtion_status = @issue.subscribed?(current_user) ? "subscribed" : "unsubscribed"
.subscription-status{"data-status" => subscribtion_status}
.description-block.unsubscribed{class: ( "hidden" if @issue.subscribed?(current_user) )}
You're not receiving notifications from this thread.
.description-block.subscribed{class: ( "hidden" unless @issue.subscribed?(current_user) )}
You're receiving notifications because you're subscribed to this thread.
:coffeescript
$ ->
......
......@@ -29,19 +29,20 @@
= hidden_field_tag :merge_request_context
= f.submit class: 'btn'
%div.prepend-top-20.clearfix
.issuable-context-title
%label
Subscription:
%button.btn.btn-block.subscribe-button
%i.fa.fa-eye
%span= @merge_request.subscribed?(current_user) ? "Unsubscribe" : "Subscribe"
- subscribtion_status = @merge_request.subscribed?(current_user) ? "subscribed" : "unsubscribed"
.subscription-status{"data-status" => subscribtion_status}
.description-block.unsubscribed{class: ( "hidden" if @merge_request.subscribed?(current_user) )}
You're not receiving notifications from this thread.
.description-block.subscribed{class: ( "hidden" unless @merge_request.subscribed?(current_user) )}
You're receiving notifications because you're subscribed to this thread.
- if current_user
%div.prepend-top-20.clearfix
.issuable-context-title
%label
Subscription:
%button.btn.btn-block.subscribe-button
%i.fa.fa-eye
%span= @merge_request.subscribed?(current_user) ? "Unsubscribe" : "Subscribe"
- subscribtion_status = @merge_request.subscribed?(current_user) ? "subscribed" : "unsubscribed"
.subscription-status{"data-status" => subscribtion_status}
.description-block.unsubscribed{class: ( "hidden" if @merge_request.subscribed?(current_user) )}
You're not receiving notifications from this thread.
.description-block.subscribed{class: ( "hidden" unless @merge_request.subscribed?(current_user) )}
You're receiving notifications because you're subscribed to this thread.
:coffeescript
$ ->
......
......@@ -4,5 +4,6 @@
new calendar(
#{@timestamps.to_json},
#{@starting_year},
#{@starting_month}
#{@starting_month},
'#{user_calendar_activities_path}'
);
.calendar_commit_activity
%hr
%h4
Commit Activity
%strong
- if @commit_count == 0
no
- else
= @commit_count
%span.calendar_commit_date
unique
= 'commit'.pluralize(@commit_count)
on
= @calendar_date.strftime("%b %d, %Y") rescue ''
-unless @commit_count == 0
%hr
- @calendar_activities.each do |project, commits|
- next if commits.empty?
%div.js-toggle-container
%strong
= pluralize(commits.count, 'commit')
in project
= link_to project.name_with_namespace, project_path(project)
%a.text-expander.js-toggle-button &hellip;
%hr
%div.js-toggle-content
- commits.each do |commit|
%span.monospace
= commit.committed_date.strftime("%H:%M")
= link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id"
= link_to commit.message, namespace_project_commit_path(project.namespace, project, commit), class: "commit-row-message str-truncated"
%br
%hr
......@@ -25,6 +25,7 @@
.user-calendar
%h4.center.light
%i.fa.fa-spinner.fa-spin
.user-calendar-activities
%hr
%h4
User Activity
......
......@@ -213,7 +213,10 @@ Gitlab::Application.routes.draw do
end
get 'u/:username/calendar' => 'users#calendar', as: :user_calendar,
constraints: { username: /(?:[^.]|\.(?!atom$))+/, format: /atom/ }
constraints: { username: /.*/ }
get 'u/:username/calendar_activities' => 'users#calendar_activities', as: :user_calendar_activities,
constraints: { username: /.*/ }
get '/u/:username' => 'users#show', as: :user,
constraints: { username: /(?:[^.]|\.(?!atom$))+/, format: /atom/ }
......
......@@ -518,7 +518,6 @@ ActiveRecord::Schema.define(version: 20150313012111) do
t.integer "notification_level", default: 1, null: false
t.datetime "password_expires_at"
t.integer "created_by_id"
t.datetime "last_credential_check_at"
t.string "avatar"
t.string "confirmation_token"
t.datetime "confirmed_at"
......@@ -526,6 +525,7 @@ ActiveRecord::Schema.define(version: 20150313012111) do
t.string "unconfirmed_email"
t.boolean "hide_no_ssh_key", default: false
t.string "website_url", default: "", null: false
t.datetime "last_credential_check_at"
t.string "github_access_token"
t.string "gitlab_access_token"
t.string "notification_email"
......
......@@ -54,7 +54,7 @@ To serve repositories over SSH there's an add-on application called gitlab-shell
![GitLab Diagram Overview](gitlab_diagram_overview.png)
A typical install of GitLab will be on Ubuntu Linux or RHEL/CentOS. It uses Nginx or Apache as a web front end to proxypass the Unicorn web server. By default, communication between Unicorn and the front end is via a Unix domain socket but forwarding requests via TCP is also supported. The web front end accesses `/home/git/gitlab/public` bypassing the Unicorn server to serve static pages, uploads (e.g. avatar images or attachments), and precompiled assets. GitLab serves web pages and a [GitLab API](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/api) using the Unicorn web server. It uses Sidekiq as a job queue which, in turn, uses redis as a non-persistent database backend for job information, meta data, and incoming jobs.
A typical install of GitLab will be on GNU/Linux. It uses Nginx or Apache as a web front end to proxypass the Unicorn web server. By default, communication between Unicorn and the front end is via a Unix domain socket but forwarding requests via TCP is also supported. The web front end accesses `/home/git/gitlab/public` bypassing the Unicorn server to serve static pages, uploads (e.g. avatar images or attachments), and precompiled assets. GitLab serves web pages and a [GitLab API](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/api) using the Unicorn web server. It uses Sidekiq as a job queue which, in turn, uses redis as a non-persistent database backend for job information, meta data, and incoming jobs.
The GitLab web app uses MySQL or PostgreSQL for persistent database information (e.g. users, permissions, issues, other meta data). GitLab stores the bare git repositories it serves in `/home/git/repositories` by default. It also keeps default branch and hook information with the bare repository. `/home/git/gitlab-satellites` keeps checked out repositories when performing actions such as a merge request, editing files in the web interface, etc.
......
......@@ -45,7 +45,7 @@ clip < ~/.ssh/id_rsa.pub
pbcopy < ~/.ssh/id_rsa.pub
```
**Linux (requires xclip):**
**GNU/Linux (requires xclip):**
```bash
xclip -sel clip < ~/.ssh/id_rsa.pub
```
......
......@@ -22,6 +22,14 @@ module Gitlab
end
end
def self.get_commits_for_date(projects, user, date)
user_commits = {}
projects.reject(&:forked?).each do |project|
user_commits[project] = ProjectContributions.new(project, user).user_commits_on_date(date)
end
user_commits
end
def starting_year
(Time.now - 1.year).strftime("%Y")
end
......
require 'spec_helper'
describe UsersController do
let(:user) { create(:user, username: "user1", name: "User 1", email: "user1@gitlab.com") }
let(:user) { create(:user, username: 'user1', name: 'User 1', email: 'user1@gitlab.com') }
before do
sign_in(user)
end
describe "GET #show" do
describe 'GET #show' do
render_views
it "renders the show template" do
it 'renders the show template' do
get :show, username: user.username
expect(response.status).to eq(200)
expect(response).to render_template("show")
expect(response).to render_template('show')
end
end
describe "GET #calendar" do
it "renders calendar" do
describe 'GET #calendar' do
it 'renders calendar' do
get :calendar, username: user.username
expect(response).to render_template("calendar")
expect(response).to render_template('calendar')
end
end
end
describe 'GET #calendar_activities' do
include RepoHelpers
let(:project) { create(:project) }
let(:calendar_user) { create(:user, email: sample_commit.author_email) }
let(:commit1) { '0ed8c6c6752e8c6ea63e7b92a517bf5ac1209c80' }
let(:commit2) { '7d3b0f7cff5f37573aea97cebfd5692ea1689924' }
before do
allow_any_instance_of(User).to receive(:contributed_projects_ids).and_return([project.id])
project.team << [user, :developer]
end
it 'assigns @commit_count' do
get :calendar_activities, username: calendar_user.username, date: '2014-07-31'
expect(assigns(:commit_count)).to eq(2)
end
it 'assigns @calendar_date' do
get :calendar_activities, username: calendar_user.username, date: '2014-07-31'
expect(assigns(:calendar_date)).to eq(Date.parse('2014-07-31'))
end
it 'assigns @calendar_activities' do
get :calendar_activities, username: calendar_user.username, date: '2014-07-31'
expect(assigns(:calendar_activities).values.flatten.map(&:id)).to eq([commit1, commit2])
end
it 'renders calendar_activities' do
get :calendar_activities, username: calendar_user.username
expect(response).to render_template('calendar_activities')
end
end
end
require 'spec_helper'
describe ExternalWikiService do
include ExternalWikiHelper
describe "Associations" do
it { should belong_to :project }
it { should have_one :service_hook }
end
describe "Validations" do
context "active" do
before do
subject.active = true
end
it { should validate_presence_of :external_wiki_url }
end
end
describe 'External wiki' do
let(:project) { create(:project) }
context 'when it is active' do
before do
properties = { 'external_wiki_url' => 'https://gitlab.com' }
@service = project.create_external_wiki_service(active: true, properties: properties)
end
after do
@service.destroy!
end
it 'should replace the wiki url' do
wiki_path = get_project_wiki_path(project)
wiki_path.should match('https://gitlab.com')
end
end
end
end
......@@ -29,7 +29,7 @@ describe Repository do
subject { repository.timestamps_by_user_log(user) }
it { is_expected.to eq(["2014-08-06", "2014-07-31", "2014-07-31"]) }
it { is_expected.to eq(['2014-08-06', '2014-07-31', '2014-07-31']) }
end
describe 'multiple emails for user' do
......@@ -38,7 +38,22 @@ describe Repository do
subject { repository.timestamps_by_user_log(user) }
it { is_expected.to eq(["2015-01-10", "2014-08-06", "2014-07-31", "2014-07-31"]) }
it { is_expected.to eq(['2015-01-10', '2014-08-06', '2014-07-31', '2014-07-31']) }
end
end
context :commits_by_user_on_date_log do
describe 'single e-mail for user' do
let(:user) { create(:user, email: sample_commit.author_email) }
let(:commit1) { '0ed8c6c6752e8c6ea63e7b92a517bf5ac1209c80' }
let(:commit2) { '7d3b0f7cff5f37573aea97cebfd5692ea1689924' }
subject { repository.commits_by_user_on_date_log(user,Date.new(2014, 07, 31)) }
it 'contains the exepected commits' do
expect(subject.flatten.map(&:id)).to eq([commit1, commit2])
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment