summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md434
-rw-r--r--app/assets/javascripts/behaviors/details_behavior.js5
-rw-r--r--app/assets/stylesheets/framework/variables.scss2
-rw-r--r--app/assets/stylesheets/pages/commit.scss62
-rw-r--r--app/assets/stylesheets/pages/commits.scss31
-rw-r--r--app/assets/stylesheets/pages/login.scss1
-rw-r--r--app/assets/stylesheets/pages/merge_requests.scss2
-rw-r--r--app/helpers/projects_helper.rb6
-rw-r--r--app/views/projects/commit/_commit_box.html.haml74
-rw-r--r--app/views/projects/commit/builds.html.haml3
-rw-r--r--app/views/projects/commit/pipelines.html.haml3
-rw-r--r--app/views/projects/commit/show.html.haml3
-rw-r--r--doc/development/frontend.md11
-rw-r--r--features/steps/project/commits/commits.rb4
-rw-r--r--lib/api/branches.rb123
-rw-r--r--spec/features/projects/features_visibility_spec.rb16
-rw-r--r--spec/requests/api/branches_spec.rb12
-rw-r--r--spec/views/projects/commit/_commit_box.html.haml_spec.rb28
18 files changed, 465 insertions, 355 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index db780469f1d..372ddecc98b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,221 +1,233 @@
Please view this file on the master branch, on stable branches it's out of date.
## 8.14.0 (2016-11-22)
- - Backups do not fail anymore when using tar on annex and custom_hooks only. !5814
- - Adds user project membership expired event to clarify why user was removed (Callum Dryden)
- - Trim leading and trailing whitespace on project_path (Linus Thiel)
- - Prevent award emoji via notes for issues/MRs authored by user (barthc)
- - Adds an optional path parameter to the Commits API to filter commits by path (Luis HGO)
- - Fix extra space on Build sidebar on Firefox !7060
- - Fix mobile layout issues in admin user overview page !7087
- - Fix HipChat notifications rendering (airatshigapov, eisnerd)
- - Refactor Jira service to use jira-ruby gem
- - Add hover to trash icon in notes !7008 (blackst0ne)
- - Only show one error message for an invalid email !5905 (lycoperdon)
- - Fix sidekiq stats in admin area (blackst0ne)
- - Created cycle analytics bundle JavaScript file
- - API: Fix booleans not recognized as such when using the `to_boolean` helper
- - Removed delete branch tooltip !6954
- - Stop unauthorized users dragging on milestone page (blackst0ne)
- - Restore issue boards welcome message when a project is created !6899
- - Escape ref and path for relative links !6050 (winniehell)
- - Fixed link typo on /help/ui to Alerts section. !6915 (Sam Rose)
- - Fix filtering of milestones with quotes in title (airatshigapov)
- - Refactor less readable existance checking code from CoffeeScript !6289 (jlogandavison)
- - Update mail_room and enable sentinel support to Reply By Email (!7101)
- - Add task completion status in Issues and Merge Requests tabs: "X of Y tasks completed" (!6527, @gmesalazar)
- - Simpler arguments passed to named_route on toggle_award_url helper method
- - Fix typo in framework css class. !7086 (Daniel Voogsgerd)
- - New issue board list dropdown stays open after adding a new list
- - Fix: Backup restore doesn't clear cache
- - Optimize Event queries by removing default order
- - API: Fix project deploy keys 400 and 500 errors when adding an existing key. !6784 (Joshua Welsh)
- - Add job for removal of unreferenced LFS objects from both the database and the filesystem (Frank Groeneveld)
- - Replace jquery.cookie plugin with js.cookie !7085
- - Use MergeRequestsClosingIssues cache data on Issue#closed_by_merge_requests method
- - Fix Sign in page 'Forgot your password?' link overlaps on medium-large screens
- - Show full status link on MR & commit pipelines
- - Fix documents and comments on Build API `scope`
- - Refactor email, use setter method instead AR callbacks for email attribute (Semyon Pupkov)
- - Shortened merge request modal to let clipboard button not overlap
- - In all filterable drop downs, put input field in focus only after load is complete (Ido @leibo)
-
-## 8.13.2
- - Fix builds dropdown overlapping bug !7124
- - Fix applying labels for GitHub-imported MRs !7139
- - Fix importing MR comments from GitHub !7139
- - Modify GitHub importer to be retryable !7003
- - Fix and improve `Sortable.highest_label_priority`
- - Fixed sticky merge request tabs when sidebar is pinned
+
+- Backups do not fail anymore when using tar on annex and custom_hooks only. !5814
+- Adds user project membership expired event to clarify why user was removed (Callum Dryden)
+- Trim leading and trailing whitespace on project_path (Linus Thiel)
+- Prevent award emoji via notes for issues/MRs authored by user (barthc)
+- Adds an optional path parameter to the Commits API to filter commits by path (Luis HGO)
+- Fix extra space on Build sidebar on Firefox !7060
+- Fix mobile layout issues in admin user overview page !7087
+- Fix HipChat notifications rendering (airatshigapov, eisnerd)
+- Refactor Jira service to use jira-ruby gem
+- Add hover to trash icon in notes !7008 (blackst0ne)
+- Only show one error message for an invalid email !5905 (lycoperdon)
+- Fix sidekiq stats in admin area (blackst0ne)
+- Created cycle analytics bundle JavaScript file
+- API: Fix booleans not recognized as such when using the `to_boolean` helper
+- Removed delete branch tooltip !6954
+- Stop unauthorized users dragging on milestone page (blackst0ne)
+- Restore issue boards welcome message when a project is created !6899
+- Escape ref and path for relative links !6050 (winniehell)
+- Fixed link typo on /help/ui to Alerts section. !6915 (Sam Rose)
+- Fix filtering of milestones with quotes in title (airatshigapov)
+- Refactor less readable existance checking code from CoffeeScript !6289 (jlogandavison)
+- Update mail_room and enable sentinel support to Reply By Email (!7101)
+- Add task completion status in Issues and Merge Requests tabs: "X of Y tasks completed" (!6527, @gmesalazar)
+- Simpler arguments passed to named_route on toggle_award_url helper method
+- Fix typo in framework css class. !7086 (Daniel Voogsgerd)
+- New issue board list dropdown stays open after adding a new list
+- Fix: Backup restore doesn't clear cache
+- Optimize Event queries by removing default order
+- API: Fix project deploy keys 400 and 500 errors when adding an existing key. !6784 (Joshua Welsh)
+- Add job for removal of unreferenced LFS objects from both the database and the filesystem (Frank Groeneveld)
+- Replace jquery.cookie plugin with js.cookie !7085
+- Use MergeRequestsClosingIssues cache data on Issue#closed_by_merge_requests method
+- Fix Sign in page 'Forgot your password?' link overlaps on medium-large screens
+- Show full status link on MR & commit pipelines
+- Fix documents and comments on Build API `scope`
+- Refactor email, use setter method instead AR callbacks for email attribute (Semyon Pupkov)
+- Shortened merge request modal to let clipboard button not overlap
+- In all filterable drop downs, put input field in focus only after load is complete (Ido @leibo)
+
+## 8.13.2 (2016-10-31)
+
+- Fix encoding issues on pipeline commits. !6832
+- Use Hash rocket syntax to fix cycle analytics under Ruby 2.1. !6977
+- Modify GitHub importer to be retryable. !7003
+- Fix refs dropdown selection with special characters. !7061
+- Fix horizontal padding for highlight blocks. !7062
+- Pass user instance to `Labels::FindOrCreateService` or `skip_authorization: true`. !7093
+- Fix builds dropdown overlapping bug. !7124
+- Fix applying labels for GitHub-imported MRs. !7139
+- Fix importing MR comments from GitHub. !7139
+- Fix project member access for group links. !7144
+- API: Fix booleans not recognized as such when using the `to_boolean` helper. !7149
+- Fix and improve `Sortable.highest_label_priority`. !7165
+- Fixed sticky merge request tabs when sidebar is pinned. !7167
+- Only remove right connector of first build of last stage. !7179
## 8.13.1 (2016-10-25)
- - Fix branch protection API. !6215
- - Fix hidden pipeline graph on commit and MR page. !6895
- - Fix Cycle analytics not showing correct data when filtering by date. !6906
- - Ensure custom provider tab labels don't break layout. !6993
- - Fix issue boards user link when in subdirectory. !7018
- - Refactor and add new environment functionality to CI yaml reference. !7026
- - Fix typo in project settings that prevents users from enabling container registry. !7037
- - Fix events order in `users/:id/events` endpoint. !7039
- - Remove extra line for empty issue description. !7045
- - Don't append issue/MR templates to any existing text. !7050
- - Fix error in generating labels. !7055
- - Stop clearing the database cache on `rake cache:clear`. !7056
- - Only show register tab if signup enabled. !7058
- - Fix lightweight tags not processed correctly by GitTagPushService
- - Expire and build repository cache after project import. !7064
- - Fix bug where labels would be assigned to issues that were moved. !7065
- - Fix reply-by-email not working due to queue name mismatch. !7068
- - Fix 404 for group pages when GitLab setup uses relative url. !7071
- - Fix `User#to_reference`. !7088
- - Reduce overhead of `LabelFinder` by avoiding `#presence` call. !7094
- - Fix unauthorized users dragging on issue boards. !7096
- - Only schedule `ProjectCacheWorker` jobs when needed. !7099
+
+- Fix branch protection API. !6215
+- Fix hidden pipeline graph on commit and MR page. !6895
+- Fix Cycle analytics not showing correct data when filtering by date. !6906
+- Ensure custom provider tab labels don't break layout. !6993
+- Fix issue boards user link when in subdirectory. !7018
+- Refactor and add new environment functionality to CI yaml reference. !7026
+- Fix typo in project settings that prevents users from enabling container registry. !7037
+- Fix events order in `users/:id/events` endpoint. !7039
+- Remove extra line for empty issue description. !7045
+- Don't append issue/MR templates to any existing text. !7050
+- Fix error in generating labels. !7055
+- Stop clearing the database cache on `rake cache:clear`. !7056
+- Only show register tab if signup enabled. !7058
+- Fix lightweight tags not processed correctly by GitTagPushService
+- Expire and build repository cache after project import. !7064
+- Fix bug where labels would be assigned to issues that were moved. !7065
+- Fix reply-by-email not working due to queue name mismatch. !7068
+- Fix 404 for group pages when GitLab setup uses relative url. !7071
+- Fix `User#to_reference`. !7088
+- Reduce overhead of `LabelFinder` by avoiding `#presence` call. !7094
+- Fix unauthorized users dragging on issue boards. !7096
+- Only schedule `ProjectCacheWorker` jobs when needed. !7099
## 8.13.0 (2016-10-22)
- - Fix save button on project pipeline settings page. (!6955)
- - All Sidekiq workers now use their own queue
- - Avoid race condition when asynchronously removing expired artifacts. (!6881)
- - Improve Merge When Build Succeeds triggers and execute on pipeline success. (!6675)
- - Respond with 404 Not Found for non-existent tags (Linus Thiel)
- - Truncate long labels with ellipsis in labels page
- - Improve tabbing usability for sign in page (ClemMakesApps)
- - Enforce TrailingSemicolon and EmptyLineBetweenBlocks in scss-lint
- - Adding members no longer silently fails when there is extra whitespace
- - Update runner version only when updating contacted_at
- - Add link from system note to compare with previous version
- - Use gitlab-shell v3.6.6
- - Ignore references to internal issues when using external issues tracker
- - Ability to resolve merge request conflicts with editor !6374
- - Add `/projects/visible` API endpoint (Ben Boeckel)
- - Fix centering of custom header logos (Ashley Dumaine)
- - Keep around commits only pipeline creation as pipeline data doesn't change over time
- - Update duration at the end of pipeline
- - ExpireBuildArtifactsWorker query builds table without ordering enqueuing one job per build to cleanup
- - Add group level labels. (!6425)
- - Add an example for testing a phoenix application with Gitlab CI in the docs (Manthan Mallikarjun)
- - Cancelled pipelines could be retried. !6927
- - Updating verbiage on git basics to be more intuitive
- - Fix project_feature record not generated on project creation
- - Clarify documentation for Runners API (Gennady Trafimenkov)
- - Use optimistic locking for pipelines and builds
- - The instrumentation for Banzai::Renderer has been restored
- - Change user & group landing page routing from /u/:username to /:username
- - Added documentation for .gitattributes files
- - Move Pipeline Metrics to separate worker
- - AbstractReferenceFilter caches project_refs on RequestStore when active
- - Replaced the check sign to arrow in the show build view. !6501
- - Add a /wip slash command to toggle the Work In Progress status of a merge request. !6259 (tbalthazar)
- - ProjectCacheWorker updates caches at most once per 15 minutes per project
- - Fix Error 500 when viewing old merge requests with bad diff data
- - Create a new /templates namespace for the /licenses, /gitignores and /gitlab_ci_ymls API endpoints. !5717 (tbalthazar)
- - Fix viewing merged MRs when the source project has been removed !6991
- - Speed-up group milestones show page
- - Fix inconsistent options dropdown caret on mobile viewports (ClemMakesApps)
- - Extract project#update_merge_requests and SystemHooks to its own worker from GitPushService
- - Fix discussion thread from emails for merge requests. !7010
- - Don't include archived projects when creating group milestones. !4940 (Jeroen Jacobs)
- - Add tag shortcut from the Commit page. !6543
- - Keep refs for each deployment
- - Close open tooltips on page navigation (Linus Thiel)
- - Allow browsing branches that end with '.atom'
- - Log LDAP lookup errors and don't swallow unrelated exceptions. !6103 (Markus Koller)
- - Replace unique keyframes mixin with keyframe mixin with specific names (ClemMakesApps)
- - Add more tests for calendar contribution (ClemMakesApps)
- - Update Gitlab Shell to fix some problems with moving projects between storages
- - Cache rendered markdown in the database, rather than Redis
- - Add todo toggle event (ClemMakesApps)
- - Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references
- - Simplify Mentionable concern instance methods
- - API: Ability to retrieve version information (Robert Schilling)
- - Fix permission for setting an issue's due date
- - API: Multi-file commit !6096 (mahcsig)
- - Unicode emoji are now converted to images
- - Revert "Label list shows all issues (opened or closed) with that label"
- - Expose expires_at field when sharing project on API
- - Fix VueJS template tags being rendered in code comments
- - Added copy file path button to merge request diff files
- - Fix issue with page scrolling to top when closing or pinning sidebar (lukehowell)
- - Add Issue Board API support (andrebsguedes)
- - Allow the Koding integration to be configured through the API
- - Add new issue button to each list on Issues Board
- - Execute specific named route method from toggle_award_url helper method
- - Added soft wrap button to repository file/blob editor
- - Update namespace validation to forbid reserved names (.git and .atom) (Will Starms)
- - Show the time ago a merge request was deployed to an environment
- - Add RTL support to markdown renderer (Ebrahim Byagowi)
- - Add word-wrap to issue title on issue and milestone boards (ClemMakesApps)
- - Fix todos page mobile viewport layout (ClemMakesApps)
- - Make issues search less finicky
- - Fix inconsistent highlighting of already selected activity nav-links (ClemMakesApps)
- - Remove redundant mixins (ClemMakesApps)
- - Added 'Download' button to the Snippets page (Justin DiPierro)
- - Add visibility level to project repository
- - Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison)
- - Close open merge request without source project (Katarzyna Kobierska Ula Budziszewska)
- - Fix showing commits from source project for merge request !6658
- - Fix that manual jobs would no longer block jobs in the next stage. !6604
- - Add configurable email subject suffix (Fu Xu)
- - Use defined colour for a language when available !6748 (nilsding)
- - Added tooltip to fork count on project show page. (Justin DiPierro)
- - Use a ConnectionPool for Rails.cache on Sidekiq servers
- - Replace `alias_method_chain` with `Module#prepend`
- - Enable GitLab Import/Export for non-admin users.
- - Preserve label filters when sorting !6136 (Joseph Frazier)
- - MergeRequest#new form load diff asynchronously
- - Only update issuable labels if they have been changed
- - Take filters in account in issuable counters. !6496
- - Use custom Ruby images to test builds (registry.dev.gitlab.org/gitlab/gitlab-build-images:*)
- - Replace static issue fixtures by script !6059 (winniehell)
- - Append issue template to existing description !6149 (Joseph Frazier)
- - Trending projects now only show public projects and the list of projects is cached for a day
- - Memoize Gitlab Shell's secret token (!6599, Justin DiPierro)
- - Revoke button in Applications Settings underlines on hover.
- - Use higher size on Gitlab::Redis connection pool on Sidekiq servers
- - Add missing values to linter !6276 (Katarzyna Kobierska Ula Budziszewska)
- - Revert avoid touching file system on Build#artifacts?
- - Stop using a Redis lease when updating the project activity timestamp whenever a new event is created
- - Add disabled delete button to protected branches (ClemMakesApps)
- - Add broadcast messages and alerts below sub-nav
- - Better empty state for Groups view
- - API: New /users/:id/events endpoint
- - Update ruby-prof to 0.16.2. !6026 (Elan Ruusamäe)
- - Replace bootstrap caret with fontawesome caret (ClemMakesApps)
- - Fix unnecessary escaping of reserved HTML characters in milestone title. !6533
- - Add organization field to user profile
- - Change user pages routing from /u/:username/PATH to /users/:username/PATH. Old routes will redirect to the new ones for the time being.
- - Fix enter key when navigating search site search dropdown. !6643 (Brennan Roberts)
- - Fix deploy status responsiveness error !6633
- - Make searching for commits case insensitive
- - Fix resolved discussion display in side-by-side diff view !6575
- - Optimize GitHub importing for speed and memory
- - API: expose pipeline data in builds API (!6502, Guilherme Salazar)
- - Notify the Merger about merge after successful build (Dimitris Karakasilis)
- - Reduce queries needed to find users using their SSH keys when pushing commits
- - Prevent rendering the link to all when the author has no access (Katarzyna Kobierska Ula Budziszewska)
- - Fix broken repository 500 errors in project list
- - Fix the diff in the merge request view when converting a symlink to a regular file
- - Fix Pipeline list commit column width should be adjusted
- - Close todos when accepting merge requests via the API !6486 (tonygambone)
- - Ability to batch assign issues relating to a merge request to the author. !5725 (jamedjo)
- - Changed Slack service user referencing from full name to username (Sebastian Poxhofer)
- - Retouch environments list and deployments list
- - Add multiple command support for all label related slash commands !6780 (barthc)
- - Add Container Registry on/off status to Admin Area !6638 (the-undefined)
- - Add Nofollow for uppercased scheme in external urls !6820 (the-undefined)
- - Allow empty merge requests !6384 (Artem Sidorenko)
- - Grouped pipeline dropdown is a scrollable container
- - Cleanup Ci::ApplicationController. !6757 (Takuya Noguchi)
- - Fixes padding in all clipboard icons that have .btn class
- - Fix a typo in doc/api/labels.md
- - Fix double-escaping in activities tab (Alexandre Maia)
- - API: all unknown routing will be handled with 404 Not Found
- - Add docs for request profiling
- - Delete dynamic environments
- - Fix buggy iOS tooltip layering behavior.
- - Make guests unable to view MRs on private projects
- - Fix broken Project API docs (Takuya Noguchi)
- - Migrate invalid project members (owner -> master)
+
+- Fix save button on project pipeline settings page. (!6955)
+- All Sidekiq workers now use their own queue
+- Avoid race condition when asynchronously removing expired artifacts. (!6881)
+- Improve Merge When Build Succeeds triggers and execute on pipeline success. (!6675)
+- Respond with 404 Not Found for non-existent tags (Linus Thiel)
+- Truncate long labels with ellipsis in labels page
+- Improve tabbing usability for sign in page (ClemMakesApps)
+- Enforce TrailingSemicolon and EmptyLineBetweenBlocks in scss-lint
+- Adding members no longer silently fails when there is extra whitespace
+- Update runner version only when updating contacted_at
+- Add link from system note to compare with previous version
+- Use gitlab-shell v3.6.6
+- Ignore references to internal issues when using external issues tracker
+- Ability to resolve merge request conflicts with editor !6374
+- Add `/projects/visible` API endpoint (Ben Boeckel)
+- Fix centering of custom header logos (Ashley Dumaine)
+- Keep around commits only pipeline creation as pipeline data doesn't change over time
+- Update duration at the end of pipeline
+- ExpireBuildArtifactsWorker query builds table without ordering enqueuing one job per build to cleanup
+- Add group level labels. (!6425)
+- Add an example for testing a phoenix application with Gitlab CI in the docs (Manthan Mallikarjun)
+- Cancelled pipelines could be retried. !6927
+- Updating verbiage on git basics to be more intuitive
+- Fix project_feature record not generated on project creation
+- Clarify documentation for Runners API (Gennady Trafimenkov)
+- Use optimistic locking for pipelines and builds
+- The instrumentation for Banzai::Renderer has been restored
+- Change user & group landing page routing from /u/:username to /:username
+- Added documentation for .gitattributes files
+- Move Pipeline Metrics to separate worker
+- AbstractReferenceFilter caches project_refs on RequestStore when active
+- Replaced the check sign to arrow in the show build view. !6501
+- Add a /wip slash command to toggle the Work In Progress status of a merge request. !6259 (tbalthazar)
+- ProjectCacheWorker updates caches at most once per 15 minutes per project
+- Fix Error 500 when viewing old merge requests with bad diff data
+- Create a new /templates namespace for the /licenses, /gitignores and /gitlab_ci_ymls API endpoints. !5717 (tbalthazar)
+- Fix viewing merged MRs when the source project has been removed !6991
+- Speed-up group milestones show page
+- Fix inconsistent options dropdown caret on mobile viewports (ClemMakesApps)
+- Extract project#update_merge_requests and SystemHooks to its own worker from GitPushService
+- Fix discussion thread from emails for merge requests. !7010
+- Don't include archived projects when creating group milestones. !4940 (Jeroen Jacobs)
+- Add tag shortcut from the Commit page. !6543
+- Keep refs for each deployment
+- Close open tooltips on page navigation (Linus Thiel)
+- Allow browsing branches that end with '.atom'
+- Log LDAP lookup errors and don't swallow unrelated exceptions. !6103 (Markus Koller)
+- Replace unique keyframes mixin with keyframe mixin with specific names (ClemMakesApps)
+- Add more tests for calendar contribution (ClemMakesApps)
+- Update Gitlab Shell to fix some problems with moving projects between storages
+- Cache rendered markdown in the database, rather than Redis
+- Add todo toggle event (ClemMakesApps)
+- Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references
+- Simplify Mentionable concern instance methods
+- API: Ability to retrieve version information (Robert Schilling)
+- Fix permission for setting an issue's due date
+- API: Multi-file commit !6096 (mahcsig)
+- Unicode emoji are now converted to images
+- Revert "Label list shows all issues (opened or closed) with that label"
+- Expose expires_at field when sharing project on API
+- Fix VueJS template tags being rendered in code comments
+- Added copy file path button to merge request diff files
+- Fix issue with page scrolling to top when closing or pinning sidebar (lukehowell)
+- Add Issue Board API support (andrebsguedes)
+- Allow the Koding integration to be configured through the API
+- Add new issue button to each list on Issues Board
+- Execute specific named route method from toggle_award_url helper method
+- Added soft wrap button to repository file/blob editor
+- Update namespace validation to forbid reserved names (.git and .atom) (Will Starms)
+- Show the time ago a merge request was deployed to an environment
+- Add RTL support to markdown renderer (Ebrahim Byagowi)
+- Add word-wrap to issue title on issue and milestone boards (ClemMakesApps)
+- Fix todos page mobile viewport layout (ClemMakesApps)
+- Make issues search less finicky
+- Fix inconsistent highlighting of already selected activity nav-links (ClemMakesApps)
+- Remove redundant mixins (ClemMakesApps)
+- Added 'Download' button to the Snippets page (Justin DiPierro)
+- Add visibility level to project repository
+- Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison)
+- Close open merge request without source project (Katarzyna Kobierska Ula Budziszewska)
+- Fix showing commits from source project for merge request !6658
+- Fix that manual jobs would no longer block jobs in the next stage. !6604
+- Add configurable email subject suffix (Fu Xu)
+- Use defined colour for a language when available !6748 (nilsding)
+- Added tooltip to fork count on project show page. (Justin DiPierro)
+- Use a ConnectionPool for Rails.cache on Sidekiq servers
+- Replace `alias_method_chain` with `Module#prepend`
+- Enable GitLab Import/Export for non-admin users.
+- Preserve label filters when sorting !6136 (Joseph Frazier)
+- MergeRequest#new form load diff asynchronously
+- Only update issuable labels if they have been changed
+- Take filters in account in issuable counters. !6496
+- Use custom Ruby images to test builds (registry.dev.gitlab.org/gitlab/gitlab-build-images:*)
+- Replace static issue fixtures by script !6059 (winniehell)
+- Append issue template to existing description !6149 (Joseph Frazier)
+- Trending projects now only show public projects and the list of projects is cached for a day
+- Memoize Gitlab Shell's secret token (!6599, Justin DiPierro)
+- Revoke button in Applications Settings underlines on hover.
+- Use higher size on Gitlab::Redis connection pool on Sidekiq servers
+- Add missing values to linter !6276 (Katarzyna Kobierska Ula Budziszewska)
+- Revert avoid touching file system on Build#artifacts?
+- Stop using a Redis lease when updating the project activity timestamp whenever a new event is created
+- Add disabled delete button to protected branches (ClemMakesApps)
+- Add broadcast messages and alerts below sub-nav
+- Better empty state for Groups view
+- API: New /users/:id/events endpoint
+- Update ruby-prof to 0.16.2. !6026 (Elan Ruusamäe)
+- Replace bootstrap caret with fontawesome caret (ClemMakesApps)
+- Fix unnecessary escaping of reserved HTML characters in milestone title. !6533
+- Add organization field to user profile
+- Change user pages routing from /u/:username/PATH to /users/:username/PATH. Old routes will redirect to the new ones for the time being.
+- Fix enter key when navigating search site search dropdown. !6643 (Brennan Roberts)
+- Fix deploy status responsiveness error !6633
+- Make searching for commits case insensitive
+- Fix resolved discussion display in side-by-side diff view !6575
+- Optimize GitHub importing for speed and memory
+- API: expose pipeline data in builds API (!6502, Guilherme Salazar)
+- Notify the Merger about merge after successful build (Dimitris Karakasilis)
+- Reduce queries needed to find users using their SSH keys when pushing commits
+- Prevent rendering the link to all when the author has no access (Katarzyna Kobierska Ula Budziszewska)
+- Fix broken repository 500 errors in project list
+- Fix the diff in the merge request view when converting a symlink to a regular file
+- Fix Pipeline list commit column width should be adjusted
+- Close todos when accepting merge requests via the API !6486 (tonygambone)
+- Ability to batch assign issues relating to a merge request to the author. !5725 (jamedjo)
+- Changed Slack service user referencing from full name to username (Sebastian Poxhofer)
+- Retouch environments list and deployments list
+- Add multiple command support for all label related slash commands !6780 (barthc)
+- Add Container Registry on/off status to Admin Area !6638 (the-undefined)
+- Add Nofollow for uppercased scheme in external urls !6820 (the-undefined)
+- Allow empty merge requests !6384 (Artem Sidorenko)
+- Grouped pipeline dropdown is a scrollable container
+- Cleanup Ci::ApplicationController. !6757 (Takuya Noguchi)
+- Fixes padding in all clipboard icons that have .btn class
+- Fix a typo in doc/api/labels.md
+- Fix double-escaping in activities tab (Alexandre Maia)
+- API: all unknown routing will be handled with 404 Not Found
+- Add docs for request profiling
+- Delete dynamic environments
+- Fix buggy iOS tooltip layering behavior.
+- Make guests unable to view MRs on private projects
+- Fix broken Project API docs (Takuya Noguchi)
+- Migrate invalid project members (owner -> master)
## 8.12.7
diff --git a/app/assets/javascripts/behaviors/details_behavior.js b/app/assets/javascripts/behaviors/details_behavior.js
index 48490869364..a64cefb62bd 100644
--- a/app/assets/javascripts/behaviors/details_behavior.js
+++ b/app/assets/javascripts/behaviors/details_behavior.js
@@ -15,6 +15,11 @@
return $("body").on("click", ".js-details-expand", function(e) {
$(this).next('.js-details-content').removeClass("hide");
$(this).hide();
+
+ var truncatedItem = $(this).siblings('.js-details-short');
+ if (truncatedItem.length) {
+ truncatedItem.addClass("hide");
+ }
return e.preventDefault();
});
});
diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index b271f8cf332..be2a7ceefff 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -90,6 +90,8 @@ $table-border-color: #f0f0f0;
$background-color: $gray-light;
$dark-background-color: #f5f5f5;
$table-text-gray: #8f8f8f;
+$widget-expand-item: #e8f2f7;
+$widget-inner-border: #eef0f2;
/*
* Text
diff --git a/app/assets/stylesheets/pages/commit.scss b/app/assets/stylesheets/pages/commit.scss
index 8ecac08137b..8ecf7fcb96d 100644
--- a/app/assets/stylesheets/pages/commit.scss
+++ b/app/assets/stylesheets/pages/commit.scss
@@ -33,10 +33,8 @@
&.commit-info-row-header {
line-height: 34px;
-
- @media (min-width: $screen-sm-min) {
- margin-bottom: 0;
- }
+ padding: 10px 0;
+ margin-bottom: 0;
.commit-options-dropdown-caret {
@media (max-width: $screen-sm) {
@@ -80,6 +78,58 @@
}
}
+.js-details-expand {
+ &:hover {
+ text-decoration: none;
+ }
+}
+
+.commit-info-widget {
+ background: $background-color;
+ color: $gl-gray;
+ border: 1px solid $border-color;
+ border-radius: $border-radius-default;
+
+ .widget-row {
+ padding: $gl-padding;
+
+ &:not(:last-of-type) {
+ border-bottom: 1px solid $widget-inner-border;
+ }
+
+ &.branch-info {
+ .monospace,
+ .commit-info {
+ margin-left: 4px;
+ }
+ }
+ }
+
+ .icon-container {
+ display: inline-block;
+ margin-right: 8px;
+
+ svg {
+ position: relative;
+ top: 2px;
+ height: 16px;
+ width: 16px;
+ }
+
+ &.commit-icon {
+ svg {
+ path {
+ fill: $gl-text-color;
+ }
+ }
+ }
+ }
+
+ .label.label-gray {
+ background-color: $widget-expand-item;
+ }
+}
+
.ci-status-link {
svg {
overflow: visible;
@@ -88,6 +138,7 @@
.commit-box {
border-top: 1px solid $border-color;
+ padding: $gl-padding 0;
.commit-title {
margin: 0;
@@ -138,6 +189,9 @@
}
.commit-action-buttons {
+ position: relative;
+ top: -1px;
+
i {
color: $gl-icon-color;
font-size: 13px;
diff --git a/app/assets/stylesheets/pages/commits.scss b/app/assets/stylesheets/pages/commits.scss
index ad315cfae62..52d6a39bd59 100644
--- a/app/assets/stylesheets/pages/commits.scss
+++ b/app/assets/stylesheets/pages/commits.scss
@@ -33,21 +33,22 @@
color: $gl-dark-link-color;
}
- .text-expander {
- display: inline-block;
- background: $gray-light;
- color: $gl-placeholder-color;
- padding: 0 5px;
- cursor: pointer;
- border: 1px solid $border-gray-dark;
- border-radius: $border-radius-default;
- margin-left: 5px;
- line-height: 1;
-
- &:hover {
- background-color: darken($gray-light, 10%);
- text-decoration: none;
- }
+}
+
+.text-expander {
+ display: inline-block;
+ background: $gray-light;
+ color: $gl-placeholder-color;
+ padding: 0 5px;
+ cursor: pointer;
+ border: 1px solid $border-gray-dark;
+ border-radius: $border-radius-default;
+ margin-left: 5px;
+ line-height: 1;
+
+ &:hover {
+ background-color: darken($gray-light, 10%);
+ text-decoration: none;
}
}
diff --git a/app/assets/stylesheets/pages/login.scss b/app/assets/stylesheets/pages/login.scss
index 3d2b024fe5c..a2f5c6c6bd3 100644
--- a/app/assets/stylesheets/pages/login.scss
+++ b/app/assets/stylesheets/pages/login.scss
@@ -54,7 +54,6 @@
margin: 0 0 10px;
}
-
.login-footer {
margin-top: 10px;
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index f510e3d3cdf..f8e31a624ec 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -60,7 +60,7 @@
}
.ci_widget {
- border-bottom: 1px solid #eef0f2;
+ border-bottom: 1px solid $widget-inner-border;
svg {
margin-right: 4px;
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index d26b4018be6..42c00ec3cd5 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -174,10 +174,14 @@ module ProjectsHelper
nav_tabs << :merge_requests
end
- if can?(current_user, :read_build, project)
+ if can?(current_user, :read_pipeline, project)
nav_tabs << :pipelines
end
+ if can?(current_user, :read_build, project)
+ nav_tabs << :builds
+ end
+
if Gitlab.config.registry.enabled && can?(current_user, :read_container_image, project)
nav_tabs << :container_registry
end
diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml
index 6c82a4e5600..d8c95376b94 100644
--- a/app/views/projects/commit/_commit_box.html.haml
+++ b/app/views/projects/commit/_commit_box.html.haml
@@ -1,8 +1,23 @@
.commit-info-row.commit-info-row-header
- %span.hidden-xs Authored by
+ %span.hidden-xs.hidden-sm Commit
+ = link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace js-details-short"
+ = link_to("#", class: "js-details-expand hidden-xs hidden-sm") do
+ %span.text-expander
+ \...
+ %span.js-details-content.hide
+ = link_to @commit.id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace hidden-xs hidden-sm"
+ = clipboard_button(clipboard_text: @commit.id)
+ %span.hidden-xs authored
+ #{time_ago_with_tooltip(@commit.authored_date)}
+ %span by
+ = author_avatar(@commit, size: 24)
%strong
= commit_author_link(@commit, avatar: true, size: 24)
- #{time_ago_with_tooltip(@commit.authored_date)}
+ - if @commit.different_committer?
+ %span.light Committed by
+ %strong
+ = commit_committer_link(@commit, avatar: true, size: 24)
+ #{time_ago_with_tooltip(@commit.committed_date)}
.pull-right.commit-action-buttons
- if defined?(@notes_count) && @notes_count > 0
@@ -33,42 +48,35 @@
%li= link_to "Email Patches", namespace_project_commit_path(@project.namespace, @project, @commit, format: :patch)
%li= link_to "Plain Diff", namespace_project_commit_path(@project.namespace, @project, @commit, format: :diff)
-- if @commit.different_committer?
- .commit-info-row
- %span.light Committed by
- %strong
- = commit_committer_link(@commit, avatar: true, size: 24)
- #{time_ago_with_tooltip(@commit.committed_date)}
-
-.commit-info-row
- %span.hidden-xs.hidden-sm Commit
- = link_to @commit.id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace hidden-xs hidden-sm"
- = link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace visible-xs-inline visible-sm-inline"
- = clipboard_button(clipboard_text: @commit.id)
- %span.cgray= pluralize(@commit.parents.count, "parent")
- - @commit.parents.each do |parent|
- = link_to parent.short_id, namespace_project_commit_path(@project.namespace, @project, parent), class: "monospace"
-
- %span.commit-info.branches
- %i.fa.fa-spinner.fa-spin
-
-- if @commit.status
- .commit-info-row
- Builds for
- = pluralize(@commit.pipelines.count, 'pipeline')
- = link_to builds_namespace_project_commit_path(@project.namespace, @project, @commit.id), class: "ci-status-link ci-status-icon-#{@commit.status}" do
- = ci_icon_for_status(@commit.status)
- %span.ci-status-label
- = ci_label_for_status(@commit.status)
- in
- = time_interval_in_words @commit.pipelines.total_duration
-
-.commit-box.content-block
+.commit-box
%h3.commit-title
= markdown(@commit.title, pipeline: :single_line, author: @commit.author)
- if @commit.description.present?
%pre.commit-description
= preserve(markdown(@commit.description, pipeline: :single_line, author: @commit.author))
+.commit-info-widget
+ .widget-row.branch-info
+ .icon-container.commit-icon
+ = custom_icon("icon_commit")
+ %span.cgray= pluralize(@commit.parents.count, "parent")
+ - @commit.parents.each do |parent|
+ = link_to parent.short_id, namespace_project_commit_path(@project.namespace, @project, parent), class: "monospace"
+ %span.commit-info.branches
+ %i.fa.fa-spinner.fa-spin
+
+ - if @commit.status
+ .widget-row.pipeline-info
+ .icon-container
+ = ci_icon_for_status(@commit.status)
+ Pipeline
+ = link_to "##{@commit.pipelines.last.id}", pipelines_namespace_project_commit_path(@project.namespace, @project, @commit.id), class: "monospace"
+ for
+ = link_to @commit.short_id, namespace_project_commit_path(@project.namespace, @project, @commit), class: "monospace"
+ %span.ci-status-label
+ = ci_label_for_status(@commit.status)
+ in
+ = time_interval_in_words @commit.pipelines.total_duration
+
:javascript
$(".commit-info.branches").load("#{branches_namespace_project_commit_path(@project.namespace, @project, @commit.id)}");
diff --git a/app/views/projects/commit/builds.html.haml b/app/views/projects/commit/builds.html.haml
index f9d7eac3542..077b2d2725b 100644
--- a/app/views/projects/commit/builds.html.haml
+++ b/app/views/projects/commit/builds.html.haml
@@ -3,8 +3,7 @@
= render "projects/commits/head"
%div{ class: container_class }
- .prepend-top-default
- = render "commit_box"
+ = render "commit_box"
= render "ci_menu"
= render "builds"
diff --git a/app/views/projects/commit/pipelines.html.haml b/app/views/projects/commit/pipelines.html.haml
index d85d6729a81..8233e26e4e7 100644
--- a/app/views/projects/commit/pipelines.html.haml
+++ b/app/views/projects/commit/pipelines.html.haml
@@ -1,7 +1,6 @@
- page_title "Pipelines", "#{@commit.title} (#{@commit.short_id})", "Commits"
-.prepend-top-default
- = render "commit_box"
+= render "commit_box"
= render "ci_menu"
= render "pipelines_list", pipelines: @ci_pipelines
diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml
index cebf58d63df..b8c64d1f13e 100644
--- a/app/views/projects/commit/show.html.haml
+++ b/app/views/projects/commit/show.html.haml
@@ -4,8 +4,7 @@
= render "projects/commits/head"
%div{ class: container_class }
- .prepend-top-default
- = render "commit_box"
+ = render "commit_box"
- if @commit.status
= render "ci_menu"
- else
diff --git a/doc/development/frontend.md b/doc/development/frontend.md
index 4fb56444917..ece8f880542 100644
--- a/doc/development/frontend.md
+++ b/doc/development/frontend.md
@@ -238,13 +238,18 @@ For our currently-supported browsers, see our [requirements][requirements].
[scss-style-guide]: scss_styleguide.md
[requirements]: ../install/requirements.md#supported-web-browsers
-## Common Errors
+## Gotchas
-### Rspec (Capybara/Poltergeist) chokes on general JavaScript errors
+### Phantom.JS (used by Teaspoon & Rspec) chokes, returning vague JavaScript errors
If you see very generic JavaScript errors (e.g. `jQuery is undefined`) being thrown in tests, but
can't reproduce them manually, you may have included `ES6`-style JavaScript in files that don't
have the `.js.es6` file extension. Either use ES5-friendly JavaScript or rename the file you're
-working in (`git mv <file>.js> <file.js.es6>`).
+working in (`git mv <file.js> <file.js.es6>`).
+
+Similar errors will be thrown if you're using
+any of the [array methods introduced in ES6](http://www.2ality.com/2014/05/es6-array-methods.html)
+whether or not you've updated the file extension.
+
diff --git a/features/steps/project/commits/commits.rb b/features/steps/project/commits/commits.rb
index 244306e8464..007dfb67a77 100644
--- a/features/steps/project/commits/commits.rb
+++ b/features/steps/project/commits/commits.rb
@@ -163,7 +163,7 @@ class Spinach::Features::ProjectCommits < Spinach::FeatureSteps
end
step 'I see commit ci info' do
- expect(page).to have_content "Builds for 1 pipeline pending"
+ expect(page).to have_content "Pipeline #1 for 570e7b2a pending"
end
step 'I click status link' do
@@ -171,7 +171,7 @@ class Spinach::Features::ProjectCommits < Spinach::FeatureSteps
end
step 'I see builds list' do
- expect(page).to have_content "Builds for 1 pipeline pending"
+ expect(page).to have_content "Pipeline #1 for 570e7b2a pending"
expect(page).to have_content "1 build"
end
diff --git a/lib/api/branches.rb b/lib/api/branches.rb
index 6d827448994..21a106387f0 100644
--- a/lib/api/branches.rb
+++ b/lib/api/branches.rb
@@ -6,58 +6,55 @@ module API
before { authenticate! }
before { authorize! :download_code, user_project }
+ params do
+ requires :id, type: String, desc: 'The ID of a project'
+ end
resource :projects do
- # Get a project repository branches
- #
- # Parameters:
- # id (required) - The ID of a project
- # Example Request:
- # GET /projects/:id/repository/branches
+ desc 'Get a project repository branches' do
+ success Entities::RepoBranch
+ end
get ":id/repository/branches" do
branches = user_project.repository.branches.sort_by(&:name)
present branches, with: Entities::RepoBranch, project: user_project
end
- # Get a single branch
- #
- # Parameters:
- # id (required) - The ID of a project
- # branch (required) - The name of the branch
- # Example Request:
- # GET /projects/:id/repository/branches/:branch
- get ':id/repository/branches/:branch', requirements: { branch: /.+/ } do
- @branch = user_project.repository.branches.find { |item| item.name == params[:branch] }
- not_found!("Branch") unless @branch
+ desc 'Get a single branch' do
+ success Entities::RepoBranch
+ end
+ params do
+ requires :branch, type: String, regexp: /.+/, desc: 'The name of the branch'
+ end
+ get ':id/repository/branches/:branch' do
+ branch = user_project.repository.find_branch(params[:branch])
+ not_found!("Branch") unless branch
- present @branch, with: Entities::RepoBranch, project: user_project
+ present branch, with: Entities::RepoBranch, project: user_project
end
- # Protect a single branch
- #
# Note: The internal data model moved from `developers_can_{merge,push}` to `allowed_to_{merge,push}`
# in `gitlab-org/gitlab-ce!5081`. The API interface has not been changed (to maintain compatibility),
# but it works with the changed data model to infer `developers_can_merge` and `developers_can_push`.
- #
- # Parameters:
- # id (required) - The ID of a project
- # branch (required) - The name of the branch
- # developers_can_push (optional) - Flag if developers can push to that branch
- # developers_can_merge (optional) - Flag if developers can merge to that branch
- # Example Request:
- # PUT /projects/:id/repository/branches/:branch/protect
- put ':id/repository/branches/:branch/protect',
- requirements: { branch: /.+/ } do
+ desc 'Protect a single branch' do
+ success Entities::RepoBranch
+ end
+ params do
+ requires :branch, type: String, regexp: /.+/, desc: 'The name of the branch'
+ optional :developers_can_push, type: Boolean, desc: 'Flag if developers can push to that branch'
+ optional :developers_can_merge, type: Boolean, desc: 'Flag if developers can merge to that branch'
+ end
+ put ':id/repository/branches/:branch/protect' do
authorize_admin_project
- @branch = user_project.repository.find_branch(params[:branch])
- not_found!('Branch') unless @branch
- protected_branch = user_project.protected_branches.find_by(name: @branch.name)
+ branch = user_project.repository.find_branch(params[:branch])
+ not_found!('Branch') unless branch
+
+ protected_branch = user_project.protected_branches.find_by(name: branch.name)
protected_branch_params = {
- name: @branch.name,
- developers_can_push: to_boolean(params[:developers_can_push]),
- developers_can_merge: to_boolean(params[:developers_can_merge])
+ name: branch.name,
+ developers_can_push: params[:developers_can_push],
+ developers_can_merge: params[:developers_can_merge]
}
service_args = [user_project, current_user, protected_branch_params]
@@ -69,39 +66,36 @@ module API
end
if protected_branch.valid?
- present @branch, with: Entities::RepoBranch, project: user_project
+ present branch, with: Entities::RepoBranch, project: user_project
else
render_api_error!(protected_branch.errors.full_messages, 422)
end
end
- # Unprotect a single branch
- #
- # Parameters:
- # id (required) - The ID of a project
- # branch (required) - The name of the branch
- # Example Request:
- # PUT /projects/:id/repository/branches/:branch/unprotect
- put ':id/repository/branches/:branch/unprotect',
- requirements: { branch: /.+/ } do
+ desc 'Unprotect a single branch' do
+ success Entities::RepoBranch
+ end
+ params do
+ requires :branch, type: String, regexp: /.+/, desc: 'The name of the branch'
+ end
+ put ':id/repository/branches/:branch/unprotect' do
authorize_admin_project
- @branch = user_project.repository.find_branch(params[:branch])
- not_found!("Branch") unless @branch
- protected_branch = user_project.protected_branches.find_by(name: @branch.name)
+ branch = user_project.repository.find_branch(params[:branch])
+ not_found!("Branch") unless branch
+ protected_branch = user_project.protected_branches.find_by(name: branch.name)
protected_branch.destroy if protected_branch
- present @branch, with: Entities::RepoBranch, project: user_project
+ present branch, with: Entities::RepoBranch, project: user_project
end
- # Create branch
- #
- # Parameters:
- # id (required) - The ID of a project
- # branch_name (required) - The name of the branch
- # ref (required) - Create branch from commit sha or existing branch
- # Example Request:
- # POST /projects/:id/repository/branches
+ desc 'Create branch' do
+ success Entities::RepoBranch
+ end
+ params do
+ requires :branch_name, type: String, desc: 'The name of the branch'
+ requires :ref, type: String, desc: 'Create branch from commit sha or existing branch'
+ end
post ":id/repository/branches" do
authorize_push_project
result = CreateBranchService.new(user_project, current_user).
@@ -116,16 +110,13 @@ module API
end
end
- # Delete branch
- #
- # Parameters:
- # id (required) - The ID of a project
- # branch (required) - The name of the branch
- # Example Request:
- # DELETE /projects/:id/repository/branches/:branch
- delete ":id/repository/branches/:branch",
- requirements: { branch: /.+/ } do
+ desc 'Delete a branch'
+ params do
+ requires :branch, type: String, regexp: /.+/, desc: 'The name of the branch'
+ end
+ delete ":id/repository/branches/:branch" do
authorize_push_project
+
result = DeleteBranchService.new(user_project, current_user).
execute(params[:branch])
diff --git a/spec/features/projects/features_visibility_spec.rb b/spec/features/projects/features_visibility_spec.rb
index 1d4484a9edd..d25cf7fb353 100644
--- a/spec/features/projects/features_visibility_spec.rb
+++ b/spec/features/projects/features_visibility_spec.rb
@@ -41,6 +41,22 @@ describe 'Edit Project Settings', feature: true do
end
end
end
+
+ context "pipelines subtabs" do
+ it "shows builds when enabled" do
+ visit namespace_project_pipelines_path(project.namespace, project)
+
+ expect(page).to have_selector(".shortcuts-builds")
+ end
+
+ it "hides builds when disabled" do
+ allow(Ability).to receive(:allowed?).with(member, :read_builds, project).and_return(false)
+
+ visit namespace_project_pipelines_path(project.namespace, project)
+
+ expect(page).not_to have_selector(".shortcuts-builds")
+ end
+ end
end
describe 'project features visibility pages' do
diff --git a/spec/requests/api/branches_spec.rb b/spec/requests/api/branches_spec.rb
index 905f762d578..1711096f4bd 100644
--- a/spec/requests/api/branches_spec.rb
+++ b/spec/requests/api/branches_spec.rb
@@ -95,18 +95,6 @@ describe API::API, api: true do
expect(json_response['developers_can_push']).to eq(true)
expect(json_response['developers_can_merge']).to eq(true)
end
-
- it 'protects a single branch and developers cannot push and merge' do
- put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
- developers_can_push: 'tru', developers_can_merge: 'tr'
-
- expect(response).to have_http_status(200)
- expect(json_response['name']).to eq(branch_name)
- expect(json_response['commit']['id']).to eq(branch_sha)
- expect(json_response['protected']).to eq(true)
- expect(json_response['developers_can_push']).to eq(false)
- expect(json_response['developers_can_merge']).to eq(false)
- end
end
context 'for an existing protected branch' do
diff --git a/spec/views/projects/commit/_commit_box.html.haml_spec.rb b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
new file mode 100644
index 00000000000..16bf0698c4b
--- /dev/null
+++ b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
@@ -0,0 +1,28 @@
+require 'spec_helper'
+
+describe 'projects/commit/_commit_box.html.haml' do
+ include Devise::Test::ControllerHelpers
+
+ let(:project) { create(:project) }
+
+ before do
+ assign(:project, project)
+ assign(:commit, project.commit)
+ end
+
+ it 'shows the commit SHA' do
+ render
+
+ expect(rendered).to have_text("Commit #{Commit.truncate_sha(project.commit.sha)}")
+ end
+
+ it 'shows the last pipeline that ran for the commit' do
+ create(:ci_pipeline, project: project, sha: project.commit.id, status: 'success')
+ create(:ci_pipeline, project: project, sha: project.commit.id, status: 'canceled')
+ third_pipeline = create(:ci_pipeline, project: project, sha: project.commit.id, status: 'failed')
+
+ render
+
+ expect(rendered).to have_text("Pipeline ##{third_pipeline.id} for #{Commit.truncate_sha(project.commit.sha)} failed")
+ end
+end