summaryrefslogtreecommitdiff
path: root/app/models/repository.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/repository.rb')
-rw-r--r--app/models/repository.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 11ecb281a55..e3ad33a896a 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -203,6 +203,26 @@ class Repository
branch_names.include?(branch_name)
end
+ def ref_exists?(ref)
+ rugged.references.exist?(ref)
+ end
+
+ def keep_around(sha)
+ return unless sha && commit(sha)
+
+ return if kept_around?(sha)
+
+ rugged.references.create(keep_around_ref_name(sha), sha)
+ end
+
+ def kept_around?(sha)
+ ref_exists?(keep_around_ref_name(sha))
+ end
+
+ def keep_around_ref_name(sha)
+ "refs/keep-around/#{sha}"
+ end
+
def tag_names
cache.fetch(:tag_names) { raw_repository.tag_names }
end