Commit Graph
2373 Commits
Author SHA1 Message Date
Robert Speicher 31a34b5917 Merge branch 'ci-artifacts-path' into 'master'
Expose artifacts path

This fixes broken artifacts storage path.

Fixes #3607 
Fixes #3608

Related: gitlab-org/omnibus-gitlab!544

See merge request !1869
2015-11-23 22:19:13 +00:00
Robert Speicher 2d77a21d59 Merge branch 'ci-fix-500' into 'master'
Fix 500 when using CI

- Fix for Ci::Build state machine, allowing to process builds without the project
- Forcefully update builds that didn't want to update with state machine
- Fix saving GitLabCiService as Admin Template

Fixes #3556 

See merge request !1873
2015-11-23 21:51:51 +00:00
Douwe Maan 761bf63810 Merge branch 'issue_2296' into 'master'
Generate system note after Task item has been updated on Issue or Merge Request.

Reference: #2296 

Everytime the User check or uncheck a Task Item from the Issue or
Merge Request description, a new update is going to be
added to the activity logs of the Issue or Merge Request.

Note that when using the edit form, you can only update the Task item
status or add/delete/modify existing ones. Doing both actions is not
fully supported.

See merge request !1848
2015-11-23 13:09:34 +00:00
Kamil Trzcinski 57e974c03b Fix 500 when using CI
- Fix for Ci::Build state machine, allowing to process builds without the project
- Forcefully update builds that didn't want to update with state machine
- Fix saving GitLabCiService as Admin Template
2015-11-23 13:51:41 +01:00
Kamil Trzcinski 11728b50f9 Expose artifacts path 2015-11-23 13:05:22 +01:00
Robert Schilling 26b12e2c37 Add upvote/downvote fields to merge request and note API to preserve compatibility 2015-11-21 21:36:31 +01:00
Yorick Peterse d496a6b919 Handle removed source projects in MR CI commits
When calling MergeRequest#ci_commit the code would previously raise an
error if the source project no longer existed (e.g. because the user
removed their fork).

See #3599 for more information.
2015-11-20 23:43:10 +01:00
Rubén Dávila 3aabed3456 Fix bug that happened when replacing the Task list. #2296
REF: https://gitlab.com/gitlab-org/gitlab-ce/issues/2296#note_2724697
2015-11-20 13:58:45 -05:00
Stan Hu ad1f451f24 Fix Drone web hook URL not being updated 2015-11-20 08:13:25 -08:00
Rubén Dávila fa9f2dec0e Monkey patching TaskList::Item is no longer required. #2296 2015-11-20 10:49:12 -05:00
Ruben DavilaandRubén Dávila 97afb84b31 Generate system note after Task item has been updated on Issue or Merge Request. #2296
Everytime the User check or uncheck a Task Item from the Issue or
Merge Request description, a new update is going to be
added to the activity logs of the Issue or Merge Request.

Note that when using the edit form, you can only update the Task item
status or add/delete/modify existing ones. Doing both actions is not
fully supported.
2015-11-19 21:05:44 -05:00
Kamil Trzciński 0383f84d88 Merge branch 'ci-yaml-validation' into 'master'
Commits without .gitlab-ci.yml are marked as skipped

- Commits without .gitlab-ci.yml are marked as skipped
- Save detailed error when YAML syntax

This also fixes: #3521 #3546 

/cc @jacobvosmaer 


See merge request !1827
2015-11-19 22:57:06 +00:00
Dmitriy Zaporozhets 68d4ab2381 Merge branch 'emoji_votes' into 'master'
Award Emoji

This it first iteration of award emoji feature.
We have plan to extend emoji picker by the next release.

For now, you can add award by clicking to the emoji picker or posting a regular comment with emoji like "👍" and any other. You can post not only emoji that listed in the emoji picker.

See merge request !1825
2015-11-19 21:34:38 +00:00
Dmitriy Zaporozhets e1780825ee Merge branch 'finding-issues-by-labels-performance' into 'master'
Improve performance of finding issues with/without labels

The changes in this MR ultimately lead to finding issues with(out) labels being about 2x faster due to:

1. Newly added indexes on `issues.state` and `projects.visibility_level`
2. Adjusting the query so that finding issues for multiple projects is more efficient

See merge request !1787
2015-11-19 19:35:38 +00:00
Kamil Trzcinski 8248314bc9 Don't rescue Exception, but StandardError 2015-11-19 20:17:17 +01:00
Robert Speicher 56476f1847 Merge branch 'dbalexandre/gitlab-ce-fix-personal-snippet-access-workflow' into 'master'
Improve personal snippet access workflow.

Replaces !1709

Fixes #3258

