2010-02-08 11 views
6

में अनुवाद नहीं किया जा सकता है मैं अपने पूर्व के लिए प्रतिबद्ध हुक के साथ एक समस्या है।पूर्व प्रतिबद्ध SVN में हुक: देशी स्थान से UTF-8

यह हुक परीक्षण करता है, तो एक फाइल जब उपयोगकर्ता करता है बंद है। जब एक बुरी हालत होता है, यह चाहिए उत्पादन किसी अन्य उपयोगकर्ता इस फाइल ताला लगा है या यदि कोई भी ताला लगा है, यह दिखाना चाहिए "आप (नाम file's) इस फाइल संदेश ताला लगा नहीं कर रहे हैं" कि। त्रुटि तब होती है जब फ़ाइल के नाम में "ç" और कछुआ जैसे कुछ लैटिन वर्ण होते हैं, यह मुझे आउटपुट में दिखाते हैं।

कमिट में विफल रहा है (विवरण का पालन करें): [। त्रुटि उत्पादन UTF-8 के मूल निवासी के स्थान से अनुवाद नहीं हो सका]

है: पूर्व प्रतिबद्ध उत्पादन के साथ हुक (निकास कोड 1) द्वारा अवरुद्ध प्रतिबद्ध आप जानते हैं कि मैं इसे कैसे हल कर सकता हूं?

धन्यवाद,

एलेक्जेंडर

मेरे खोल स्क्रिप्ट यहाँ है:

#!/bin/sh
REPOS="$1"
TXN="$2"
export LANG="en_US.UTF-8"
/app/svn/hooks/ensure-has-need-lock.pl "$REPOS" "$TXN"
if [ $? -ne 0 ]; then exit 1; fi
exit 0

और मेरे पर्ल यहाँ है:

!/usr/bin/env perl 

#Turn on warnings the best way depending on the Perl version. 
BEGIN { 
    if ($] >= 5.006_000) 
    { require warnings; import warnings; }       
    else  
    { $^W = 1; }     
}    

use strict; 
use Carp; 

&usage unless @ARGV == 2; 

my $repos  = shift; 
my $txn   = shift;  

my $svnlook = "/usr/local/bin/svnlook"; 
my $user; 

my $ok = 1; 
    foreach my $program ($svnlook) 
    { 
     if (-e $program) 
     { 
      unless (-x $program) 
      { 
       warn "$0: required program $program' is not executable, ", 
        "edit $0.\n"; 
       $ok = 0; 
      } 
     } 
     else 
     { 
      warn "$0: required program $program' does not exist, edit $0.\n"; 
      $ok = 0; 
     } 
    } 
    exit 1 unless $ok; 

    unless (-e $repos){ 
     &usage("$0: repository directory $repos' does not exist."); 
    } 
    unless (-d $repos){ 
     &usage("$0: repository directory $repos' is not a directory."); 
    } 

    foreach my $user_tmp (&read_from_process($svnlook, 'author', $repos, '-t', $txn)) 
    { 
     $user = $user_tmp; 
    } 
    my @errors;   

    foreach my $transaction (&read_from_process($svnlook, 'changed', $repos, '-t', $txn)){ 
    if ($transaction =~ /^U. (.*[^\/])$/){ 
     my $file = $1; 
     my $err = 0; 
     foreach my $locks (&read_from_process($svnlook, 'lock', $repos, $file)){ 
     $err = 1; 
     if($locks=~ /Owner: (.*)/){ 
      if($1 != $user){ 
      push @errors, "$file : You are not locking this file!";  
      } 
     } 
     } 
     if($err==0){ 
     push @errors, "$file : You are not locking this file!"; 
     } 
    } 
    elsif($transaction =~ /^D. (.*[^\/])$/){ 
     my $file = $1; 
     my $tchan = &read_from_process($svnlook, 'lock', $repos, $file); 
     foreach my $locks (&read_from_process($svnlook, 'lock', $repos, $file)){ 
     push @errors, "$1 : cannot delete locked Files"; 
     } 
    } 
    elsif($transaction =~ /^A. (.*[^\/])$/){ 
     my $needs_lock; 
     my $path = $1; 
     foreach my $prop (&read_from_process($svnlook, 'proplist', $repos, '-t', $txn, '--verbose', $path)){ 
      if ($prop =~ /^\s*svn:needs-lock : (\S+)/){ 
      $needs_lock = $1; 
      } 
     } 
     if (not $needs_lock){ 
     push @errors, "$path : svn:needs-lock is not set. Pleas ask TCC for support."; 
     } 
    } 
    } 
if (@errors) 
    { 
    warn "$0:\n\n", 
     join("\n", @errors), "\n\n"; 
    exit 1; 
    } 
else 
    { 
    exit 0; 
    } 

sub usage 
{ 
    warn "@_\n" if @_; 
    die "usage: $0 REPOS TXN-NAME\n"; 
} 

