diff --git a/pkg/pkg.mk b/pkg/pkg.mk index 626610a924..b159535eea 100644 --- a/pkg/pkg.mk +++ b/pkg/pkg.mk @@ -38,21 +38,25 @@ ifeq ($(QUIET),1) GIT_QUIET ?= --quiet endif +# Use explicit '--git-dir' and '--work-tree' to prevent issues when the +# directory is not a git repository for any reason (clean -xdff or others) +GIT_IN_PKG = git -C $(PKG_BUILDDIR) --git-dir=.git --work-tree=. + GITFLAGS ?= -c user.email=buildsystem@riot -c user.name="RIOT buildsystem" GITAMFLAGS ?= $(GIT_QUIET) --no-gpg-sign --ignore-whitespace --whitespace=nowarn ifneq (,$(wildcard $(PKG_DIR)/patches)) $(PKG_BUILDDIR)/.git-patched: git-ensure-version $(PKG_DIR)/Makefile $(PKG_DIR)/patches/*.patch - $(Q)git -C $(PKG_BUILDDIR) checkout $(GIT_QUIET) -f $(PKG_VERSION) - $(Q)git $(GITFLAGS) -C $(PKG_BUILDDIR) am $(GITAMFLAGS) "$(PKG_DIR)"/patches/*.patch + $(Q)$(GIT_IN_PKG) checkout $(GIT_QUIET) -f $(PKG_VERSION) + $(Q)$(GIT_IN_PKG) $(GITFLAGS) am $(GITAMFLAGS) "$(PKG_DIR)"/patches/*.patch $(Q)touch $@ endif git-ensure-version: $(PKG_BUILDDIR)/.git-downloaded - @if [ $(shell git -C $(PKG_BUILDDIR) rev-parse HEAD) != $(PKG_VERSION) ] ; then \ - git -C $(PKG_BUILDDIR) clean $(GIT_QUIET) -xdff ; \ - git -C $(PKG_BUILDDIR) fetch $(GIT_QUIET) "$(PKG_URL)" "$(PKG_VERSION)" ; \ - git -C $(PKG_BUILDDIR) checkout $(GIT_QUIET) -f $(PKG_VERSION) ; \ + @if [ $(shell $(GIT_IN_PKG) rev-parse HEAD) != $(PKG_VERSION) ] ; then \ + $(GIT_IN_PKG) clean $(GIT_QUIET) -xdff ; \ + $(GIT_IN_PKG) fetch $(GIT_QUIET) "$(PKG_URL)" "$(PKG_VERSION)" ; \ + $(GIT_IN_PKG) checkout $(GIT_QUIET) -f $(PKG_VERSION) ; \ touch $(PKG_BUILDDIR)/.git-downloaded ; \ fi @@ -65,8 +69,8 @@ $(PKG_BUILDDIR)/.git-downloaded: clean:: @test -d $(PKG_BUILDDIR) && { \ rm $(PKG_BUILDDIR)/.git-patched ; \ - git -C $(PKG_BUILDDIR) clean -f ; \ - git -C $(PKG_BUILDDIR) checkout "$(PKG_VERSION)"; \ + $(GIT_IN_PKG) clean -f ; \ + $(GIT_IN_PKG) checkout "$(PKG_VERSION)"; \ make $(PKG_BUILDDIR)/.git-patched ; \ touch $(PKG_BUILDDIR)/.git-downloaded ; \ } > /dev/null 2>&1 || true