Merge branch 'ld/p4-test-py3'
authorJunio C Hamano <gitster@pobox.com>
Fri, 6 May 2016 21:45:42 +0000 (14:45 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 6 May 2016 21:45:42 +0000 (14:45 -0700)
The test scripts for "git p4" (but not "git p4" implementation
itself) has been updated so that they would work even on a system
where the installed version of Python is python 3.

* ld/p4-test-py3:
git-p4 tests: time_in_seconds should use $PYTHON_PATH
git-p4 tests: work with python3 as well as python2
git-p4 tests: cd to / before running python

1  2 
t/lib-git-p4.sh
diff --combined t/lib-git-p4.sh
index ce3536e4a02fb000ed2404f4c7c4c26bb8ea9d99,012d40e74695f8c195236a22802fd3ca6d60a8d8..54fd5a6ca02757f77004d0f8babfcc6d616162c0
@@@ -33,7 -33,7 +33,7 @@@ f
  # Older versions of perforce were available compiled natively for
  # cygwin.  Those do not accept native windows paths, so make sure
  # not to convert for them.
 -native_path() {
 +native_path () {
        path="$1" &&
        if test_have_prereq CYGWIN && ! p4 -V | grep -q CYGWIN
        then
@@@ -49,8 -49,8 +49,8 @@@
  # Attention: This function is not safe again against time offset updates
  # at runtime (e.g. via NTP). The 'clock_gettime(CLOCK_MONOTONIC)'
  # function could fix that but it is not in Python until 3.3.
 -time_in_seconds() {
 +time_in_seconds () {
-       python -c 'import time; print int(time.time())'
+       (cd / && "$PYTHON_PATH" -c 'import time; print(int(time.time()))')
  }
  
  # Try to pick a unique port: guess a large number, then hope
@@@ -75,7 -75,7 +75,7 @@@ git="$TRASH_DIRECTORY/git
  pidfile="$TRASH_DIRECTORY/p4d.pid"
  
  # Sometimes "prove" seems to hang on exit because p4d is still running
 -cleanup() {
 +cleanup () {
        if test -f "$pidfile"
        then
                kill -9 $(cat "$pidfile") 2>/dev/null && exit 255
@@@ -89,7 -89,7 +89,7 @@@ trap cleanup EXI
  TMPDIR="$TRASH_DIRECTORY"
  export TMPDIR
  
 -start_p4d() {
 +start_p4d () {
        mkdir -p "$db" "$cli" "$git" &&
        rm -f "$pidfile" &&
        (
        return 0
  }
  
 -p4_add_user() {
 +p4_add_user () {
        name=$1 &&
        p4 user -f -i <<-EOF
        User: $name
        EOF
  }
  
 -retry_until_success() {
 +p4_add_job () {
 +      p4 job -f -i <<-EOF
 +      Job: $1
 +      Status: open
 +      User: dummy
 +      Description:
 +      EOF
 +}
 +
 +retry_until_success () {
        timeout=$(($(time_in_seconds) + $RETRY_TIMEOUT))
        until "$@" 2>/dev/null || test $(time_in_seconds) -gt $timeout
        do
        done
  }
  
 -retry_until_fail() {
 +retry_until_fail () {
        timeout=$(($(time_in_seconds) + $RETRY_TIMEOUT))
        until ! "$@" 2>/dev/null || test $(time_in_seconds) -gt $timeout
        do
        done
  }
  
 -kill_p4d() {
 +kill_p4d () {
        pid=$(cat "$pidfile")
        retry_until_fail kill $pid
        retry_until_fail kill -9 $pid
        retry_until_fail kill -9 $watchdog_pid
  }
  
 -cleanup_git() {
 +cleanup_git () {
        retry_until_success rm -r "$git"
        test_must_fail test -d "$git" &&
        retry_until_success mkdir "$git"
  }
  
 -marshal_dump() {
 +marshal_dump () {
        what=$1 &&
        line=${2:-1} &&
        cat >"$TRASH_DIRECTORY/marshal-dump.py" <<-EOF &&
        import marshal
        import sys
+       instream = getattr(sys.stdin, 'buffer', sys.stdin)
        for i in range($line):
-           d = marshal.load(sys.stdin)
-       print d['$what']
+           d = marshal.load(instream)
+       print(d[b'$what'].decode('utf-8'))
        EOF
        "$PYTHON_PATH" "$TRASH_DIRECTORY/marshal-dump.py"
  }
  #
  # Construct a client with this list of View lines
  #
 -client_view() {
 +client_view () {
        (
                cat <<-EOF &&
                Client: $P4CLIENT
        ) | p4 client -i
  }
  
 -is_cli_file_writeable() {
 +is_cli_file_writeable () {
        # cygwin version of p4 does not set read-only attr,
        # will be marked 444 but -w is true
        file="$1" &&