Re: Git-p4 fails with NameError with python 2.7.2

3 messages, 3 authors, 2016-06-15 · open the first message on its own page

Re: Git-p4 fails with NameError with python 2.7.2

From: Junio C Hamano <hidden>
Date: 2016-06-15 23:06:55

Luke Diamand [off-list ref] writes:
On 20 October 2015 at 11:34, Etienne Girard [off-list ref] wrote:
quoted
Hello,

Git-p4 fail when I try to rebase with the error: "NameError: global
name 'ctypes' is not defined". The error occurs when I use python
2.7.2 that is installed by default on my company's computers (it goes
without saying that everything works fine with python 2.7.10).

I'm a beginner in python, but simply importing ctypes at the beginning
of the script does the trick. I was wondering if submitting a patch
for this issue is worth the trouble, when a satisfying solution is not
using a 4 years old version of python.
If you're able to submit a patch that would be great!
Lars's 4d25dc44 (git-p4: check free space during streaming,
2015-09-26) introduced two references to ctypes.* and there is no
'import ctypes' anywhere in the script.

I do not follow Python development, but does the above mean that
with recent 2.x you can say ctypes without first saying "import
ctypes"?  It feels somewhat non-pythonesque that identifiers like
this is given to you without you asking with an explicit 'import',
so I am puzzled.

Re: Git-p4 fails with NameError with python 2.7.2

From: Manlio Perillo <hidden>
Date: 2016-06-15 23:06:55

On Tue, Oct 20, 2015 at 6:00 PM, Junio C Hamano [off-list ref] wrote:
Luke Diamand [off-list ref] writes:
quoted
On 20 October 2015 at 11:34, Etienne Girard [off-list ref] wrote:
quoted
Hello,

Git-p4 fail when I try to rebase with the error: "NameError: global
name 'ctypes' is not defined". The error occurs when I use python
2.7.2 that is installed by default on my company's computers (it goes
without saying that everything works fine with python 2.7.10).

I'm a beginner in python, but simply importing ctypes at the beginning
of the script does the trick. I was wondering if submitting a patch
for this issue is worth the trouble, when a satisfying solution is not
using a 4 years old version of python.
If you're able to submit a patch that would be great!
Lars's 4d25dc44 (git-p4: check free space during streaming,
2015-09-26) introduced two references to ctypes.* and there is no
'import ctypes' anywhere in the script.

I do not follow Python development, but does the above mean that
with recent 2.x you can say ctypes without first saying "import
ctypes"?

No.
You need to import the ctypes  module.

However in Python it is possible to "inject" the ctypes module (and
any other name) in the builtin namespace.
The builtin module contains names that are accessible without importing them:
https://docs.python.org/2/library/__builtin__.html

IMHO, some code  is messing with the __builtin__ module.

Running pyflakes on git-p4.py code I get:
git-p4.py:26: 'zlib' imported but unused
git-p4.py:640: local variable 'v' is assigned to but never used
git-p4.py:2114: local variable 'rhs_index' is assigned to but never used

Running pylint I get a **lot** of warning and style issues; and the
following errors:
E:112,21: Undefined variable 'ctypes' (undefined-variable)
E:113, 8: Undefined variable 'ctypes' (undefined-variable)
E:113,51: Undefined variable 'ctypes' (undefined-variable)
E:113,94: Undefined variable 'ctypes' (undefined-variable)
E:1002,51: No value for argument 'contentFile' in method call
(no-value-for-parameter)

pyflakes is not reporting an error for ctypes.
Whatever the cause, the code must be fixed to import the ctypes module.

P.S.:
Sorry for the double message.
The first message contained an HTML part and was rejected by vger.kernel.org.


Regards  Manlio

[PATCH] git-p4: import the ctypes module

From: Dennis Kaarsemaker <hidden>
Date: 2016-06-15 23:06:56

The ctypes module is used on windows to calculate free disk space, so it
must be imported.

Signed-off-by: Dennis Kaarsemaker <redacted>
---
 git-p4.py | 1 +
 1 file changed, 1 insertion(+)

On di, 2015-10-20 at 09:00 -0700, Junio C Hamano wrote:
Luke Diamand [off-list ref] writes:
quoted
On 20 October 2015 at 11:34, Etienne Girard <
etienne.g.girard@gmail.com> wrote:
quoted
Hello,

Git-p4 fail when I try to rebase with the error: "NameError:
global
name 'ctypes' is not defined". The error occurs when I use python
2.7.2 that is installed by default on my company's computers (it
goes
without saying that everything works fine with python 2.7.10).

I'm a beginner in python, but simply importing ctypes at the
beginning
of the script does the trick. I was wondering if submitting a
patch
for this issue is worth the trouble, when a satisfying solution
is not
using a 4 years old version of python.
If you're able to submit a patch that would be great!
Lars's  (git-p4: check free space during streaming,
2015-09-26) introduced two references to ctypes.* and there is no
'import ctypes' anywhere in the script.

I do not follow Python development, but does the above mean that
with recent 2.x you can say ctypes without first saying "import
ctypes"?  It feels somewhat non-pythonesque that identifiers like
this is given to you without you asking with an explicit 'import',
so I am puzzled.
No, you cannot do that. The reason others may not have noticed this bug is that
in git-p4.py, ctypes is only used on windows.

 111     if platform.system() == 'Windows':
 112         free_bytes = ctypes.c_ulonglong(0)
 113         ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(os.getcwd()), None, None, ctypes.pointer(free_bytes))

The fact that it works for the OP with 2.7.10 is puzzling (assuming that it's
on the same system). But this patch should help.
diff --git a/git-p4.py b/git-p4.py
index daa60c6..212ef2b 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -24,6 +24,7 @@ import shutil
 import stat
 import zipfile
 import zlib
+import ctypes
 
 try:
     from subprocess import CalledProcessError
-- 
2.6.2-323-g60bd420
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help