Merge "allow for soft updating of global-requirements"
diff --git a/functions-common b/functions-common
index e48ceaf..48edba8 100644
--- a/functions-common
+++ b/functions-common
@@ -1645,6 +1645,16 @@
setup_package_with_req_sync $project_dir -e
}
+# determine if a project as specified by directory is in
+# projects.txt. This will not be an exact match because we throw away
+# the namespacing when we clone, but it should be good enough in all
+# practical ways.
+function is_in_projects_txt {
+ local project_dir=$1
+ local project_name=$(basename $project_dir)
+ return grep "/$project_name\$" $REQUIREMENTS_DIR/projects.txt >/dev/null
+}
+
# ``pip install -e`` the package, which processes the dependencies
# using pip before running `setup.py develop`
#
@@ -1663,8 +1673,19 @@
local update_requirements=$(cd $project_dir && git diff --exit-code >/dev/null || echo "changed")
if [[ $update_requirements != "changed" ]]; then
- (cd $REQUIREMENTS_DIR; \
- python update.py $project_dir)
+ if [[ "$REQUIREMENTS_MODE" == "soft" ]]; then
+ if is_in_projects_txt $project_dir; then
+ (cd $REQUIREMENTS_DIR; \
+ python update.py $project_dir)
+ else
+ # soft update projects not found in requirements project.txt
+ (cd $REQUIREMENTS_DIR; \
+ python update.py -s $project_dir)
+ fi
+ else
+ (cd $REQUIREMENTS_DIR; \
+ python update.py $project_dir)
+ fi
fi
setup_package $project_dir $flags
diff --git a/stackrc b/stackrc
index fd84598..15b0951 100644
--- a/stackrc
+++ b/stackrc
@@ -116,6 +116,17 @@
# Zero disables timeouts
GIT_TIMEOUT=${GIT_TIMEOUT:-0}
+# Requirements enforcing mode
+#
+# - strict (default) : ensure all project requirements files match
+# what's in global requirements.
+#
+# - soft : enforce requirements on everything in
+# requirements/projects.txt, but do soft updates on all other
+# repositories (i.e. sync versions for requirements that are in g-r,
+# but pass through any extras)
+REQUIREMENTS_MODE=${REQUIREMENTS_MODE:-strict}
+
# Repositories
# ------------