(ctx context.Context, dir, prefix string, params *sharded.Parameters, numMoved, numUnchanged *int)
| 225 | } |
| 226 | |
| 227 | func (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 | } |
no test coverage detected