From b6a2323981a7a89205a382ddf0542e205e292d3d Mon Sep 17 00:00:00 2001
From: Zettat123 <zettat123@gmail.com>
Date: Mon, 27 Mar 2023 16:28:22 +0800
Subject: [PATCH] Check LFS/Packages settings in dump and doctor command
 (#23631) (#23730)

Backport #23631
Close #23622

As described in the issue, disabling the LFS/Package settings will cause
errors when running `gitea dump` or `gitea doctor`. We need to check the
settings and the related operations should be skipped if the settings
are disabled.
---
 cmd/dump.go               | 4 ++++
 modules/doctor/storage.go | 9 +++++++++
 2 files changed, 13 insertions(+)

diff --git a/cmd/dump.go b/cmd/dump.go
index c802849f8e..ab426fe687 100644
--- a/cmd/dump.go
+++ b/cmd/dump.go
@@ -250,6 +250,8 @@ func runDump(ctx *cli.Context) error {
 
 		if ctx.IsSet("skip-lfs-data") && ctx.Bool("skip-lfs-data") {
 			log.Info("Skip dumping LFS data")
+		} else if !setting.LFS.StartServer {
+			log.Info("LFS isn't enabled. Skip dumping LFS data")
 		} else if err := storage.LFS.IterateObjects(func(objPath string, object storage.Object) error {
 			info, err := object.Stat()
 			if err != nil {
@@ -364,6 +366,8 @@ func runDump(ctx *cli.Context) error {
 
 	if ctx.IsSet("skip-package-data") && ctx.Bool("skip-package-data") {
 		log.Info("Skip dumping package data")
+	} else if !setting.Packages.Enabled {
+		log.Info("Packages isn't enabled. Skip dumping package data")
 	} else if err := storage.Packages.IterateObjects(func(objPath string, object storage.Object) error {
 		info, err := object.Stat()
 		if err != nil {
diff --git a/modules/doctor/storage.go b/modules/doctor/storage.go
index aa987de447..12ce446c00 100644
--- a/modules/doctor/storage.go
+++ b/modules/doctor/storage.go
@@ -16,6 +16,7 @@ import (
 	"code.gitea.io/gitea/modules/base"
 	"code.gitea.io/gitea/modules/log"
 	packages_module "code.gitea.io/gitea/modules/packages"
+	"code.gitea.io/gitea/modules/setting"
 	"code.gitea.io/gitea/modules/storage"
 	"code.gitea.io/gitea/modules/util"
 )
@@ -111,6 +112,10 @@ func checkStorage(opts *checkStorageOptions) func(ctx context.Context, logger lo
 		}
 
 		if opts.LFS || opts.All {
+			if !setting.LFS.StartServer {
+				logger.Info("LFS isn't enabled (skipped)")
+				return nil
+			}
 			if err := commonCheckStorage(ctx, logger, autofix,
 				&commonStorageCheckOptions{
 					storer: storage.LFS,
@@ -173,6 +178,10 @@ func checkStorage(opts *checkStorageOptions) func(ctx context.Context, logger lo
 		}
 
 		if opts.Packages || opts.All {
+			if !setting.Packages.Enabled {
+				logger.Info("Packages isn't enabled (skipped)")
+				return nil
+			}
 			if err := commonCheckStorage(ctx, logger, autofix,
 				&commonStorageCheckOptions{
 					storer: storage.Packages,