Update to reflect upstream repository 'https://github.com:nestlabs/nlbuild-autotools' at tag '1.6.4'.
diff --git a/third_party/nlbuild-autotools/repo/.default-version b/third_party/nlbuild-autotools/repo/.default-version
index 266146b..9edc58b 100644
--- a/third_party/nlbuild-autotools/repo/.default-version
+++ b/third_party/nlbuild-autotools/repo/.default-version
@@ -1 +1 @@
-1.6.3
+1.6.4
diff --git a/third_party/nlbuild-autotools/repo/CHANGES b/third_party/nlbuild-autotools/repo/CHANGES
index ef886a0..ef7857f 100644
--- a/third_party/nlbuild-autotools/repo/CHANGES
+++ b/third_party/nlbuild-autotools/repo/CHANGES
@@ -1,3 +1,9 @@
+1.6.4 (2018-11-14)
+
+ * Added support for pulling down remote package dependencies using
+ git clone (default) or git submodule depending on the setting of
+ pull.method in repos.conf.
+
1.6.3 (2018-10-19)
* Added support for coverage-local and check-local targets. Added
diff --git a/third_party/nlbuild-autotools/repo/README.md b/third_party/nlbuild-autotools/repo/README.md
index 39347f6..08f9696 100644
--- a/third_party/nlbuild-autotools/repo/README.md
+++ b/third_party/nlbuild-autotools/repo/README.md
@@ -130,8 +130,8 @@
nlbuild-autotools supports this by providing a means to pull down
external git package repositories that your package depends on using
-git submodules when you use and support --with-<package>=internal as a
-location for your dependent packages.
+either git clone (default) or git submodules when you use and support
+--with-<package>=internal as a location for your dependent packages.
The example 'Makefile-bootstrap' has been provided as infrastructure to
make this easy for you as a package maintainer and for your package
@@ -202,9 +202,11 @@
In addition to the 'repos' target, the bootstrap makefile also
supports the 'clean-repos' target that undoes the work of the 'repos'
-target. It will clean-up all of the synchronized repositories, all the
-while being careful to ensure it does not disturb existing git or git
-submodule state your project might be using.
+target. When using either the 'clone' or 'submodule' pull methods, it
+will clean-up all of the synchronized repositories. When using the
+'submodule' pull method, it also is careful to ensure it does not
+disturb existing git or git submodule state your project might be
+using.
The infrastructure all works, of course, whether you are working in or
out of git and whether you have colocated or non-colocated source and
@@ -220,9 +222,13 @@
them.
The format of 'repos.conf' _almost_ precisely follows that used by git
-submodules with one notable addition, the 'commit' key. The 'commit'
-key allows you to specify not only what branch to checkout but, more
-precisely, what commit or tag to checkout rather than just _HEAD_ of a
+submodules with two notable additions, the 'pull' section and the
+'commit' key. The 'pull' section allows you to optionally specify the
+'method' key as 'clone' or 'submodule' (defaulting to 'clone' when the
+key is not present). This selects whether 'git clone' or 'git
+submodule' is used to pull down repositories. The 'commit' key allows
+you to specify not only what branch to checkout but, more precisely,
+what commit or tag to checkout rather than just _HEAD_ of a
branch. More information is available in 'Makefile-bootstrap' or with
`man gitmodules` or `git help gitmodules`.
diff --git a/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am b/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am
index f052903..19d50e3 100644
--- a/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am
+++ b/third_party/nlbuild-autotools/repo/examples/Makefile-tests.am
@@ -90,10 +90,10 @@
$(@PACKAGE_SHORT_UPPER@_COVERAGE_BUNDLE):
$(call create-directory)
-$(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO): check | $(@PACKAGE_SHORT_UPPER@_COVERAGE_BUNDLE)
+$(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO): check-local | $(@PACKAGE_SHORT_UPPER@_COVERAGE_BUNDLE)
$(call generate-coverage-report,${top_builddir})
-coverage: $(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO)
+coverage-local: $(@PACKAGE_SHORT_UPPER@_COVERAGE_INFO)
clean-local: clean-local-coverage
diff --git a/third_party/nlbuild-autotools/repo/examples/repos.conf b/third_party/nlbuild-autotools/repo/examples/repos.conf
index f86e079..dce15b7 100644
--- a/third_party/nlbuild-autotools/repo/examples/repos.conf
+++ b/third_party/nlbuild-autotools/repo/examples/repos.conf
@@ -1,7 +1,7 @@
# You can synchronize a remote package on which yours depends with git
# to 'third_party' (or another directory).
#
-# Here is an example using nlunit-test. Uncomment and adapter or
+# Here is an example using nlunit-test. Uncomment and adapt or
# delete this, as needed. If you do not have any packages to
# sychronize, then this file is unneeded and may be deleted from your
# project.
@@ -10,10 +10,19 @@
# Makefile.am, and third_party/Makefile.am and uncomment the appropriate
# sections there.
#
+# The 'pull' section is optional. The 'pull' section allows you to
+# optionally specify the 'method' key as 'clone' or 'submodule'
+# (defaulting to 'clone' when the key is not present). This selects
+# whether 'git clone' or 'git submodule' is used to pull down
+# repositories.
+#
# While the 'branch' key is required, the 'commit' key is
# optional. The 'commit' key allows you to specify a particular commit
# hash or tag if you do not want HEAD of the specified branch.
+# [pull]
+# method = clone
+#
# [submodule "nlunit-test"]
# path = third_party/nlunit-test/repo
# url = https://github.com/nestlabs/nlunit-test.git
diff --git a/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak b/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak
index 6ae8304..ec76a01 100644
--- a/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak
+++ b/third_party/nlbuild-autotools/repo/make/post/rules/repos.mak
@@ -1,5 +1,6 @@
#
# Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
+# Copyright 2018 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,31 +18,52 @@
#
# Description:
# This file is a make "footer" or post make header that defines make
-# convenience targets and templates for interacting with and managing git
-# submodules in the context of managing project dependencies.
+# convenience targets and templates for interacting with and managing
+# "foreign" (e.g., those outside of this project) git projects in the
+# context of managing project dependencies.
#
ifneq ($(REPOS),)
+# Stem for git clones and submodules
+
+__REPOS_GIT_STEM := /.git
+
# Stem for the git configuration file for a git repository.
-__REPOS_GIT_CONFIG_STEM := /.git/config
+__REPOS_GIT_CONFIG_STEM := $(__REPOS_GIT_STEM)/config
# Stem for the git cache directory for a git submodule
-__REPOS_GIT_MODULE_CACHE_STEM := /.git/modules
+__REPOS_GIT_MODULE_CACHE_STEM := $(__REPOS_GIT_STEM)/modules
# git submodule configuration file and path
__REPOS_GIT_MODULES_FILE := .gitmodules
__REPOS_GIT_MODULES_PATH := $(top_srcdir)/$(__REPOS_GIT_MODULES_FILE)
-# Stem for the git configuration file for a git submodule.
+# Stem for the git configuration file for a git clone or submodule.
-__REPOS_GIT_SUBMODULE_STEM := /.git
+__REPOS_GIT_CLONE_STEM := $(__REPOS_GIT_STEM)
+__REPOS_GIT_SUBMODULE_STEM := $(__REPOS_GIT_STEM)
+
+# Git "pull" method to use for retrieving repositories on which this
+# package may depend.
+#
+# This defaults to 'clone' if no configuration value is present.
+
+__REPOS_MAYBE_PULL_METHOD := $(call nlGitGetMethodForPullFromFile,$(REPOS_CONFIG))
+__REPOS_DEFAULT_PULL_METHOD := clone
+REPOS_PULL_METHOD := $(if $(__REPOS_MAYBE_PULL_METHOD),$(__REPOS_MAYBE_PULL_METHOD),$(__REPOS_DEFAULT_PULL_METHOD))
# Git repository configuration for this package, if it exists.
+#
+# This value is only relevant when the pull method is 'submodule'.
+ifeq ($(REPOS_PULL_METHOD),submodule)
REPOS_PACKAGE_GIT_PATH := $(top_srcdir)$(__REPOS_GIT_CONFIG_STEM)
+else
+REPOS_PACKAGE_GIT_PATH :=
+endif
# Sentinel Files
@@ -52,13 +74,13 @@
#
# REPOS_template <repo file> <repo name>
#
-# This template defines variables and targets used for inlining optional and required
-# third-party packages as package-internal copies.
+# This template defines variables and targets used for inlining optional and
+# required third-party packages as package-internal copies.
#
-# <repo file> - Path to the repo configuration file from which to get values for
-# named repo.
-# <repo name> - Name of the repository in <repo file> for which to get values for
-# branch, local path, and URL.
+# <repo file> - Path to the repo configuration file from which to get
+# values for named repo.
+# <repo name> - Name of the repository in <repo file> for which to get
+# values for branch, local path, and URL.
#
define REPOS_template
$(2)_repo_NAME := $(2)
@@ -82,11 +104,16 @@
$$($(2)_repo_PATH): $$($(2)_repo_GIT)
$$($(2)_repo_GIT): $(REPOS_PACKAGE_GIT_PATH) repos-warning
- @echo " SUBMODULE $$(subst $(__REPOS_GIT_SUBMODULE_STEM),,$$(@))"
- $(NL_V_AT)if ! test -f $(__REPOS_GIT_MODULES_PATH); then \
- touch $(REPOS_GIT_MODULES_SENTINEL); \
- fi
- $(NL_V_AT)$(GIT) -C $(top_srcdir) submodule -q add -f -b $$($(2)_repo_BRANCH) -- $$($(2)_repo_URL) $$($(2)_repo_PATH)
+ $(NL_V_AT)case "$(REPOS_PULL_METHOD)" in \
+ submodule) echo " SUBMODULE $$(subst $(__REPOS_GIT_SUBMODULE_STEM),,$$(@))"; \
+ if ! test -f $(__REPOS_GIT_MODULES_PATH); then \
+ touch $(REPOS_GIT_MODULES_SENTINEL); \
+ fi; \
+ $(GIT) -C $(top_srcdir) submodule -q add -f -b $$($(2)_repo_BRANCH) -- $$($(2)_repo_URL) $$($(2)_repo_PATH);; \
+ clone) echo " CLONE $$(subst $(__REPOS_GIT_CLONE_STEM),,$$(@))"; \
+ $(GIT) -C $(top_srcdir) clone -q -b $$($(2)_repo_BRANCH) -- $$($(2)_repo_URL) $$($(2)_repo_PATH);; \
+ *) echo "$(REPOS_CONFIG): Unknown or unsupported pull method '$(REPOS_PULL_METHOD)'.";; \
+ esac
$(NL_V_AT)if ! test -z "$$($(2)_repo_COMMIT)"; then \
$(GIT) -C $$($(2)_repo_PATH) checkout -q $$($(2)_repo_COMMIT); \
fi
@@ -132,20 +159,26 @@
.PHONY: clean-repos-local
clean-repos-local: clean-repos-hook
@echo " CLEAN"
- $(NL_V_AT)$(GIT) -C $(top_srcdir) submodule -q deinit -f -- $(REPO_PATHS) 2> /dev/null || true
- $(NL_V_AT)if test -f $(REPOS_GIT_MODULES_SENTINEL); then \
- $(RM) $(REPOS_GIT_MODULES_SENTINEL); \
- $(GIT) -C $(top_srcdir) rm -f -q $(__REPOS_GIT_MODULES_PATH) 2> /dev/null; \
- fi
- $(NL_V_AT)if test -f $(REPOS_GIT_INIT_SENTINEL); then \
- $(RM) -r $(dir $(REPOS_PACKAGE_GIT_PATH)); \
- $(RM) $(REPOS_GIT_INIT_SENTINEL); \
- fi
- $(NL_V_AT)$(RM) $(REPOS_WARNING_SENTINEL)
- $(NL_V_AT)$(GIT) -C $(top_srcdir) rm -rf -q --cached $(REPO_PATHS) 2> /dev/null || true
- $(NL_V_AT)$(RM) -r $(addprefix $(top_srcdir)/,$(REPO_PATHS))
- $(NL_V_AT)$(RMDIR) -p $(addprefix $(top_srcdir),$(dir $(REPO_PATHS))) 2> /dev/null || true
- $(NL_V_AT)$(RM) -r $(REPO_CACHES) 2> /dev/null
+ $(NL_V_AT)case "$(REPOS_PULL_METHOD)" in \
+ submodule) $(GIT) -C $(top_srcdir) submodule -q deinit -f -- $(REPO_PATHS) 2> /dev/null || true; \
+ if test -f $(REPOS_GIT_MODULES_SENTINEL); then \
+ $(RM) $(REPOS_GIT_MODULES_SENTINEL); \
+ $(GIT) -C $(top_srcdir) rm -f -q $(__REPOS_GIT_MODULES_PATH) 2> /dev/null; \
+ fi ; \
+ if test -f $(REPOS_GIT_INIT_SENTINEL); then \
+ $(RM) -r $(dir $(REPOS_PACKAGE_GIT_PATH)); \
+ $(RM) $(REPOS_GIT_INIT_SENTINEL); \
+ fi; \
+ $(RM) $(REPOS_WARNING_SENTINEL); \
+ $(GIT) -C $(top_srcdir) rm -rf -q --cached $(REPO_PATHS) 2> /dev/null || true; \
+ $(RM) -r $(addprefix $(top_srcdir)/,$(REPO_PATHS)); \
+ $(RMDIR) -p $(addprefix $(top_srcdir),$(dir $(REPO_PATHS))) 2> /dev/null || true; \
+ $(RM) -r $(REPO_CACHES) 2> /dev/null;; \
+ clone) $(GIT) -C $(top_srcdir) rm -rf -q --cached $(REPO_PATHS) 2> /dev/null || true; \
+ $(RM) -r $(addprefix $(top_srcdir)/,$(REPO_PATHS)); \
+ $(RMDIR) -p $(addprefix $(top_srcdir),$(dir $(REPO_PATHS))) 2> /dev/null || true;; \
+ *) echo "$(REPOS_CONFIG): Unknown or unsupported pull method '$(REPOS_PULL_METHOD)'.";; \
+ esac
.PHONY: clean-repos
clean-repos: clean-repos-local
diff --git a/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak b/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak
index d3336a3..f45907e 100644
--- a/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak
+++ b/third_party/nlbuild-autotools/repo/make/pre/macros/git.mak
@@ -1,4 +1,5 @@
#
+# Copyright 2018 Google LLC. All Rights Reserved.
# Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -73,3 +74,10 @@
# Get the local path for a repo / submodule variable set in specified git config file <file>.
nlGitGetPathForRepoFromNameFromFile = $(call nlGitGetValueForRepoFromNameFromFile,$(1),$(2),path)
+
+# nlGitGetMethodForPullFromFile <file>
+#
+# Get the pull method set in specified git config file <file>.
+
+nlGitGetMethodForPullFromFile = $(shell $(call nlGitGetConfigFromFileCommand,$(1)) 'pull.method')
+
diff --git a/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak b/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak
index dfc7df6..29f4b51 100644
--- a/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak
+++ b/third_party/nlbuild-autotools/repo/make/pre/macros/repos.mak
@@ -1,4 +1,5 @@
#
+# Copyright 2018 Google LLC. All Rights Reserved.
# Copyright 2017-2018 Nest Labs Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +17,10 @@
#
# Description:
-# This file is a make "header" or pre make header that defines make
-# convenience macros for interacting with and managing git submodules
-# in the context of managing project dependencies.
+# This file is a make "header" or pre make header that defines
+# make convenience macros for interacting with and managing "foreign"
+# (e.g., those outside of this project) git projects in the context of
+# managing project dependencies.
#
# Third-party package repository configuration, if it exists, listing all