Skip to content

Commit c586fb3

Browse files
authored
cmd/sync: refactor some check (#6431)
Signed-off-by: jiefenghuang <[email protected]>
1 parent 61ff5fc commit c586fb3

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

pkg/sync/sync.go

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,7 +1515,7 @@ func produceFromList(tasks chan<- object.Object, src, dst object.ObjectStorage,
15151515
if err := produceSingleObject(tasks, src, dst, key, config); err == nil {
15161516
listedPrefix.Increment()
15171517
continue
1518-
} else if errors.Is(err, ignoreDir) {
1518+
} else if errors.Is(err, errDirSuffix) {
15191519
key += "/"
15201520
} else if os.IsNotExist(err) {
15211521
atomic.AddInt64(&ignoreFiles, 1)
@@ -1553,32 +1553,39 @@ func produceFromList(tasks chan<- object.Object, src, dst object.ObjectStorage,
15531553
return nil
15541554
}
15551555

1556-
var ignoreDir = errors.New("ignore dir")
1556+
var errDirSuffix = errors.New("dir miss suffix '/'")
15571557
var ignoreFiles int64
15581558

15591559
func produceSingleObject(tasks chan<- object.Object, src, dst object.ObjectStorage, key string, config *Config) error {
15601560
obj, err := src.Head(ctx, key)
1561-
if err == nil && (!obj.IsDir() || obj.IsSymlink() && config.Links || obj.IsDir() && config.Dirs && strings.HasSuffix(key, "/")) {
1562-
var srckeys = make(chan object.Object, 1)
1563-
srckeys <- obj
1564-
close(srckeys)
1565-
if dobj, e := dst.Head(ctx, key); e == nil || os.IsNotExist(e) {
1566-
var dstkeys = make(chan object.Object, 1)
1567-
if dobj != nil {
1568-
dstkeys <- dobj
1569-
}
1570-
close(dstkeys)
1571-
logger.Debugf("produce single key %s", key)
1572-
_ = produce(tasks, srckeys, dstkeys, config)
1561+
if err != nil {
1562+
logger.Warnf("head %s from %s: %s", key, src, err)
1563+
return err
1564+
}
1565+
if obj.IsDir() {
1566+
// only `files-from` will hit this case
1567+
if !strings.HasSuffix(key, "/") {
1568+
return errDirSuffix
1569+
}
1570+
if !config.Dirs {
15731571
return nil
1574-
} else {
1575-
logger.Warnf("head %s from %s: %s", key, dst, e)
1576-
err = e
15771572
}
1578-
} else if err != nil {
1579-
logger.Warnf("head %s from %s: %s", key, src, err)
1573+
}
1574+
var srckeys = make(chan object.Object, 1)
1575+
srckeys <- obj
1576+
close(srckeys)
1577+
if dobj, e := dst.Head(ctx, key); e == nil || os.IsNotExist(e) {
1578+
var dstkeys = make(chan object.Object, 1)
1579+
if dobj != nil {
1580+
dstkeys <- dobj
1581+
}
1582+
close(dstkeys)
1583+
logger.Debugf("produce single key %s", key)
1584+
_ = produce(tasks, srckeys, dstkeys, config)
1585+
return nil
15801586
} else {
1581-
err = ignoreDir
1587+
logger.Warnf("head %s from %s: %s", key, dst, e)
1588+
err = e
15821589
}
15831590
return err
15841591
}

0 commit comments

Comments
 (0)