sub safe_read_from_pipe 
{ 
    unless (@_) 
    { 
     croak "$0: safe_read_from_pipe passed no arguments.\n"; 
    } 
    print "Running @_\n"; 
    my $pid = open(SAFE_READ, '-|'); 
    unless (defined $pid) 
    { 
     die "$0: cannot fork: $!\n"; 
    } 
    unless ($pid) 
    { 
     open(STDERR, ">&STDOUT") 
     or die "$0: cannot dup STDOUT: $!\n"; 
     exec(@_) 
     or die "$0: cannot exec @_': $!\n"; 
    } 
    my @output; 
    while (<SAFE_READ>) 
    { 
     chomp; 
     push(@output, $_); 
    } 
    close(SAFE_READ); 
    my $result = $?; 
    my $exit = $result >> 8; 
    my $signal = $result & 127; 
    my $cd  = $result & 128 ? "with core dump" : ""; 
    if ($signal or $cd) 
    { 
     warn "$0: pipe from @_' failed $cd: exit=$exit signal=$signal\n"; 
    } 
    if (wantarray) 
    { 
     return ($result, @output); 
    } 
    else 
    { 
     return $result; 
    } 
} 

sub read_from_process 
    { 
    unless (@_) 
    { 
     croak "$0: read_from_process passed no arguments.\n"; 
    } 
    my ($status, @output) = &safe_read_from_pipe(@_); 
    if ($status) 
    { 
     if (@output) 
     { 
      die "$0: @_' failed with this output:\n", join("\n", @output), "\n"; 
     } 
     else 
     { 
      die "$0: @_' failed with no output.\n"; 
     } 
    } 
    else 
    { 
     return @output; 
    } 
} 
+0

मुझे लगता है कि पर्ल स्क्रिप्ट के स्रोत को भी देखना महत्वपूर्ण होगा। आप क्यों मानते हैं कि त्रुटि वहां नहीं है? – amarillion

+0

मुझे लगता है कि त्रुटि खोल या कछुए पर है (मुझे नहीं पता) क्योंकि शेल में केवल यह शामिल है: गूंज "testç" 1> और 2 वही त्रुटि होती है। लेकिन मैं अपना पर्ल कोड डालूंगा। –

+0

मैं इस समाधान को 5 दिनों के लिए देख रहा हूं और मुझे नहीं मिला। शायद यह एक बग या कुछ है। अगर किसी के पास क्या हो रहा है, या यदि यह एक बग है या किसी के साथ हुआ तो कोई विचार है। धन्यवाद –

उत्तर

5

यह एक ज्ञात तोड़फोड़ बग, मैं बस के रूप में अच्छी तरह से मारा जाता है। http://subversion.tigris.org/issues/show_bug.cgi?id=2487

मेरी समस्या का समाधान करने के लिए मैं vi का इस्तेमाल किया और मैं आम तौर पर एक निम्न

किया: सेट HLS (प्रकाश डाला खोज परिणाम)/के बाद [^ - ~] (किसी भी चरित्र है कि नहीं है के लिए खोज । अंतरिक्ष और लहरिल, यानी के बीच कि ASCII सेट से एक मुद्रण योग्य चरित्र नहीं है।) आप वर्ग कोष्ठकों में टैब चरित्र (Ctrl-V का टैब के साथ) जोड़ें यदि आपने अपने दस्तावेज़ों में इसका इस्तेमाल कर सकते हैं। यह एक नीली^आई के साथ/[^ - ~^I] के रूप में दिखाएगा।

कैनकन में एक यू है कि एक लहजा लेकिन वास्तव में एक कानूनी लैटिन -1 चरित्र नहीं था पाया।

+0

यह मेरे लिए काम किया। धन्यवाद टोडेकस। – Moni

+0

मेरी जिंदगी बचाई। दोस्त धन्यवाद। – RoyHu

2

मैं संपादन/etc/apache2/envvars और मशीन स्थान के साथ चलाने के लिए अपाचे सेट (डिफ़ॉल्ट है सी) द्वारा इस (Debian पर) हल:

## The locale used by some modules like mod_dav 
export LANG=C 
## Uncomment the following line to use the system default locale instead: 
#. /etc/default/locale 

^---- अपाचे में सिस्टम लोकेल सेट करने के लिए इस लाइन को असम्बद्ध करें।

यदि आप एक UTF-8 लोकेल उपयोग नहीं कर रहे हैं, मैन्युअल बस अपाचे के लिए एक UTF-8 लोकेल सेट:

export LANG=en_US.UTF-8 
export LC_ALL=en_US.UTF-8 
2

मैं भी इस मुद्दे का सामना किया और क्योंकि मैं कुछ विशेष वर्ण उपयोग कर रहा था यह हो रहा था मेरे प्रतिबद्ध संदेश में। मैंने अभी उन पात्रों को हटा दिया और यह आकर्षण की तरह काम किया।

विशेष रूप से एस्ट्रोफ़े वर्णों की तलाश करें (जब आपके पास शब्द दस्तावेज़ से टेक्स्ट कॉपी किया गया हो)।

1

आपको अपनी httpd.conf फ़ाइल में निम्न पंक्ति जोड़ने की आवश्यकता है।

SVNUseUTF8 on

आप CentOS उपयोग कर रहे हैं? यह शायद कुछ ओएस मुद्दा हो सकता है, क्योंकि यह केवल Google के साथ इस टिप को ढूंढना लगभग असंभव है।

संबंधित मुद्दे