Oh, and in the process, rewrite it in Perl. Signed-off-by: Ryan Anderson <[EMAIL PROTECTED]> ---
git-rename-script | 68 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 63 insertions(+), 5 deletions(-) f46717f9116bba7efb6a10ed99cd2fcea00fe5da diff --git a/git-rename-script b/git-rename-script --- a/git-rename-script +++ b/git-rename-script @@ -1,7 +1,65 @@ -#!/bin/sh +#!/usr/bin/perl +# +# Copyright 2005, Ryan Anderson <[EMAIL PROTECTED]> +# +# This file is licensed under the GPL v2, or a later version +# at the discretion of Linus Torvalds. -. git-sh-setup-script || die "Not a git archive" -[ -f "$1" ] || [ -h "$1" ] || die "git rename: bad source" -[ -e "$2" ] && die "git rename: destination already exists" -mv -- "$1" "$2" && git-update-cache --add --remove -- "$1" "$2" +use warnings; +use strict; + +sub usage($); + +# Sanity checks: +unless ( -d ".git" && -d ".git/objects" && + -d ".git/objects/00" && -d ".git/refs") { + usage("Git repository not found."); +} + +usage("") if scalar @ARGV != 2; + +my ($src,$dst) = @ARGV; + +unless (-f $src || -l $src || -d $src) { + usage("git rename: bad source '$src'"); +} + +if (-e $dst) { + usage("git rename: destinations '$dst' already exists"); +} + +my (@allfiles,@srcfiles,@dstfiles); + +open(F,"-|","git-ls-files") + or die "Failed to open pipe from git-ls-files: " . $!; + [EMAIL PROTECTED] = <F>; +close(F); +chomp for @allfiles; + + [EMAIL PROTECTED] = grep /^$src/, @allfiles; [EMAIL PROTECTED] = @srcfiles; +s#^$src(/|$)#$dst$1# for @dstfiles; + +rename($src,$dst) + or die "rename failed: $!"; + +system("git-update-cache","--remove","--",@srcfiles); +system("git-update-cache","--add","--",@dstfiles); + + +sub usage($) { + my $s = shift; + print $s, "\n" if (length $s != 0); + print <<EOT; +$0 <source> <dest> +source must exist and be either a file, symlink or directory. +dest must NOT exist. + +Renames source to dest, and updates the git cache to reflect the change. +Use "git commit" to make record the change permanently. +EOT + exit(1); +} -- Ryan Anderson sometimes Pug Majere - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html