From a7b43cbd22508abe276be544e64926338906c15d Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sat, 23 Jul 2022 17:41:47 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20`=E6=B8=85=E7=90=86=E6=9C=AA=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E8=B5=84=E6=BA=90`=20=E6=94=AF=E6=8C=81=E8=B7=9F?= =?UTF-8?q?=E9=9A=8F=20assets=20=E6=96=87=E4=BB=B6=E5=A4=B9=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E9=93=BE=E6=8E=A5=20Fix=20https://github.com/siyuan-n?= =?UTF-8?q?ote/siyuan/issues/5480?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/assets.go | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/kernel/model/assets.go b/kernel/model/assets.go index 629f2e46d..8b60da697 100644 --- a/kernel/model/assets.go +++ b/kernel/model/assets.go @@ -618,18 +618,26 @@ func UnusedAssets() (ret []string) { delete(assetsPathMap, toRemove) } + dataAssetsAbsPath, err := getDataAssetsAbsPath() + if nil != err { + return + } + for _, assetAbsPath := range assetsPathMap { if _, ok := linkDestMap[assetAbsPath]; ok { continue } var p string - if strings.HasPrefix(filepath.Join(util.DataDir, "assets"), assetAbsPath) { + if strings.HasPrefix(dataAssetsAbsPath, assetAbsPath) { p = assetAbsPath[strings.Index(assetAbsPath, "assets"):] } else { - p = strings.TrimPrefix(assetAbsPath, util.DataDir)[1:] + p = strings.TrimPrefix(assetAbsPath, filepath.Dir(dataAssetsAbsPath)) } p = filepath.ToSlash(p) + if strings.HasPrefix(p, "/") { + p = p[1:] + } ret = append(ret, p) } sort.Strings(ret) @@ -737,10 +745,14 @@ func allAssetAbsPaths() (assetsAbsPathMap map[string]string, err error) { return nil }) } + // 全局 assets - assets := filepath.Join(util.DataDir, "assets") - filepath.Walk(assets, func(assetPath string, info fs.FileInfo, err error) error { - if assets == assetPath { + dataAssetsAbsPath, err := getDataAssetsAbsPath() + if nil != err { + return + } + filepath.Walk(dataAssetsAbsPath, func(assetPath string, info fs.FileInfo, err error) error { + if dataAssetsAbsPath == assetPath { return nil } @@ -806,3 +818,20 @@ func copyAssetsToDataAssets(rootPath string) { } } } + +func getDataAssetsAbsPath() (ret string, err error) { + ret = filepath.Join(util.DataDir, "assets") + stat, statErr := os.Lstat(ret) + if nil != statErr { + err = statErr + return + } + if 0 != stat.Mode()&os.ModeSymlink { + // 跟随符号链接 https://github.com/siyuan-note/siyuan/issues/5480 + ret, err = os.Readlink(ret) + if nil != err { + return + } + } + return +}