aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-add--interactive.perl43
-rw-r--r--perl/Git.pm53
2 files changed, 53 insertions, 43 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 709a5f6ce..7ea3591ed 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -3,7 +3,7 @@
use 5.008;
use strict;
use warnings;
-use Git;
+use Git qw(unquote_path);
use Git::I18N;
binmode(STDOUT, ":raw");
@@ -175,47 +175,6 @@ if (!defined $GIT_DIR) {
}
chomp($GIT_DIR);
-my %cquote_map = (
- "b" => chr(8),
- "t" => chr(9),
- "n" => chr(10),
- "v" => chr(11),
- "f" => chr(12),
- "r" => chr(13),
- "\\" => "\\",
- "\042" => "\042",
-);
-
-sub unquote_path {
- local ($_) = @_;
- my ($retval, $remainder);
- if (!/^\042(.*)\042$/) {
- return $_;
- }
- ($_, $retval) = ($1, "");
- while (/^([^\\]*)\\(.*)$/) {
- $remainder = $2;
- $retval .= $1;
- for ($remainder) {
- if (/^([0-3][0-7][0-7])(.*)$/) {
- $retval .= chr(oct($1));
- $_ = $2;
- last;
- }
- if (/^([\\\042btnvfr])(.*)$/) {
- $retval .= $cquote_map{$1};
- $_ = $2;
- last;
- }
- # This is malformed -- just return it as-is for now.
- return $_[0];
- }
- $_ = $remainder;
- }
- $retval .= $_;
- return $retval;
-}
-
sub refresh {
my $fh;
open $fh, 'git update-index --refresh |'
diff --git a/perl/Git.pm b/perl/Git.pm
index bfce1f795..cf7a7e6a5 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -61,7 +61,8 @@ require Exporter;
remote_refs prompt
get_tz_offset get_record
credential credential_read credential_write
- temp_acquire temp_is_locked temp_release temp_reset temp_path);
+ temp_acquire temp_is_locked temp_release temp_reset temp_path
+ unquote_path);
=head1 DESCRIPTION
@@ -1451,6 +1452,56 @@ sub prefix_lines {
return $string;
}
+=item unquote_path ( PATH )
+
+Unquote a quoted path containing c-escapes as returned by ls-files etc.
+when not using -z or when parsing the output of diff -u.
+
+=cut
+
+{
+ my %cquote_map = (
+ "b" => chr(8),
+ "t" => chr(9),
+ "n" => chr(10),
+ "v" => chr(11),
+ "f" => chr(12),
+ "r" => chr(13),
+ "\\" => "\\",
+ "\042" => "\042",
+ );
+
+ sub unquote_path {
+ local ($_) = @_;
+ my ($retval, $remainder);
+ if (!/^\042(.*)\042$/) {
+ return $_;
+ }
+ ($_, $retval) = ($1, "");
+ while (/^([^\\]*)\\(.*)$/) {
+ $remainder = $2;
+ $retval .= $1;
+ for ($remainder) {
+ if (/^([0-3][0-7][0-7])(.*)$/) {
+ $retval .= chr(oct($1));
+ $_ = $2;
+ last;
+ }
+ if (/^([\\\042btnvfr])(.*)$/) {
+ $retval .= $cquote_map{$1};
+ $_ = $2;
+ last;
+ }
+ # This is malformed -- just return it as-is for now.
+ return $_[0];
+ }
+ $_ = $remainder;
+ }
+ $retval .= $_;
+ return $retval;
+ }
+}
+
=item get_comment_line_char ( )
Gets the core.commentchar configuration value.