MCPcopy
hub / github.com/kopia/kopia / renameBlobs

Method renameBlobs

cli/command_blob_shards_modify.go:227–275  ·  view source on GitHub ↗
(ctx context.Context, dir, prefix string, params *sharded.Parameters, numMoved, numUnchanged *int)

Source from the content-addressed store, hash-verified

225}
226
227func (c *commandBlobShardsModify) renameBlobs(ctx context.Context, dir, prefix string, params *sharded.Parameters, numMoved, numUnchanged *int) error {
228 entries, err := os.ReadDir(dir)
229 if err != nil {
230 return errors.Wrap(err, "error reading directory")
231 }
232
233 for _, ent := range entries {
234 //nolint:nestif
235 if ent.IsDir() {
236 if err := c.renameBlobs(ctx, path.Join(dir, ent.Name()), prefix+ent.Name(), params, numMoved, numUnchanged); err != nil {
237 return err
238 }
239 } else if name, ok := strings.CutSuffix(ent.Name(), sharded.CompleteBlobSuffix); ok {
240 blobID := prefix + name
241
242 destDir, destBlobID := params.GetShardDirectoryAndBlob(c.rootPath, blob.ID(blobID))
243 srcFile := path.Join(dir, ent.Name())
244 destFile := fmt.Sprintf("%v/%v%v", destDir, destBlobID, sharded.CompleteBlobSuffix)
245
246 if srcFile == destFile {
247 log(ctx).Debugf("Unchanged: %v", srcFile)
248
249 *numUnchanged++
250 } else {
251 c.out.printStdout("mv %v %v\n", srcFile, destFile)
252
253 if !c.dryRun {
254 err := os.Rename(srcFile, destFile)
255 if os.IsNotExist(err) {
256 //nolint:mnd
257 if err2 := os.MkdirAll(destDir, 0o700); err2 != nil {
258 return errors.Wrap(err2, "error creating directory")
259 }
260
261 err = os.Rename(srcFile, destFile)
262 }
263
264 if err != nil {
265 return errors.Wrap(err, "error moving")
266 }
267 }
268
269 *numMoved++
270 }
271 }
272 }
273
274 return nil
275}

Callers 1

runMethod · 0.95

Calls 9

IDTypeAlias · 0.92
printStdoutMethod · 0.80
ReadDirMethod · 0.65
NameMethod · 0.65
RenameMethod · 0.65
IsNotExistMethod · 0.65
MkdirAllMethod · 0.65
IsDirMethod · 0.45

Tested by

no test coverage detected