Commit Graph
69 Commits
Author SHA1 Message Date
Stan Hu 2ce7559d70 Fix repository cache invalidation issue when project is recreated with an empty repo
To reproduce:

1. Create a project with some content
2. Rename the project
3. Create a new project with the same name.
4. Boom - 404.

After step 2, the branch and tag counts were not being cleared. This would
cause `repository.has_visible_content?` to erroneously return `true`
for the newly-created project.

Closes #13384
2016-04-13 00:04:17 -07:00
Stan Hu 27b9f64efb Expire caches after project creation to ensure a consistent state
Closes #14961
2016-04-07 00:29:01 -07:00
Douglas Barbosa Alexandre f2005fa566 Flush repository cache before import project data
GitHub Pull Requests importer handle with the repository while
importing data, we need to make sure that the cached values are valid.
2016-04-04 19:35:39 -03:00
Rubén Dávila e6b5716785 Migrate Repository#local_branches from gitlab-ee.
This will help us to avoid posible merge conflicts when merging
gitlab-ce to gitlab-ee
2016-04-01 14:21:08 -05:00
Stan Hu 2e328c1ea7 Expire the exists cache before deletion to ensure project dir actually exists
Closes #14659
2016-03-27 08:52:44 -07:00
Stan Hu c1834664a7 Merge branch 'handle-avatar-in-empty-repo' into 'master'
Don't attempt to look up an avatar in repo if repo directory does not exist

Relates to https://sentry.gitlap.com/gitlab/gitlabcom/issues/3507/

Closes #14580



See merge request !3390
2016-03-27 00:21:57 +00:00
Stan Hu 506878970b Don't attempt to look up an avatar in repo if repo directory does not exist
Closes #14580
2016-03-25 06:30:51 -07:00
Dmitriy Zaporozhets 9e7e2c6b9d Small refactoring and rewording
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
2016-03-25 13:18:55 +01:00
Dmitriy Zaporozhets b105b84e3a Use head tree (cached) for file search. Also add some tests
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
2016-03-24 15:38:16 +01:00
Yorick Peterse 68a4c98f50 Cache output of Repository#exists?
This caches the output of Repository#exists? in Redis while making sure
it's flushed properly when creating new repositories, deleting them,
etc.

For the ProjectWiki tests to work I had to make ProjectWiki#create_repo!
public as testing private methods in RSpec is a bit of a pain.
2016-03-19 21:54:08 +01:00
Yorick Peterse dd4b789765 Added tests for Repository#build_cache 2016-03-17 21:45:43 +01:00
Yorick Peterse cd05d3f78d Cache project avatars stored in Git
The avatar logic has been moved from Project to Repository as this makes
caching easier. The logic itself in turn has been changed so that the
logo file names are cached in Redis. This cache is flushed upon pushing
a commit but _only_ if:

1. The commit was pushed to the default branch
2. The commit actually changes any of the logo files

If no branch or commit is given the cache is flushed anyway, this
ensures that calling Repository#expire_cache without any arguments still
flushes the avatar cache (e.g. this is used when removing a project).

