tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: python2.6 copystat and NFS, and mercurial



On Wed, Mar 17, 2010 at 03:09:58AM +0000, David Holland wrote:
> Back in September I suggested this:
> 
>  : Maybe have os.chflags suppress the error if errno == EOPNOTSUPP and
>  : the flags argument is 0?
> 
> Thoughts anyone?

def copystat(src, dst):
        st = os.stat(src)
        st_dst = os.stat(dst)
        mode = stat.S_IMODE(st.st_mode)
        mode_dst = stat.S_IMODE(st_dst.st_mode)
        if hasattr(os, 'utime'):
                if st.st_atime != st_dst.st_atime or st.st_mtime != 
st_dst.st_mtime
                        os.utime(dst, (st.st_atime, st.st_mtime))
        if hasattr(os, 'chmod'):
                if mode != mode_dst:
                        os.chmod(dst, mode)
        if hasattr(os, 'chflags') and hasattr(st, 'st_flags'):
                if st.st_flags != st_dst.st_flags:
                        os.chflags(dst, st.st_flags)

should do the trick. E.g. only issue update syscalls if they would
actually change something. Should also reduce the number of system
calls.

Joerg


Home | Main Index | Thread Index | Old Index