MCPcopy Create free account
hub / github.com/error311/FileRise / renameSubtree

Method renameSubtree

src/FileRise/Support/MetadataPath.php:84–125  ·  view source on GitHub ↗
(string $metaRoot, string $oldFolder, string $newFolder)

Source from the content-addressed store, hash-verified

82 }
83
84 public static function renameSubtree(string $metaRoot, string $oldFolder, string $newFolder): void
85 {
86 $metaRoot = rtrim($metaRoot, '/\\') . DIRECTORY_SEPARATOR;
87 $oldFolder = self::folderKey($oldFolder);
88 $newFolder = self::folderKey($newFolder);
89 if ($oldFolder === 'root' || $newFolder === 'root') {
90 return;
91 }
92
93 $oldExact = $metaRoot . self::encodedFileName($oldFolder);
94 if (is_file($oldExact)) {
95 @rename($oldExact, $metaRoot . self::encodedFileName($newFolder));
96 }
97
98 $oldPrefix = 'folder-' . rawurlencode($oldFolder . '/');
99 $newPrefix = 'folder-' . rawurlencode($newFolder . '/');
100 foreach (glob($metaRoot . $oldPrefix . '*_metadata.json') ?: [] as $oldPath) {
101 if (!is_file($oldPath)) {
102 continue;
103 }
104 $baseName = basename($oldPath);
105 $newBase = preg_replace('/^' . preg_quote($oldPrefix, '/') . '/', $newPrefix, $baseName);
106 if (is_string($newBase) && $newBase !== '') {
107 @rename($oldPath, $metaRoot . $newBase);
108 }
109 }
110
111 if (!self::isCollisionSensitive($oldFolder) && !self::isCollisionSensitive($newFolder)) {
112 $oldLegacyPrefix = str_replace(['/', '\\', ' '], '-', $oldFolder);
113 $newLegacyPrefix = str_replace(['/', '\\', ' '], '-', $newFolder);
114 foreach (glob($metaRoot . $oldLegacyPrefix . '*_metadata.json') ?: [] as $oldPath) {
115 if (!is_file($oldPath)) {
116 continue;
117 }
118 $baseName = basename($oldPath);
119 $newBase = preg_replace('/^' . preg_quote($oldLegacyPrefix, '/') . '/', $newLegacyPrefix, $baseName);
120 if (is_string($newBase) && $newBase !== '') {
121 @rename($oldPath, $metaRoot . $newBase);
122 }
123 }
124 }
125 }
126
127 private static function isCollisionSensitive(string $folder): bool
128 {

Callers 2

renameFolderMethod · 0.80

Calls 3

folderKeyMethod · 0.95
encodedFileNameMethod · 0.95
isCollisionSensitiveMethod · 0.95

Tested by

no test coverage detected