Improve invalidation of stored service password if the endpoint URL is changed (V2)
New version of !1583, using the same failproof logic but this time mirroring the name and behaviour of the change-tracking methods of ActiveModel::Dirty in order to make it clearer and more natural.
Added more tests to clarify the expected behaviour.
This is an alternative to !1594
/cc @vsizov @rspeicher
See merge request !1600
Improve User.by_login performance
This greatly speeds up the performance of `User.by_login`. I adopted some changes from @haynes in this patch, the credits go to him for coming up with those originally.
Fixes#2341
See merge request !1545
Let gitlab-git-http-server handle archive downloads
This change relies on changes in gitlab_git and gitlab-git-http-server.
fixes#2429
See merge request !1548
Fix error preventing displaying of commit data for a directory with a leading dot
Directories with leading dots erroneously get rejected by the route controller if git
ref regex is used in constraints. This prevents commit data from being loaded. The regex verification is now done in controller.
Closes https://github.com/gitlabhq/gitlabhq/issues/8763
See merge request !1574
In these particular instances we can just use HAML tags directly. This
can shave off some time spent loading issue pages, though this depends
on the amount of comments being displayed.
When viewing https://gitlab.com/gitlab-org/gitlab-ce/issues/2164 locally
these changes reduce loading time by about 400 ms in total.
By comparing objects in Ruby we can greatly improve the performance of
this method. In the worst case (should no data be eager loaded) this
will run the same amount of queries as before, in the best case (when
data _is_ eager loadeD) it requires no queries at all.
The added benchmark used to produce around 273 iterations per second.
With this commit this has been increased to almost 40 000 iterations per
second: a speedup of roughly 145 times.
Combined with eager loading Note associations this results in about 30
queries less when viewing a single issue, this in turn cuts down the
loading time by 30-40%.
This ensures that when viewing an issue each note already has the
associated project, project members, group and group members available.
Since this information is requres for every note this results in quite
the reduction of SQL queries being executed.
This can be used to measure the time (roughly) spent on a per line
basis. This can also be used to measure timings for views, for example
by adding the following to a URL:
?lineprof=app/views/projects/notes/_note
rack-lineprof is only enabled when:
1. The application runs in development mode
2. The used Ruby is MRI
3. The environment variable ENABLE_LINEPROF is set to a non-empty value
This can be used to track down where queries originate from, regardless
of whether they're caused by N+1 problems or not. This can be enabled by
setting the environment variable ENABLE_QUERY_TRACE to a non-empty value
(e.g. "true").
This can be used to resolve N+1 query problems. Bullet is disabled by
default and can be enabled by starting Rails with the environment
variable ENABLE_BULLET set to a non empty value (e.g. "true").
Performance is improved in two steps:
1. On PostgreSQL an expression index is used for checking lower(email)
and lower(username).
2. The check to determine if we're searching for a username or Email is
moved to Ruby. Thanks to @haynes for suggesting and writing the
initial implementation of this.
Moving the check to Ruby makes this method an additional 1.5 times
faster compared to doing the check in the SQL query.
With performance being improved I've now also tweaked the amount of
iterations required by the User.by_login benchmark. This method now runs
between 900 and 1000 iterations per second.
Prevent a JS error in MergeRequestTabs
When `window.location.hash` is pointing to a note, e.g. `#note_1234`,
`scrollToElement` would throw an error because a selector such as
`.commits #note_1234` doesn't exist, so `offset()` returned `undefined`.
This error would prevent subsequent calls from running, which caused the
loading spinner to never be hidden.
Now we ensure the selector returns a valid element before trying to
scroll to it.
This is the proper fix for !1553.
See merge request !1597
When `window.location.hash` is pointing to a note, e.g. `#note_1234`,
`scrollToElement` would throw an error because a selector such as
`.commits #note_1234` doesn't exist, so `offset()` returned `undefined`.
This error would prevent subsequent calls from running, which caused the
loading spinner to never be hidden.
Now we ensure the selector returns a valid element before trying to
scroll to it.
Add a few predefined variables to CI builds
This adds CI_BUILD_TAG, CI_BUILD_STAGE, CI_BUILD_NAME and CI_BUILD_TRIGGERED to build environment.
This change is based on: !1530
See merge request !1572
Improve invalidation of stored service password if the endpoint URL is changed
A number of issues were found in !1490 and !1558 (triggered by support request 7395)
* It is not possible to set a new URL and a password at the same time (new password is ignored)
* An error occurs on the Service Templates admin pages (prop_updated? was referencing the service's project, which is not defined for templates)
* Passwords are reset on every save in Service Templates admin pages
This should fix these 3 issues by respectively:
* Differentiating a property that has been assigned a new value (regardless of the new value) and a property that has been assigned a new value that is different from the old one
* Providing an alternate implementation to detected updated properties, not relying on the service's project
* Filtering an empty password parameter passed to the Service Templates admin page like on the project service page
See merge request !1583