@@ -662,20 +662,20 @@ def self.update_repositories(*args)
662
662
args . each { |arg | flags . merge! ( arg ) if arg . is_a? ( Hash ) }
663
663
if flags [ :resync_all ]
664
664
logger . info "Executing RESYNC_ALL operation on gitolite configuration"
665
- projects = Project . active_or_archived . has_module ( :repository ) . find ( :all , :include => :repository )
665
+ projects = Project . active_or_archived . find ( :all , :include => :repository )
666
666
elsif flags [ :delete ]
667
667
# When delete, want to recompute users, so need to go through all projects
668
668
logger . info "Executing DELETE operation (resync keys, remove dead repositories)"
669
- projects = Project . active_or_archived . has_module ( :repository ) . find ( :all , :include => :repository )
669
+ projects = Project . active_or_archived . find ( :all , :include => :repository )
670
670
elsif flags [ :archive ]
671
671
# When archive, want to recompute users, so need to go through all projects
672
672
logger . info "Executing ARCHIVE operation (remove keys)"
673
- projects = Project . active_or_archived . has_module ( :repository ) . find ( :all , :include => :repository )
673
+ projects = Project . active_or_archived . find ( :all , :include => :repository )
674
674
elsif flags [ :descendants ]
675
675
if Project . method_defined? ( :self_and_descendants )
676
676
projects = ( args . flatten . select { |p | p . is_a? ( Project ) } ) . collect { |p | p . self_and_descendants } . flatten
677
677
else
678
- projects = Project . active_or_archived . has_module ( :repository ) . find ( :all , :include => :repository )
678
+ projects = Project . active_or_archived . find ( :all , :include => :repository )
679
679
end
680
680
else
681
681
projects = args . flatten . select { |p | p . is_a? ( Project ) }
@@ -719,7 +719,7 @@ def self.update_repositories(*args)
719
719
end
720
720
721
721
# Collect relevant users into hash with user as key and activity (in some active project) as value
722
- ( git_projects . select { |proj | proj . active? } . map { |proj | proj . member_principals . map ( &:user ) . compact } . flatten . uniq << GitolitePublicKey ::DEPLOY_PSEUDO_USER ) . each do |cur_user |
722
+ ( git_projects . select { |proj | proj . active? && proj . module_enabled? ( :repository ) } . map { |proj | proj . member_principals . map ( &:user ) . compact } . flatten . uniq << GitolitePublicKey ::DEPLOY_PSEUDO_USER ) . each do |cur_user |
723
723
if cur_user == GitolitePublicKey ::DEPLOY_PSEUDO_USER
724
724
active_keys = DeploymentCredential . active . select ( &:honored? ) . map ( &:gitolite_public_key ) . uniq
725
725
cur_token = cur_user
@@ -882,41 +882,47 @@ def self.update_repositories(*args)
882
882
883
883
# If this is an active (non-archived) project, then update gitolite entry. Add GIT_DAEMON_KEY.
884
884
if proj . active?
885
- # Get deployment keys (could be empty)
886
- write_user_keys = myrepo . deployment_credentials . active . select { |cred | cred . honored? && cred . allowed_to? ( :commit_access ) } . map { |x | x . gitolite_public_key . identifier }
887
- read_user_keys = myrepo . deployment_credentials . active . select { |cred | cred . honored? && cred . allowed_to? ( :view_changesets ) && !cred . allowed_to? ( :commit_access ) } . map { |x | x . gitolite_public_key . identifier }
888
-
889
- # fetch users
890
- users = proj . member_principals . map ( &:user ) . compact . uniq
891
- write_users = users . select { |user | user . allowed_to? ( :commit_access , proj ) }
892
- read_users = users . select { |user | user . allowed_to? ( :view_changesets , proj ) && !user . allowed_to? ( :commit_access , proj ) }
893
-
894
- read_users . map { |u | u . gitolite_public_keys . active . user_key } . flatten . compact . uniq . each do |key |
895
- read_user_keys . push key . identifier
896
- end
897
- write_users . map { |u | u . gitolite_public_keys . active . user_key } . flatten . compact . uniq . each do |key |
898
- write_user_keys . push key . identifier
899
- end
900
-
901
- #git daemon support
902
- if ( proj . repository . extra . git_daemon == 1 || proj . repository . extra . git_daemon == nil ) && proj . is_public
903
- read_user_keys . push GitoliteConfig ::GIT_DAEMON_KEY
904
- end
885
+ if proj . module_enabled? ( :repository )
886
+ # Get deployment keys (could be empty)
887
+ write_user_keys = myrepo . deployment_credentials . active . select { |cred | cred . honored? && cred . allowed_to? ( :commit_access ) } . map { |x | x . gitolite_public_key . identifier }
888
+ read_user_keys = myrepo . deployment_credentials . active . select { |cred | cred . honored? && cred . allowed_to? ( :view_changesets ) && !cred . allowed_to? ( :commit_access ) } . map { |x | x . gitolite_public_key . identifier }
889
+
890
+ # fetch users
891
+ users = proj . member_principals . map ( &:user ) . compact . uniq
892
+ write_users = users . select { |user | user . allowed_to? ( :commit_access , proj ) }
893
+ read_users = users . select { |user | user . allowed_to? ( :view_changesets , proj ) && !user . allowed_to? ( :commit_access , proj ) }
894
+
895
+ read_users . map { |u | u . gitolite_public_keys . active . user_key } . flatten . compact . uniq . each do |key |
896
+ read_user_keys . push key . identifier
897
+ end
898
+ write_users . map { |u | u . gitolite_public_keys . active . user_key } . flatten . compact . uniq . each do |key |
899
+ write_user_keys . push key . identifier
900
+ end
905
901
906
- # Remove previous redmine keys, then add new keys
907
- # By doing things this way, we leave non-redmine keys alone
908
- # Note -- delete_redmine_keys() will also remove the GIT_DAEMON_KEY for repos with redmine keys
909
- # (to be put back as above, when appropriate).
910
- conf . delete_redmine_keys repo_name
911
- conf . add_read_user repo_name , read_user_keys . uniq
912
- conf . add_write_user repo_name , write_user_keys . uniq
902
+ #git daemon support
903
+ if ( proj . repository . extra . git_daemon == 1 || proj . repository . extra . git_daemon == nil ) && proj . is_public
904
+ read_user_keys . push GitoliteConfig ::GIT_DAEMON_KEY
905
+ end
913
906
914
- # If no redmine keys, mark with dummy key
915
- if ( read_user_keys +write_user_keys ) . empty?
916
- conf . mark_with_dummy_key repo_name
907
+ # Remove previous redmine keys, then add new keys
908
+ # By doing things this way, we leave non-redmine keys alone
909
+ # Note -- delete_redmine_keys() will also remove the GIT_DAEMON_KEY for repos with redmine keys
910
+ # (to be put back as above, when appropriate).
911
+ conf . delete_redmine_keys repo_name
912
+ conf . add_read_user repo_name , read_user_keys . uniq
913
+ conf . add_write_user repo_name , write_user_keys . uniq
914
+
915
+ # If no redmine keys, mark with dummy key
916
+ if ( read_user_keys +write_user_keys ) . empty?
917
+ conf . mark_with_dummy_key repo_name
918
+ end
919
+ else
920
+ # Must be a project that has repositories disabled. Mark as disabled project.
921
+ conf . delete_redmine_keys repo_name
922
+ conf . mark_disabled repo_name
917
923
end
918
924
else
919
- # Must be an archived project! Clear out redmine keys. Mark as an archived project.
925
+ # Must be an archived project! Clear out redmine keys. Mark as an archived project.
920
926
conf . delete_redmine_keys repo_name
921
927
conf . mark_archived repo_name
922
928
end
@@ -938,20 +944,23 @@ def self.update_repositories(*args)
938
944
redmine_repos . delete_if { |basename , values | proj_ids . index ( basename ) }
939
945
end
940
946
redmine_repos . values . flatten . each do |repo_name |
941
- # First, delete redmine keys for this repository
947
+ # First, check if there are any redmine keys other than the DUMMY or ARCHIVED key
948
+ has_keys = conf . has_actual_redmine_keys? repo_name
949
+
950
+ # Next, delete redmine keys for this repository
942
951
conf . delete_redmine_keys repo_name
943
952
if ( Setting . plugin_redmine_git_hosting [ 'deleteGitRepositories' ] == "true" )
944
953
if conf . repo_has_no_keys? repo_name
945
954
logger . warn "Deleting #{ orphanString } entry '#{ repo_name } ' from #{ gitolite_conf } "
946
955
conf . delete_repo repo_name
947
956
GitoliteRecycle . move_repository_to_recycle repo_name
948
- else
957
+ elsif has_keys # Something changed when we deleted keys
949
958
logger . info "Deleting redmine keys from #{ orphanString } entry '#{ repo_name } ' in #{ gitolite_conf } "
950
959
if git_repository_exists? repo_name
951
960
logger . info " Not removing #{ repo_name } .git from gitolite repository, because non-redmine keys remain."
952
961
end
953
962
end
954
- else
963
+ elsif has_keys # Something changed when we deleted keys
955
964
logger . info "Deleting redmine keys from #{ orphanString } entry '#{ repo_name } ' in #{ gitolite_conf } "
956
965
end
957
966
end
0 commit comments