mirror of
https://github.com/kairos-io/kairos-agent.git
synced 2025-06-03 01:44:53 +00:00
Take symlinks into account for partition size
Signed-off-by: Mauro Morales <mauro.morales@spectrocloud.com>
This commit is contained in:
parent
677254e570
commit
5fab99f5b7
@ -19,6 +19,7 @@ package config
|
||||
import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
@ -480,11 +481,40 @@ func GetSourceSize(config *Config, source *v1.ImageSource) (int64, error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
info, err := d.Info()
|
||||
if d.Type()&fs.ModeSymlink != 0 {
|
||||
// If it's a symlink, get its target and calculate its size.
|
||||
linkTarget, err := os.Readlink(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
size += info.Size()
|
||||
|
||||
if !filepath.IsAbs(linkTarget) {
|
||||
// If it's a relative path, join it with the base directory path.
|
||||
linkTarget = filepath.Join(filepath.Dir(path), linkTarget)
|
||||
}
|
||||
|
||||
_, err = os.Stat(linkTarget)
|
||||
if os.IsNotExist(err) {
|
||||
size += 0
|
||||
} else if err != nil {
|
||||
return err
|
||||
} else {
|
||||
linkInfo, err := os.Stat(linkTarget)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
size += linkInfo.Size()
|
||||
}
|
||||
} else if !d.IsDir() {
|
||||
// If it's a regular file, add its size to the total.
|
||||
fileInfo, err := d.Info()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
size += fileInfo.Size()
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user