See merge request !1817
2015-11-19 17:22:20 +00:00
Valery Sizov bdf4007cb7 adressing comments 2015-11-19 18:12:17 +02:00
Valery Sizov 23c5473cc0 added spinach tests 2015-11-19 13:20:09 +02:00
Kamil Trzcinski 0df7a32ea5 Fix tests 2015-11-19 12:09:34 +01:00
Kamil Trzcinski 2b907f61ff Commits without .gitlab-ci.yml are marked as skipped
- Save detailed error when YAML syntax
2015-11-19 12:09:34 +01:00
Yorick Peterse 8591cc02be Use a JOIN in IssuableFinder#by_project
When using IssuableFinder/IssuesFinder to find issues for multiple
projects it's more efficient to use a JOIN + a "WHERE project_id IN"
condition opposed to running a sub-query.

This change means that when finding issues without labels we're now
using the following SQL:

    SELECT issues.*
    FROM issues
    JOIN projects ON projects.id = issues.project_id

    LEFT JOIN label_links ON label_links.target_type = 'Issue'
                          AND label_links.target_id  = issues.id

    WHERE (
        projects.id IN (...)
        OR projects.visibility_level IN (20, 10)
    )
    AND issues.state IN ('opened','reopened')
    AND label_links.id IS NULL
    ORDER BY issues.id DESC;

instead of:

    SELECT issues.*
    FROM issues
    LEFT JOIN label_links ON label_links.target_type = 'Issue'
                          AND label_links.target_id  = issues.id

    WHERE issues.project_id IN (
        SELECT id
        FROM projects
        WHERE id IN (...)
        OR visibility_level IN (20,10)
    )
    AND issues.state IN ('opened','reopened')
    AND label_links.id IS NULL
    ORDER BY issues.id DESC;

The big benefit here is that in the last case PostgreSQL can't properly
use all available indexes. In particular it ends up performing a
sequence scan on the "label_links" table (processing around 290 000
rows). The new query is roughly 2x as fast as the old query.
2015-11-19 11:58:05 +01:00
Yorick Peterse a42d469ab2 Merge branch 'atom-feed-latest-update' into 'master'
Improve performance of user profiles, finding groups, and finding projects

This MR improves the following:

* Rendering of profile pages and Atom feeds
* Finding groups (using GroupsFinder & friends)
* Finding projects (using ProjectsFinder & friends)

Initially this MR was intended to only improve rendering of Atom feeds, but over time other fixes were introduced as well as the same code was the cause of all these problems.

See merge request !1790
2015-11-19 10:05:53 +00:00
Valery Sizov fdd5a8f2e1 addressing comments 2015-11-19 01:26:00 +02:00
Valery Sizov fd2c0fe446 award emoji 2015-11-19 01:25:27 +02:00
Yorick Peterse efd5d93745 Use "GitLab.com" instead of "gitlab.com" 2015-11-18 20:20:55 +01:00
Yorick Peterse 26482bddb0 Don't pluck project IDs in User#owned_projects
This won't work efficiently if you happen to have a lot of projects.
2015-11-18 13:12:44 +01:00
Yorick Peterse 73f302edf9 Apply CI scope changes to the User model
These changes are based on those from commit
03f5ff750b, except they use a UNION
instead of plucking IDs into memory.
2015-11-18 13:05:45 +01:00
Yorick Peterse e116a356b8 Refactor User#authorized_groups/projects
These methods no longer include public groups/projects (that don't
belong to the actual user) as this is handled by the various finder
classes now. This also removes the need for passing extra arguments.

Note that memoizing was removed _explicitly_. For whatever reason doing
so messes up the users controller to a point where it claims a certain
user does _not_ have access to certain groups/projects when it does have
access. Existing code shouldn't be affected as these methods are only
called in ways that they'd run queries anyway (e.g. a combination of
"any?" and "each" which would run 2 queries regardless of memoizing).
2015-11-18 13:05:45 +01:00
Yorick Peterse a4fc8112df Added Project.visible_to_user
This method can be used to filter projects to those visible to a given
user.
2015-11-18 13:05:45 +01:00
Yorick Peterse a74d6d2043 Group methods for filtering public/visible groups
These methods will be used to get a list of groups, optionally
restricted to only those visible to a given user.
2015-11-18 13:05:45 +01:00
Yorick Peterse 01620dd7e7 Added Event.limit_recent
This will be used to move some querying logic from the users controller
to the Event model (where it belongs).
2015-11-18 13:05:45 +01:00
Yorick Peterse 5fcd9986b8 Refactor getting user groups/projects/contributions
This new setup no longer loads any IDs into memory using "pluck",
instead using SQL UNIONs to merge the various datasets together. This
results in greatly improved query performance as well as a reduction of
memory usage.

