@@ -73,32 +73,8 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...git.CmdArg)
73
73
return db .ErrCancelledf ("before GC of %s" , repo .FullName ())
74
74
default :
75
75
}
76
- log .Trace ("Running git gc on %v" , repo )
77
- command := git .NewCommand (ctx , args ... ).
78
- SetDescription (fmt .Sprintf ("Repository Garbage Collection: %s" , repo .FullName ()))
79
- var stdout string
80
- var err error
81
- stdout , _ , err = command .RunStdString (& git.RunOpts {Timeout : timeout , Dir : repo .RepoPath ()})
82
-
83
- if err != nil {
84
- log .Error ("Repository garbage collection failed for %v. Stdout: %s\n Error: %v" , repo , stdout , err )
85
- desc := fmt .Sprintf ("Repository garbage collection failed for %s. Stdout: %s\n Error: %v" , repo .RepoPath (), stdout , err )
86
- if err = system_model .CreateRepositoryNotice (desc ); err != nil {
87
- log .Error ("CreateRepositoryNotice: %v" , err )
88
- }
89
- return fmt .Errorf ("Repository garbage collection failed in repo: %s: Error: %w" , repo .FullName (), err )
90
- }
91
-
92
- // Now update the size of the repository
93
- if err := repo_module .UpdateRepoSize (ctx , repo ); err != nil {
94
- log .Error ("Updating size as part of garbage collection failed for %v. Stdout: %s\n Error: %v" , repo , stdout , err )
95
- desc := fmt .Sprintf ("Updating size as part of garbage collection failed for %s. Stdout: %s\n Error: %v" , repo .RepoPath (), stdout , err )
96
- if err = system_model .CreateRepositoryNotice (desc ); err != nil {
97
- log .Error ("CreateRepositoryNotice: %v" , err )
98
- }
99
- return fmt .Errorf ("Updating size as part of garbage collection failed in repo: %s: Error: %w" , repo .FullName (), err )
100
- }
101
-
76
+ // we can ignore the error here because it will be logged in GitGCRepo
77
+ _ = GitGcRepo (ctx , repo , timeout , args )
102
78
return nil
103
79
},
104
80
); err != nil {
@@ -109,6 +85,37 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...git.CmdArg)
109
85
return nil
110
86
}
111
87
88
+ // GitGcRepo calls 'git gc' to remove unnecessary files and optimize the local repository
89
+ func GitGcRepo (ctx context.Context , repo * repo_model.Repository , timeout time.Duration , args []git.CmdArg ) error {
90
+ log .Trace ("Running git gc on %-v" , repo )
91
+ command := git .NewCommand (ctx , args ... ).
92
+ SetDescription (fmt .Sprintf ("Repository Garbage Collection: %s" , repo .FullName ()))
93
+ var stdout string
94
+ var err error
95
+ stdout , _ , err = command .RunStdString (& git.RunOpts {Timeout : timeout , Dir : repo .RepoPath ()})
96
+
97
+ if err != nil {
98
+ log .Error ("Repository garbage collection failed for %-v. Stdout: %s\n Error: %v" , repo , stdout , err )
99
+ desc := fmt .Sprintf ("Repository garbage collection failed for %s. Stdout: %s\n Error: %v" , repo .RepoPath (), stdout , err )
100
+ if err := system_model .CreateRepositoryNotice (desc ); err != nil {
101
+ log .Error ("CreateRepositoryNotice: %v" , err )
102
+ }
103
+ return fmt .Errorf ("Repository garbage collection failed in repo: %s: Error: %w" , repo .FullName (), err )
104
+ }
105
+
106
+ // Now update the size of the repository
107
+ if err := repo_module .UpdateRepoSize (ctx , repo ); err != nil {
108
+ log .Error ("Updating size as part of garbage collection failed for %-v. Stdout: %s\n Error: %v" , repo , stdout , err )
109
+ desc := fmt .Sprintf ("Updating size as part of garbage collection failed for %s. Stdout: %s\n Error: %v" , repo .RepoPath (), stdout , err )
110
+ if err := system_model .CreateRepositoryNotice (desc ); err != nil {
111
+ log .Error ("CreateRepositoryNotice: %v" , err )
112
+ }
113
+ return fmt .Errorf ("Updating size as part of garbage collection failed in repo: %s: Error: %w" , repo .FullName (), err )
114
+ }
115
+
116
+ return nil
117
+ }
118
+
112
119
func gatherMissingRepoRecords (ctx context.Context ) ([]* repo_model.Repository , error ) {
113
120
repos := make ([]* repo_model.Repository , 0 , 10 )
114
121
if err := db .Iterate (
@@ -162,7 +169,7 @@ func DeleteMissingRepositories(ctx context.Context, doer *user_model.User) error
162
169
}
163
170
log .Trace ("Deleting %d/%d..." , repo .OwnerID , repo .ID )
164
171
if err := models .DeleteRepository (doer , repo .OwnerID , repo .ID ); err != nil {
165
- log .Error ("Failed to DeleteRepository %s [%d] : Error: %v" , repo . FullName (), repo . ID , err )
172
+ log .Error ("Failed to DeleteRepository %-v : Error: %v" , repo , err )
166
173
if err2 := system_model .CreateRepositoryNotice ("Failed to DeleteRepository %s [%d]: Error: %v" , repo .FullName (), repo .ID , err ); err2 != nil {
167
174
log .Error ("CreateRepositoryNotice: %v" , err )
168
175
}
0 commit comments