@@ -73,32 +73,8 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...git.CmdArg)
7373 return db .ErrCancelledf ("before GC of %s" , repo .FullName ())
7474 default :
7575 }
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 )
10278 return nil
10379 },
10480 ); err != nil {
@@ -109,6 +85,37 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...git.CmdArg)
10985 return nil
11086}
11187
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+
112119func gatherMissingRepoRecords (ctx context.Context ) ([]* repo_model.Repository , error ) {
113120 repos := make ([]* repo_model.Repository , 0 , 10 )
114121 if err := db .Iterate (
@@ -162,7 +169,7 @@ func DeleteMissingRepositories(ctx context.Context, doer *user_model.User) error
162169 }
163170 log .Trace ("Deleting %d/%d..." , repo .OwnerID , repo .ID )
164171 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 )
166173 if err2 := system_model .CreateRepositoryNotice ("Failed to DeleteRepository %s [%d]: Error: %v" , repo .FullName (), repo .ID , err ); err2 != nil {
167174 log .Error ("CreateRepositoryNotice: %v" , err )
168175 }
0 commit comments