]> git.ipfire.org Git - thirdparty/git.git/blame - git-rename.perl
Remove 'Previously this command was known as ...' messages.
[thirdparty/git.git] / git-rename.perl
CommitLineData
d36ac03e
RA
1#!/usr/bin/perl
2#
3# Copyright 2005, Ryan Anderson <ryan@michonline.com>
4#
5# This file is licensed under the GPL v2, or a later version
6# at the discretion of Linus Torvalds.
399144f2 7
399144f2 8
d36ac03e
RA
9use warnings;
10use strict;
11
12sub usage($);
13
14# Sanity checks:
15my $GIT_DIR = $ENV{'GIT_DIR'} || ".git";
16
17unless ( -d $GIT_DIR && -d $GIT_DIR . "/objects" &&
230f1322 18 -d $GIT_DIR . "/objects/" && -d $GIT_DIR . "/refs") {
d36ac03e
RA
19 usage("Git repository not found.");
20}
21
22usage("") if scalar @ARGV != 2;
23
24my ($src,$dst) = @ARGV;
25
26unless (-f $src || -l $src || -d $src) {
27 usage("git rename: bad source '$src'");
28}
29
30if (-e $dst) {
31 usage("git rename: destinations '$dst' already exists");
32}
33
34my (@allfiles,@srcfiles,@dstfiles);
35
36$/ = "\0";
37open(F,"-|","git-ls-files","-z")
38 or die "Failed to open pipe from git-ls-files: " . $!;
39
40@allfiles = map { chomp; $_; } <F>;
41close(F);
42
43my $safesrc = quotemeta($src);
44@srcfiles = grep /^$safesrc/, @allfiles;
45@dstfiles = @srcfiles;
46s#^$safesrc(/|$)#$dst$1# for @dstfiles;
47
48rename($src,$dst)
49 or die "rename failed: $!";
50
215a7ad1
JH
51my $rc = system("git-update-index","--add","--",@dstfiles);
52die "git-update-index failed to add new name with code $?\n" if $rc;
d36ac03e 53
215a7ad1
JH
54$rc = system("git-update-index","--remove","--",@srcfiles);
55die "git-update-index failed to remove old name with code $?\n" if $rc;
d36ac03e
RA
56
57
58sub usage($) {
59 my $s = shift;
60 print $s, "\n" if (length $s != 0);
61 print <<EOT;
62$0 <source> <dest>
63source must exist and be either a file, symlink or directory.
64dest must NOT exist.
65
66Renames source to dest, and updates the git cache to reflect the change.
67Use "git commit" to make record the change permanently.
68EOT
69 exit(1);
70}