# HG changeset patch # User Augie Fackler # Date 1495843385 14400 # Node ID 197eb93560b3957ba594d935adf8528bf48954bf # Parent 870248603a4e8321fb7a6a9ce25bb095892638d8 osx: override default exclude filter for pkgbuild To quote `man 1 pkgbuild`: --filter filter-expression By default, --root will include the entire contents of the given root-path in the package payload, except for any .svn or CVS directories, and any .DS_Store files. You can override these default filters by specifying one or more --filter options. Each filter-expression is an re_format(7) ``extended'' expression: any path in the root which matches any of the given expressions will be excluded from the pack- age payload. (Note that specifying even one --filter inhibits the default filters, so you must respecify the default fil- ters if you still want them to be used.) It turns out the default filter these days *also* includes .git and .hg. Notice how that filter expression is a regular expression? That (presumably unintentionally) prevents a file named "chg" or "_hg" from getting included in the distribution. Many many thanks to spectral@ for trying to include a _hg file which led us to figure this bug out. Bug filed with Apple for this as rdar://problem/32437369, mentioning both the gap in documentation and the wrong defaults. diff -r 870248603a4e -r 197eb93560b3 Makefile --- a/Makefile Wed May 31 19:24:00 2017 -0300 +++ b/Makefile Fri May 26 20:03:05 2017 -0400 @@ -164,6 +164,9 @@ --root=build/mercurial/ --prefix=/usr/local/ \ --install-lib=/Library/Python/2.7/site-packages/ make -C doc all install DESTDIR="$(PWD)/build/mercurial/" + # Place a bogon .DS_Store file in the target dir so we can be + # sure it doesn't get included in the final package. + touch build/mercurial/.DS_Store # install zsh completions - this location appears to be # searched by default as of macOS Sierra. install -d build/mercurial/usr/local/share/zsh/site-functions/ @@ -177,7 +180,7 @@ mkdir -p $${OUTPUTDIR:-dist} HGVER=$$((cat build/mercurial/Library/Python/2.7/site-packages/mercurial/__version__.py; echo 'print(version)') | python) && \ OSXVER=$$(sw_vers -productVersion | cut -d. -f1,2) && \ - pkgbuild --root build/mercurial/ \ + pkgbuild --filter \\.DS_Store --root build/mercurial/ \ --identifier org.mercurial-scm.mercurial \ --version "$${HGVER}" \ build/mercurial.pkg && \ diff -r 870248603a4e -r 197eb93560b3 tests/test-mac-packages.t --- a/tests/test-mac-packages.t Wed May 31 19:24:00 2017 -0300 +++ b/tests/test-mac-packages.t Fri May 26 20:03:05 2017 -0400 @@ -18,6 +18,11 @@ Gather list of all installed files: $ lsbom mercurial.pkg/Bom > boms.txt +We've had problems with the filter logic in the past. Make sure no +.DS_Store files ended up in the final package: + $ grep DS_S boms.txt + [1] + Spot-check some randomly selected files: $ grep bdiff boms.txt | cut -d ' ' -f 1,2,3 ./Library/Python/2.7/site-packages/mercurial/bdiff.so 100755 0/0