Changeset be63b8a in rtems-source-builder


Ignore:
Timestamp:
Feb 17, 2015, 10:56:41 PM (4 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
6168929
Parents:
9ab4ab4
git-author:
Chris Johns <chrisj@…> (02/17/15 22:56:41)
git-committer:
Chris Johns <chrisj@…> (02/17/15 23:26:52)
Message:

Fix coping and delete on Windows.

This change uses a python.org feature to make the paths uicode
which changes the WIN32 API used. The default WIN32 is limited
to file lengths of 256 characters.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source-builder/sb/path.py

    r9ab4ab4 rbe63b8a  
    11#
    22# RTEMS Tools Project (http://www.rtems.org/)
    3 # Copyright 2010-2012 Chris Johns (chrisj@rtems.org)
     3# Copyright 2010-2015 Chris Johns (chrisj@rtems.org)
    44# All rights reserved.
    55#
     
    129129    def _onerror(function, path, excinfo):
    130130        import stat
     131        if windows:
     132            path = "\\\\?\\" + path
    131133        if not os.access(path, os.W_OK):
    132134            # Is the error an access error ?
     
    148150
    149151def copy_tree(src, dst):
     152    trace = False
     153
    150154    hsrc = host(src)
    151155    hdst = host(dst)
    152156
    153     if os.path.exists(src):
    154         names = os.listdir(src)
     157    if os.path.exists(hsrc):
     158        names = os.listdir(hsrc)
    155159    else:
    156160        names = []
    157161
    158     if not os.path.isdir(dst):
    159         os.makedirs(dst)
     162    if trace:
     163        print 'path.copy_tree:'
     164        print '   src: %s' % (src)
     165        print '  hsrc: %s' % (hsrc)
     166        print '   dst: %s' % (dst)
     167        print '  hdst: %s' % (hdst)
     168        print ' names: %r' % (names)
     169
     170    if not os.path.isdir(hdst):
     171        if trace:
     172            print ' mkdir: %s' % (hdst)
     173        os.makedirs(hdst)
    160174
    161175    for name in names:
    162         srcname = os.path.join(src, name)
    163         dstname = os.path.join(dst, name)
     176        srcname = os.path.join(hsrc, name)
     177        dstname = os.path.join(hdst, name)
    164178        try:
    165179            if os.path.islink(srcname):
     
    181195                copy_tree(srcname, dstname)
    182196            else:
    183                 shutil.copy2(srcname, dstname)
     197                if windows:
     198                    shutil.copy2("\\\\?\\" + srcname, dstname)
     199                else:
     200                    shutil.copy2(srcname, dstname)
    184201        except shutil.Error, err:
    185             raise error.general('copying tree: %s -> %s: %s' % (src, dst, str(err)))
     202            raise error.general('copying tree: %s -> %s: %s' % \
     203                                (hsrc, hdst, str(err)))
    186204        except EnvironmentError, why:
    187             raise error.general('copying tree: %s -> %s: %s' % (srcname, dstname, str(why)))
     205            raise error.general('copying tree: %s -> %s: %s' % \
     206                                (srcname, dstname, str(why)))
    188207    try:
    189         shutil.copystat(src, dst)
     208        shutil.copystat(hsrc, hdst)
    190209    except OSError, why:
    191210        if windows:
     
    193212                pass
    194213        else:
    195             raise error.general('copying tree: %s -> %s: %s' % (src, dst, str(why)))
     214            raise error.general('copying tree: %s -> %s: %s' % (hsrc, hdst, str(why)))
    196215
    197216if __name__ == '__main__':
Note: See TracChangeset for help on using the changeset viewer.