Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Retrieve list of all indexed files in Templates folder.
- $files = git ls-files -s Templates;
- $fileCount = $files.Count;
- $currentFileIndex = 0;
- foreach ($file in $files) {
- $currentFileIndex++;
- # Extract file mode and path of file.
- $rgx = [regex]::match($file, '^(\d{6}) \w{40} \d+\t(.+)$').Groups;
- # Check if file mode indicates that this should be a symbolic link. If not, skip it.
- if ($rgx[1].Value -ne "120000") {
- continue;
- }
- # Resolve the path of the file.
- $destPath = Resolve-Path $rgx[2].Value;
- # Check if file is already a symlink, and if so skip it.
- if (Get-Item $destPath | Where-Object { $_.Attributes -match "ReparsePoint"} ) {
- continue;
- }
- # Get the target of the symlink.
- $relPath = Get-Content $destPath;
- # Combine the file path and the relative target path to get an absolute path to the target file.
- $source = Join-Path (Split-Path $destPath) $relPath -Resolve;
- # Move to the parent folder of the symlink.
- Push-Location (Split-Path $destPath);
- # Get a working relative path to the target.
- $relPath = Resolve-Path -Relative $relPath;
- # Delete the broken symlink.
- Remove-Item $destPath;
- # Create a new symlink.
- if (!(Get-Item $source).PSIsContainer) {
- cmd /q /c mklink "$($destPath)" "$($relPath)" | Out-Null;
- }
- else {
- cmd /q /c mklink /d "$($destPath)" "$($relPath)" | Out-Null;
- }
- # Return to previous working directory.
- Pop-Location;
- # Tell Git to ignore the file change.
- git update-index --assume-unchanged $destPath;
- # Show progress.
- Write-Host -NoNewline "$($currentFileIndex) out of $($fileCount) symlinks fixed.`r";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement