# [PATCHv2 1/3] git-p4 tests: cd to / before running python

6 messages from 2016-04-26 to 2016-04-26. Participants: Luke Diamand, Junio C Hamano.
Thread: https://gitlist.dev/t/42146

## Luke Diamand, 2016-04-26 07:50

Subject: [PATCHv2 0/3] git-p4: support python3 in the tests
Message-ID: <1461657061-7984-1-git-send-email-luke@diamand.org>
URL: https://gitlist.dev/e/1461657061-7984-1-git-send-email-luke%40diamand.org

```
Updates to my patches to allow the git-p4 tests to work with python3.

Incorporates suggestions from Junio to just switch to "/" and to
use $PYTHON_PATH.

Luke Diamand (3):
  git-p4 tests: cd to / before running python
  git-p4 tests: work with python3 as well as python2
  git-p4 tests: time_in_seconds should use $PYTHON_PATH

 t/lib-git-p4.sh            | 7 ++++---
 t/t9802-git-p4-filetype.sh | 6 +++---
 2 files changed, 7 insertions(+), 6 deletions(-)

-- 
2.8.1.218.gd2cea43.dirty

```

## Luke Diamand, 2016-04-26 07:50

Subject: [PATCHv2 1/3] git-p4 tests: cd to / before running python
Message-ID: <1461657061-7984-2-git-send-email-luke@diamand.org>
URL: https://gitlist.dev/e/1461657061-7984-2-git-send-email-luke%40diamand.org
In-Reply-To: <1461657061-7984-1-git-send-email-luke@diamand.org>

```
The python one-liner for getting the current time prints out
error messages if the current directory is deleted while it is
running if using python3.

Avoid these messages by switching to "/" before running it.

This problem does not arise if using python2.

Signed-off-by: Luke Diamand <luke@diamand.org>
---
 t/lib-git-p4.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh
index f9ae1d7..724bc43 100644
--- a/t/lib-git-p4.sh
+++ b/t/lib-git-p4.sh
@@ -50,7 +50,7 @@ native_path() {
 # 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() {
-	python -c 'import time; print int(time.time())'
+	(cd / && python -c 'import time; print(int(time.time()))')
 }
 
 # Try to pick a unique port: guess a large number, then hope
-- 
2.8.1.218.gd2cea43.dirty

```

## Luke Diamand, 2016-04-26 07:51

Subject: [PATCHv2 2/3] git-p4 tests: work with python3 as well as python2
Message-ID: <1461657061-7984-3-git-send-email-luke@diamand.org>
URL: https://gitlist.dev/e/1461657061-7984-3-git-send-email-luke%40diamand.org
In-Reply-To: <1461657061-7984-1-git-send-email-luke@diamand.org>

```
Update the git-p4 tests so that they work with both
Python2 and Python3.

We have to be explicit about the difference between
Unicode text strings (Python3 default) and raw binary
strings which will be exchanged with Perforce.

Additionally, print always takes braces in Python3.

Signed-off-by: Luke Diamand <luke@diamand.org>
---
 t/lib-git-p4.sh            | 5 +++--
 t/t9802-git-p4-filetype.sh | 6 +++---
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh
index 724bc43..7393ee2 100644
--- a/t/lib-git-p4.sh
+++ b/t/lib-git-p4.sh
@@ -198,9 +198,10 @@ marshal_dump() {
 	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"
 }
diff --git a/t/t9802-git-p4-filetype.sh b/t/t9802-git-p4-filetype.sh
index 66d3fc9..eb9a8ed 100755
--- a/t/t9802-git-p4-filetype.sh
+++ b/t/t9802-git-p4-filetype.sh
@@ -223,12 +223,12 @@ build_gendouble() {
 	import sys
 	import struct
 
-	s = struct.pack(">LL18s",
+	s = struct.pack(b">LL18s",
 			0x00051607,  # AppleDouble
 			0x00020000,  # version 2
-			""           # pad to 26 bytes
+			b""          # pad to 26 bytes
 	)
-	sys.stdout.write(s)
+	getattr(sys.stdout, 'buffer', sys.stdout).write(s)
 	EOF
 }
 
-- 
2.8.1.218.gd2cea43.dirty

```

