diff options
author | Gary Oberbrunner <garyo@oberbrunner.com> | 2008-09-06 02:12:20 (GMT) |
---|---|---|
committer | Gary Oberbrunner <garyo@oberbrunner.com> | 2008-09-06 02:12:20 (GMT) |
commit | c97968c9f230b4b2d91df5376ed9c122276d69a7 (patch) | |
tree | 195884bb906fcd1c7c73cfeea14b8caa6d38464d | |
parent | 587587669d48a2cc6ccfc8295b573d225fe3cb60 (diff) | |
download | SCons-c97968c9f230b4b2d91df5376ed9c122276d69a7.zip SCons-c97968c9f230b4b2d91df5376ed9c122276d69a7.tar.gz SCons-c97968c9f230b4b2d91df5376ed9c122276d69a7.tar.bz2 |
Make Glob() sort, to prevent spurious rebuilds. Fixes issue #2131.
-rw-r--r-- | src/CHANGES.txt | 5 | ||||
-rw-r--r-- | src/engine/SCons/Node/FS.py | 1 | ||||
-rw-r--r-- | src/engine/SCons/Node/FSTests.py | 15 |
3 files changed, 17 insertions, 4 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 7045b0f..9f46e88 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -10,6 +10,11 @@ RELEASE 1.X - XXX + From Gary Oberbrunner: + + - Make Glob() sort the returned list of Files or Nodes + to prevent spurious rebuilds. + From Ian P. Cardenas: - Fix Glob() polluting LIBPATH by returning copy of list diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index eda6e71..182acd2 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -1865,6 +1865,7 @@ class Dir(Base): if strings: r = map(lambda x, d=str(dir): os.path.join(d, x), r) result.extend(r) + result.sort(lambda a, b: cmp(str(a), str(b))) return result def _glob1(self, pattern, ondisk=True, source=False, strings=False): diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index 9d3cabb..ca854b2 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -2162,17 +2162,17 @@ class GlobTestCase(_tempdirTestCase): self.hhh = fs.File('hhh') self.iii = fs.File('iii') self.subdir1 = fs.Dir('subdir1') + self.subdir1_lll = self.subdir1.File('lll') self.subdir1_jjj = self.subdir1.File('jjj') self.subdir1_kkk = self.subdir1.File('kkk') - self.subdir1_lll = self.subdir1.File('lll') self.subdir2 = fs.Dir('subdir2') - self.subdir2_jjj = self.subdir2.File('jjj') - self.subdir2_kkk = self.subdir2.File('kkk') self.subdir2_lll = self.subdir2.File('lll') + self.subdir2_kkk = self.subdir2.File('kkk') + self.subdir2_jjj = self.subdir2.File('jjj') self.sub = fs.Dir('sub') self.sub_dir3 = self.sub.Dir('dir3') - self.sub_dir3_jjj = self.sub_dir3.File('jjj') self.sub_dir3_kkk = self.sub_dir3.File('kkk') + self.sub_dir3_jjj = self.sub_dir3.File('jjj') self.sub_dir3_lll = self.sub_dir3.File('lll') @@ -2396,6 +2396,13 @@ class GlobTestCase(_tempdirTestCase): self.do_cases(cases) + def test_sort(self): + """Test whether globbing sorts""" + join = os.path.join + # At least sometimes this should return out-of-order items + # if Glob doesn't sort. + g = self.fs.Glob('disk-sub/*', strings=True) + assert g == ['disk-sub/disk-ddd', 'disk-sub/disk-eee', 'disk-sub/disk-fff'], str(g) + " is not sorted, but should be!" class RepositoryTestCase(_tempdirTestCase): |