The old setup was in particular problematic when requesting the
authorized projects _including_ public/internal projects as this would
result in roughly 65000 project IDs being loaded into memory. These IDs
would in turn be passed to other queries.
2015-11-18 13:05:45 +01:00
Yorick Peterse bfd9855a2b Prefix table names for User UNIONs 2015-11-18 13:05:45 +01:00
Yorick Peterse 189c40c33d Use SQL::Union for User#authorized_groups
This removes the need for plucking any IDs into Ruby.
2015-11-18 13:05:45 +01:00
Yorick Peterse 656d9ff69b Make it easier to re-apply default sort orders
By moving the default sort order into a separate scope (and calling this
from the default scope) we can more easily re-apply a default order
without having to specify the exact column/ordering all over the place.
2015-11-18 13:05:45 +01:00
Yorick Peterse 028bd227fb Use SQL::Union for User#authorized_projects
This allows retrieving of the list of authorized projects using a single
query, without having to load any IDs into Ruby. This in turn also means
we can remove the method User#authorized_projects_id.
2015-11-18 13:05:45 +01:00
Yorick Peterse 054f2f98ed Faster way of obtaining latest event update time
Instead of using MAX(events.updated_at) we can simply sort the events in
descending order by the "id" column and grab the first row. In other
words, instead of this:

    SELECT max(events.updated_at) AS max_id
    FROM events
    LEFT OUTER JOIN projects   ON projects.id   = events.project_id
    LEFT OUTER JOIN namespaces ON namespaces.id = projects.namespace_id
    WHERE events.author_id IS NOT NULL
    AND events.project_id IN (13083);

we can use this:

    SELECT events.updated_at AS max_id
    FROM events
    LEFT OUTER JOIN projects   ON projects.id   = events.project_id
    LEFT OUTER JOIN namespaces ON namespaces.id = projects.namespace_id
    WHERE events.author_id IS NOT NULL
    AND events.project_id IN (13083)
    ORDER BY events.id DESC
    LIMIT 1;

This has the benefit that on PostgreSQL a backwards index scan can be
used, which due to the "LIMIT 1" will at most process only a single row.
This in turn greatly speeds up the process of grabbing the latest update
time. This can be confirmed by looking at the query plans. The first
query produces the following plan:

    Aggregate  (cost=43779.84..43779.85 rows=1 width=12) (actual time=2142.462..2142.462 rows=1 loops=1)
      ->  Index Scan using index_events_on_project_id on events  (cost=0.43..43704.69 rows=30060 width=12) (actual time=0.033..2138.086 rows=32769 loops=1)
            Index Cond: (project_id = 13083)
            Filter: (author_id IS NOT NULL)
    Planning time: 1.248 ms
    Execution time: 2142.548 ms

The second query in turn produces the following plan:

    Limit  (cost=0.43..41.65 rows=1 width=16) (actual time=1.394..1.394 rows=1 loops=1)
      ->  Index Scan Backward using events_pkey on events  (cost=0.43..1238907.96 rows=30060 width=16) (actual time=1.394..1.394 rows=1 loops=1)
            Filter: ((author_id IS NOT NULL) AND (project_id = 13083))
            Rows Removed by Filter: 2104
    Planning time: 0.166 ms
    Execution time: 1.408 ms

According to the above plans the 2nd query is around 1500 times faster.
However, re-running the first query produces timings of around 80 ms,
making the 2nd query "only" around 55 times faster.
2015-11-18 13:02:43 +01:00
Douwe Maan 8937c5ff7a Load raw repository lazily to recover from failed read 2015-11-18 12:02:09 +01:00
Douwe Maan b1f4d14f7d Clean up Repository cache code. 2015-11-18 12:02:08 +01:00
Douwe Maan 153085a93b Add Repository#is_ancestor? convenience method. 2015-11-18 12:02:08 +01:00
Douwe Maan 40470975e8 Add Project#safe_import_url helper. 2015-11-18 12:00:56 +01:00
Douwe Maan 841a7c6897 Store and show reason why import failed. 2015-11-18 12:00:56 +01:00
Robert Speicher 08dc38223e Rename not_auth_* ability methods to anonymous_* 2015-11-17 15:00:14 -05:00
Robert Speicher d431f3ec40 Merge branch 'james11/gitlab-ce-removable-group-owner' into 'master'
Prevent the last owner of a group from being able to delete themselves
by 'adding' themselves as a master

Replaces !1708.

Fixes #1111.

See merge request !1815
2015-11-17 18:23:27 +00:00
Dmitriy Zaporozhets 5098ad9d3c Merge branch 'remove-code-duplication'
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
2015-11-17 19:17:15 +01:00
Douwe Maan 756d61562b Minor refactoring 2015-11-17 16:24:02 +01:00
Douwe Maan 16438ad205 Merge branch 'master' into dbalexandre/gitlab-ce-fix-personal-snippet-access-workflow 2015-11-17 16:19:16 +01:00
Douwe Maan ecb83afabc Refactor ability changes 2015-11-17 15:49:37 +01:00
Douwe Maan e849b51cae Merge branch 'master' into james11/gitlab-ce-removable-group-owner 2015-11-17 15:40:54 +01:00
Dmitriy Zaporozhets 3cebe9e780 Refactor duplciate code for groups_controller.rb and slack_service/note_message.rb
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
2015-11-17 11:03:18 +01:00