Fixes gitlab-org/gitlab-ce#14363
2016-03-17 18:51:54 +01:00
Hiroyuki Sato f0b052e168 Fix wiki search results point to raw source 2016-03-17 08:58:52 +09:00
Yorick Peterse 590e1b4b21 Call after_create_branch in Repository#add_branch
This ensures the right caches are flushed when adding a branch via the
UI, instead of only flushing this one random cache.
2016-03-08 18:19:40 +01:00
Yorick Peterse 4ec035b488 Call the right hooks in Repository#add_tag
This ensures Repository#add_tag calls Repository#before_push_tag instead
of just 1 random cache expiration method.
2016-03-08 18:19:40 +01:00
Yorick Peterse 6857b92fab Added specs for Repository#rm_tag 2016-03-08 18:19:40 +01:00
Yorick Peterse 177025b5dd Call the right hooks when removing branches
This ensures that Repository#rm_branch calls
before_remove_branch/after_remove_branch instead of just 1 random cache
expiration method.
2016-03-08 18:19:40 +01:00
Yorick Peterse cb5a5ba095 Cache & flush tag/branch counts
The methods used for this are Repository#tag_count and
Repository#branch_count which cache their output in Redis as well as
memoizing it in an instance variable. Both methods have a corresponding
methods/hooks to flush the caches at the right time.
2016-03-08 18:19:40 +01:00
tiagonbotelhoandYorick Peterse 4b3f3167a4 implements test to simulate empty repo 2016-03-07 21:59:39 +01:00
tiagonbotelhoandYorick Peterse d72e6ad2a1 adds tests and fixes some broken code to main language mr 2016-03-07 21:59:39 +01:00
Rubén Dávila d9e0191592 Add some specs for Repository#revert. 2016-03-01 19:16:27 -05:00
Yorick Peterse a10678e7eb Added specs for the various Repository hooks 2016-02-25 12:56:04 +01:00
Yorick Peterse e0cb3212ed Flush emptiness caches whenever needed
This ensures that the emptiness cache (used for Repository#empty? and
Repository#has_visible_content?) is flushed after comitting changes
(using the web editor, API or Git) for new repositories. Once a
repository is no longer empty there's no need to explicitly flush the
cache for Repository#empty?. The cache for
Repository#has_visible_content? in turn is already flushed whenever
needed.

Fixes gitlab-org/gitlab-ce#13387
2016-02-20 20:17:50 +01:00
Rubén DávilaandRobert Speicher b8295fc323 Fix build and add specs 2016-02-19 13:14:53 -05:00
Rubén DávilaandRobert Speicher b6fe51b901 Some updates from last code review. 2016-02-19 13:14:50 -05:00
Rubén DávilaandRobert Speicher df5f362c34 Add some specs plus some refactor. 2016-02-19 13:14:50 -05:00
Yorick Peterse 5b6d347fcd Handle raw_repository returning nil in exists?
If path_with_namespace is nil Repository#raw_repository will also return
nil. Apparently code out there creates a Repository instance without a
namespace path. Right.
2016-02-18 14:19:35 +01:00
Yorick Peterse 8a7aad770c Added specs for Repository#exists? 2016-02-18 12:28:47 +01:00
Yorick Peterse c475b17111 Only set autocrlf when creating/updating files
Setting the "autocrlf" Git option is an overkill since it's rarely
actually needed. More importantly, it has quite the impact on
performance (see gitlab-org/gitlab-ce#13457 for more information).

By setting "autocrlf" when creating or updating files we guarantee the
option is always set properly when we actually need it _without_
introducing overhead for requests that have nothing to do with this
option.

Fixes gitlab-org/gitlab-ce#13457
2016-02-18 11:46:05 +01:00
Yorick Peterse a9e0301c23 Expire caches after forking/importing a repository
This ensures the caches for Repository#empty? and
Repository#has_visible_content? are flushed after a repository has been
imported or forked.

Fixes gitlab-org/gitlab-ce#13505
2016-02-17 11:38:18 +01:00
Robert Speicher 51998fddca Merge branch 'cwq1913/gitlab-ce-fix_skip_merge_commits' into 'master'
Actually use the `skip_merges` option in Repository#commits

Originally opened at !2067 by @cwq1913.

See merge request !2750
2016-02-10 19:01:44 +00:00
Yorick Peterse 2ce0d06389 Smarter flushing of branch statistics caches
Instead of flushing the behind/ahead counts for all branches upon every
push we now only flush the cache of branches that actually need to have
these statistics recalculated. There are now basically 2 scenarios and
their effects:

1. A user pushes a commit to the default branch, this results in the
   cache being flushed for all branches.
2. A user pushes to a non default branch, this results in _only_ the
   cache for that branch being flushed.

The existing code (Repository#expire_cache) remains backwards compatible
with the previous behaviour, the new behaviour is only applied when a
branch name is passed as an argument. This ensures that when for example
a project is deleted the cache for all branches is flushed.
2016-02-09 17:17:56 +01:00
Yorick Peterse 9a99d8e49d Cache various Repository Git operations
This caches the output of the following methods:

* Repository#empty?
* Repository#has_visible_content?
* Repository#root_ref

The cache for Repository#has_visible_content? is flushed whenever a
commit is pushed to a new branch or an existing branch is removed.
The cache for Repository#root_ref is only flushed whenever a user
changes the default branch of a project. The cache for Repository#empty?
is never explicitly flushed as there's no need for it.
2016-02-08 15:40:19 +01:00
Tony ChuandRémy Coutable b62cdc3c47 Actually use the skip_merges option in Repository#commits 2016-02-08 12:15:42 +01:00
Yorick Peterse 0689663487 Use branch_count in Repository#has_visible_content?
Gitlab::Git::Repository#branch_count is a tad faster than the previous
setup. See gitlab-org/gitlab_git!62 for more information.
2016-01-21 18:19:18 +01:00
Zeger-Jan van de Weg 82d2e5c3c5 Merge branch 'master' into copying-file-seen-as-licence 2015-12-10 16:27:26 +01:00
Zeger-Jan van de Weg 5fd280f3d3 Licence also accepted as license file 2015-12-10 16:26:25 +01:00
Douwe Maan 1e8d703a85 Tag model specs 2015-12-09 10:50:51 +01:00
Rubén Dávila 338eb2c41e Call update hook from new GitHooksService class. #3069 2015-12-03 09:39:15 -05:00
Rubén Dávila 5145706c82 Run custom Git hooks when creating or deleting branches through the UI. #1156 2015-12-03 09:39:15 -05:00
Zeger-Jan van de Weg 7e4a7d9ecc Merge branch 'master' into copying-file-seen-as-licence 2015-11-11 13:07:02 +01:00
Dmitriy Zaporozhets 810c91fe35 Refactor search by commits message
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
2015-11-02 16:39:24 +01:00
Michael Chmielewski a0d0a01791 Actually converted code to following suggestions. 2015-10-28 22:34:39 -04:00
Michael Chmielewski 7b62791afc Fixed method to use git log via Popen as recommended, and made output match test (and thus system) expectations. 2015-10-28 22:34:39 -04:00
Michael Chmielewski b1f4aaa5e7 Trying to incorporate suggestions from comments on Merge Request 1661 2015-10-28 22:34:39 -04:00
Michael Chmielewski 8e8fb87d40 Trailing new lines at ends of files are important. 2015-10-28 22:34:39 -04:00
Mike Chmielewski 091aa95dbf Make subject of spec line up on one line to satisfy rubocop requirements 2015-10-28 22:34:39 -04:00
Jonathan SchoefflingandMichael Chmielewski 5a5069969c Add support for searching commit log messages
Include the log messages of recent commits in project-level search
results, providing functionality similar to 'git log --grep'.

Update repository model rspec tests to validate the output of
Repository#commits_with_log_matching.
2015-10-28 22:34:39 -04:00
Zeger-Jan van de WegandZeger-Jan van de Weg 3f08e4b186 Add specs on #license 2015-10-15 21:50:15 +02:00
Dmitriy Zaporozhets 4a0fa27017 Merge branch 'master' into remove-satellites
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
2015-08-17 11:41:53 +02:00