diff options
| author | Mardegan, Alberto <AMardegan@luxoft.com> | 2017-09-21 14:33:52 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-09-25 14:14:17 +0100 |
| commit | e4dae6320506db320d236c6b45f14f15a7c71c17 (patch) | |
| tree | 746d2e29d787e6204a744405ef73c78409b875f2 | |
| parent | 7a822506c0ae402f65c306ce10c05e195138c464 (diff) | |
| download | poky-e4dae6320506db320d236c6b45f14f15a7c71c17.tar.gz | |
bitbake: bitbake: lib/bb/utils: fix movefile() copy to dir fallback
When the destination is a directory, building the the destination file
path is always needed. That's because even if the copy fallback is
taken, it's always followed by a rename.
(Bitbake rev: 14c17480827ced2e03c1b62dc839696421fc4de8)
Signed-off-by: Alberto Mardegan <amardegan@luxoft.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/bb/utils.py | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 8550af34ae..c540b49cf6 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
| @@ -771,13 +771,14 @@ def movefile(src, dest, newmtime = None, sstat = None): | |||
| 771 | return None | 771 | return None |
| 772 | 772 | ||
| 773 | renamefailed = 1 | 773 | renamefailed = 1 |
| 774 | # os.rename needs to know the dest path ending with file name | ||
| 775 | # so append the file name to a path only if it's a dir specified | ||
| 776 | srcfname = os.path.basename(src) | ||
| 777 | destpath = os.path.join(dest, srcfname) if os.path.isdir(dest) \ | ||
| 778 | else dest | ||
| 779 | |||
| 774 | if sstat[stat.ST_DEV] == dstat[stat.ST_DEV]: | 780 | if sstat[stat.ST_DEV] == dstat[stat.ST_DEV]: |
| 775 | try: | 781 | try: |
| 776 | # os.rename needs to know the dest path ending with file name | ||
| 777 | # so append the file name to a path only if it's a dir specified | ||
| 778 | srcfname = os.path.basename(src) | ||
| 779 | destpath = os.path.join(dest, srcfname) if os.path.isdir(dest) \ | ||
| 780 | else dest | ||
| 781 | os.rename(src, destpath) | 782 | os.rename(src, destpath) |
| 782 | renamefailed = 0 | 783 | renamefailed = 0 |
| 783 | except Exception as e: | 784 | except Exception as e: |
| @@ -791,8 +792,8 @@ def movefile(src, dest, newmtime = None, sstat = None): | |||
| 791 | didcopy = 0 | 792 | didcopy = 0 |
| 792 | if stat.S_ISREG(sstat[stat.ST_MODE]): | 793 | if stat.S_ISREG(sstat[stat.ST_MODE]): |
| 793 | try: # For safety copy then move it over. | 794 | try: # For safety copy then move it over. |
| 794 | shutil.copyfile(src, dest + "#new") | 795 | shutil.copyfile(src, destpath + "#new") |
| 795 | os.rename(dest + "#new", dest) | 796 | os.rename(destpath + "#new", destpath) |
| 796 | didcopy = 1 | 797 | didcopy = 1 |
| 797 | except Exception as e: | 798 | except Exception as e: |
| 798 | print('movefile: copy', src, '->', dest, 'failed.', e) | 799 | print('movefile: copy', src, '->', dest, 'failed.', e) |
| @@ -813,9 +814,9 @@ def movefile(src, dest, newmtime = None, sstat = None): | |||
| 813 | return None | 814 | return None |
| 814 | 815 | ||
| 815 | if newmtime: | 816 | if newmtime: |
| 816 | os.utime(dest, (newmtime, newmtime)) | 817 | os.utime(destpath, (newmtime, newmtime)) |
| 817 | else: | 818 | else: |
| 818 | os.utime(dest, (sstat[stat.ST_ATIME], sstat[stat.ST_MTIME])) | 819 | os.utime(destpath, (sstat[stat.ST_ATIME], sstat[stat.ST_MTIME])) |
| 819 | newmtime = sstat[stat.ST_MTIME] | 820 | newmtime = sstat[stat.ST_MTIME] |
| 820 | return newmtime | 821 | return newmtime |
| 821 | 822 | ||
