From f35ea2b09a0553ac7644eccdf8a96dd6f90c2982 Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Wed, 5 Jul 2023 00:22:37 +0800
Subject: [PATCH] Add elapsed time on debug for slow git commands (#25642)

To record which command is slow, this PR adds a debug log for slow git
operations.

---------

Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: delvh <dev.lh@web.de>
---
 modules/git/command.go | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/modules/git/command.go b/modules/git/command.go
index ac013d4ea1c..c38fd046966 100644
--- a/modules/git/command.go
+++ b/modules/git/command.go
@@ -301,6 +301,8 @@ func (c *Command) Run(opts *RunOpts) error {
 	}
 	defer finished()
 
+	startTime := time.Now()
+
 	cmd := exec.CommandContext(ctx, c.prog, c.args...)
 	if opts.Env == nil {
 		cmd.Env = os.Environ()
@@ -327,7 +329,13 @@ func (c *Command) Run(opts *RunOpts) error {
 		}
 	}
 
-	if err := cmd.Wait(); err != nil && ctx.Err() != context.DeadlineExceeded {
+	err := cmd.Wait()
+	elapsed := time.Since(startTime)
+	if elapsed > time.Second {
+		log.Debug("slow git.Command.Run: %s (%s)", c, elapsed)
+	}
+
+	if err != nil && ctx.Err() != context.DeadlineExceeded {
 		return err
 	}