[PATCH 1 of 2] osutil.c extension for Win32

Patrick Mézard pmezard at gmail.com
Fri Sep 5 06:10:24 CDT 2008


Petr Kodl a écrit :
> # HG changeset patch
> # User Petr Kodl<petrkodl at gmail.com>
> # Date 1220485949 14400
> # Node ID e150128b40c0f80871799c2d8de3684d767729f2
> # Parent  6c4a08270222569ba906f4f1c7860783eec19225
> osutil.c extension for Win32

[...]

> +            if(!isdir || (strcmp(fd.cFileName,".") && strcmp(fd.cFileName,"..") ))
> +            {
> +                PyObject* item = PyTuple_New(keep_stat ? 3 : 2);
> +                if(!item) 
> +                {
> +                    PyErr_NoMemory();
> +                    goto end;
> +                }
> +                PyTuple_SetItem(item,0,PyString_FromString(fd.cFileName));
> +                PyTuple_SetItem(item,1,PyInt_FromLong(isdir ? _S_IFDIR : _S_IFREG));
> +                if(keep_stat) 
> +                {
> +                    py_st = PyObject_CallObject((PyObject *)&listdir_stat_type,ctor_args);
> +                    if(!py_st) 
> +                    {
> +                        PyErr_NoMemory();
> +                        goto end;
> +                    }
> +			        stp = &((struct listdir_stat *)py_st)->st;
> +                    stp->st_mtime = to_python_time(&fd.ftLastWriteTime);
> +                    stp->st_ctime = to_python_time(&fd.ftCreationTime);
> +                    stp->st_dev   = 0;
> +                    stp->st_size  = 0;
> +                    stp->st_mode  = (isdir ? (S_IFDIR | 0111) : S_IFREG) | (isro ? 0444 : 0666); 
> +                    if(!isdir) 
> +                    {
> +                        char* dot = strrchr(fd.cFileName,'.');
> +	                    if (dot) 
> +                        {
> +		                    if(     !stricmp(dot,".bat") 
> +                                ||  !stricmp(dot,".cmd")
> +		                        ||  !stricmp(dot,".exe")
> +		                        ||  !stricmp(dot,".com"))
> +		                    stp->st_mode |= 0111;

File execute-bit are not currently handled under Windows, is there any reason we want to fake them here ?

[...]

> diff -r 6c4a08270222 -r e150128b40c0 setup.py
> --- a/setup.py	Wed Sep 03 19:03:57 2008 +0200
> +++ b/setup.py	Wed Sep 03 19:52:29 2008 -0400
> @@ -101,9 +101,10 @@
>  packages = ['mercurial', 'mercurial.hgweb', 'hgext', 'hgext.convert',
>              'hgext.highlight']
>  
> +ext_modules.append(Extension('mercurial.osutil', ['mercurial/osutil.c']))
> +
>  try:
>      import posix
> -    ext_modules.append(Extension('mercurial.osutil', ['mercurial/osutil.c']))
>  
>      if sys.platform == 'linux2' and os.uname()[2] > '2.6':
>          # The inotify extension is only usable with Linux 2.6 kernels.

I don't really agree with [all platforms] == [posix + win32]. I'd rather keep something similar to your previous try/except with mscvrt or test the os.name.

--
Patrick Mézard


More information about the Mercurial-devel mailing list