## Luke Diamand, 2016-04-26 07:51

Subject: [PATCHv2 3/3] git-p4 tests: time_in_seconds should use $PYTHON_PATH
Message-ID: <1461657061-7984-4-git-send-email-luke@diamand.org>
URL: https://gitlist.dev/e/1461657061-7984-4-git-send-email-luke%40diamand.org
In-Reply-To: <1461657061-7984-1-git-send-email-luke@diamand.org>

```
The time_in_seconds script should use $PYTHON_PATH, rather than
just hard-coded python, so that users can override which version
gets used, as is done for other python invocations.

Signed-off-by: Luke Diamand <luke@diamand.org>
---
 t/lib-git-p4.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh
index 7393ee2..012d40e 100644
--- a/t/lib-git-p4.sh
+++ b/t/lib-git-p4.sh
@@ -50,7 +50,7 @@ native_path() {
 # 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() {
-	(cd / && 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
-- 
2.8.1.218.gd2cea43.dirty

```

## Junio C Hamano, 2016-04-26 17:48

Subject: Re: [PATCHv2 2/3] git-p4 tests: work with python3 as well as python2
Message-ID: <xmqqpotcgt2l.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqpotcgt2l.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <1461657061-7984-3-git-send-email-luke@diamand.org>

```
Luke Diamand <luke@diamand.org> writes:

> Update the git-p4 tests so that they work with both
> Python2 and Python3.
>
> We have to be explicit about the difference between
> Unicode text strings (Python3 default) and raw binary
> strings which will be exchanged with Perforce.
>
> Additionally, print always takes braces in Python3.

s/braces/parentheses/, I think (can locally tweak if you say so--in
which case no need to resend).

>
> Signed-off-by: Luke Diamand <luke@diamand.org>
> ---
>  t/lib-git-p4.sh            | 5 +++--
>  t/t9802-git-p4-filetype.sh | 6 +++---
>  2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh
> index 724bc43..7393ee2 100644
> --- a/t/lib-git-p4.sh
> +++ b/t/lib-git-p4.sh
> @@ -198,9 +198,10 @@ marshal_dump() {
>  	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"
>  }
> diff --git a/t/t9802-git-p4-filetype.sh b/t/t9802-git-p4-filetype.sh
> index 66d3fc9..eb9a8ed 100755
> --- a/t/t9802-git-p4-filetype.sh
> +++ b/t/t9802-git-p4-filetype.sh
> @@ -223,12 +223,12 @@ build_gendouble() {
>  	import sys
>  	import struct
>  
> -	s = struct.pack(">LL18s",
> +	s = struct.pack(b">LL18s",
>  			0x00051607,  # AppleDouble
>  			0x00020000,  # version 2
> -			""           # pad to 26 bytes
> +			b""          # pad to 26 bytes
>  	)
> -	sys.stdout.write(s)
> +	getattr(sys.stdout, 'buffer', sys.stdout).write(s)
>  	EOF
>  }

```

## Luke Diamand, 2016-04-26 20:03

Subject: Re: [PATCHv2 2/3] git-p4 tests: work with python3 as well as python2
Message-ID: <CAE5ih79Ot8QBDcRatxxxoQdGKFXNtoQ-=j4uWqQ2g=KjLBNiHQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAE5ih79Ot8QBDcRatxxxoQdGKFXNtoQ-%3Dj4uWqQ2g%3DKjLBNiHQ%40mail.gmail.com
In-Reply-To: <xmqqpotcgt2l.fsf@gitster.mtv.corp.google.com>

```
On 26 April 2016 at 18:48, Junio C Hamano <gitster@pobox.com> wrote:
> Luke Diamand <luke@diamand.org> writes:
>
>> Update the git-p4 tests so that they work with both
>> Python2 and Python3.
>>
>> We have to be explicit about the difference between
>> Unicode text strings (Python3 default) and raw binary
>> strings which will be exchanged with Perforce.
>>
>> Additionally, print always takes braces in Python3.
>
> s/braces/parentheses/, I think (can locally tweak if you say so--in
> which case no need to resend).

Please do so, thanks!

Luke

```
