Tag:
Branch:
Tree:
8a6c0aa13d
0.35.1
0.41
0.42
0.42-msi
0.44
0.45
0.46
0.47
0.48
0.49
0.50
0.51
0.52
0.53
0.54
0.55
0.56
0.57
0.58
0.59
0.60
0.61
0.62
0.63
0.64
0.tryme
1.0
1.1
1.2
1.3
1.4
1.5
1.tryme
biggen
builddirupgrade
corporations
crossenvvar
darwin_arch
deprecationdeadline
dirc2
docbuild
dolphin
dotinclude
es/0.61-plus-cython
fedora
gentarget
gh-pages
killpy3
lang-enum
master
mingwdisable
ninjalink
opthelper
optionlookup
optionrefactor
optionrefactor2
optiontree
overrides
pr8895-old
remove-parse_cmd_line_options
revert-10757-llvm-config
rustcmix
tingping/test-gir-program
tingping/test-profile
tingping/xdg-module
trigger-ciimage-builder
uniquefilenames
useargsintests
versionfile
vsmodtest
wip/default-directories
wip/ignatenko/gtester
wip/tingping/xdg-auto-post-install
wip/xclaesse/pr-10714
wip/xclaesse/pr-12097
xclaesse/pr11561-orig
0.1.0
0.10.0
0.11.0
0.12.0
0.13.0
0.14.0
0.15.0
0.16.0
0.17.0
0.18.0
0.19.0
0.2.0
0.20.0
0.21.0
0.22.0
0.23.0
0.24.0
0.25.0
0.26.0
0.27.0
0.28.0
0.29.0
0.30.0
0.31.0
0.32.0
0.33.0
0.34.0
0.35.0
0.35.1
0.36.0
0.37.0
0.37.1
0.38.0
0.38.1
0.39.0
0.39.1
0.4.0
0.4.1
0.40.0
0.40.1
0.41.0
0.41.1
0.41.2
0.42.0
0.42.1
0.43.0
0.44.0
0.44.1
0.45.0
0.45.1
0.46.0
0.46.1
0.47.0
0.47.1
0.47.2
0.48.0
0.48.1
0.48.2
0.49.0
0.49.1
0.49.2
0.5.0
0.50.0
0.50.1
0.51.0
0.51.1
0.51.2
0.52.0
0.52.1
0.53.0
0.53.1
0.53.2
0.54.0
0.54.0.rc1
0.54.1
0.54.2
0.54.3
0.55.0
0.55.0.rc1
0.55.0.rc2
0.55.1
0.55.2
0.55.3
0.56.0
0.56.0.rc1
0.56.0.rc2
0.56.1
0.56.2
0.57.0
0.57.0.rc1
0.57.1
0.57.2
0.58.0
0.58.0.rc1
0.58.1
0.58.2
0.59.0
0.59.0.rc1
0.59.0.rc2
0.59.1
0.59.2
0.59.3
0.59.4
0.6.0
0.60.0
0.60.0.rc1
0.60.0rc2
0.60.1
0.60.2
0.60.3
0.61.0
0.61.0rc1
0.61.1
0.61.2
0.61.3
0.61.4
0.61.5
0.62.0
0.62.0rc1
0.62.0rc2
0.62.1
0.62.2
0.63.0
0.63.0.rc2
0.63.0rc1
0.63.1
0.63.2
0.63.3
0.64.0
0.64.0rc1
0.64.0rc2
0.64.1
0.7.0
0.8.0
0.9.0
1.0.0
1.0.0rc1
1.0.0rc2
1.0.1
1.0.2
1.1.0
1.1.0rc1
1.1.0rc2
1.1.1
1.2.0
1.2.0rc1
1.2.0rc2
1.2.0rc3
1.2.1
1.2.2
1.2.3
1.3.0
1.3.0rc1
1.3.0rc2
1.3.0rc3
1.3.1
1.3.2
1.4.0
1.4.0rc1
1.4.0rc2
1.4.1
1.4.2
1.5.0
1.5.0rc1
1.5.0rc2
1.5.0rc3
1.5.1
1.5.2
1.6.0
1.6.0rc1
1.6.0rc2
${ noResults }
3 Commits (8a6c0aa13d6950332b955531ae0400303741d4b1)
Author | SHA1 | Message | Date |
---|---|---|---|
Peter Hutterer | d436869a89 |
Remove directories created by ninja install
Introduce a DirMaker class that disassembles the path up to '/' and stores all directories in a list. That list is in creation order and pre-existing directories are ignored, i.e. creating the two paths '/usr/share/foo/bar/baz' and '/usr/share/foo/bar/boo' is stored as [ '/usr/share/foo', '/usr/share/foo/bar', '/usr/share/foo/bar/baz', '/usr/share/foo/bar/boo' ] This is on the assumption that /usr/share already existed. After all files have been installed, the list of created directories is appended in reverse order to the install log. The uninstall script then triggers rmdir on all directories. If a custom install script drops files into the directories, removing those will fail. This matches the current expectation, see the existing warning "Remember that files created by custom scripts have not been removed." Unfortunately, this makes the behavior on uninstall inconsistent. Assuming a non-existing prefix, ninja install && ninja uninstall removes all traces of the install. However, ninja install && ninja install && ninja uninstall removes the files only, not the directories as they already existed. This could be fixed by just unconditionally removing any (emtpy) directories that we drop files into, at the risk of removing system directories if empty. For example, one could imagine /etc/foo.conf.d/ to be removed in that case if it is empty. https://github.com/mesonbuild/meson/issues/2032 |
7 years ago |
Dylan Baker | a8173630ea |
Don't use len() to test emptiness vs not emptiness
Meson has a common pattern of using 'if len(foo) == 0:' or 'if len(foo) != 0:', however, this is a common anti-pattern in python. Instead tests for emptiness/non-emptiness should be done with a simple 'if foo:' or 'if not foo:' Consider the following: >>> import timeit >>> timeit.timeit('if len([]) == 0: pass') 0.10730923599840025 >>> timeit.timeit('if not []: pass') 0.030033907998586074 >>> timeit.timeit('if len(['a', 'b', 'c', 'd']) == 0: pass') 0.1154778649979562 >>> timeit.timeit("if not ['a', 'b', 'c', 'd']: pass") 0.08259823200205574 >>> timeit.timeit('if len("") == 0: pass') 0.089759664999292 >>> timeit.timeit('if not "": pass') 0.02340641999762738 >>> timeit.timeit('if len("foo") == 0: pass') 0.08848102600313723 >>> timeit.timeit('if not "foo": pass') 0.04032287199879647 And for the one additional case of 'if len(foo.strip()) == 0', which can be replaced with 'if not foo.isspace()' >>> timeit.timeit('if len(" ".strip()) == 0: pass') 0.15294511600222904 >>> timeit.timeit('if " ".isspace(): pass') 0.09413968399894657 >>> timeit.timeit('if len(" abc".strip()) == 0: pass') 0.2023209120015963 >>> timeit.timeit('if " abc".isspace(): pass') 0.09571301700270851 In other words, it's always a win to not use len(), when you don't actually want to check the length. |
8 years ago |
Jussi Pakkanen | 0a14ad63de |
Add simple uninstall target. Closes #753.
|
8 years ago |