# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------

include $(MAKEDIR)/patches/help.mk

patch-gather-args += --exclude=Makefile
patch-gather-args += --exclude-dir=vault
patch-gather-args += --exclude-dir=makefiles
patch-gather-args += --exclude-dir=staging
patch-gather-args += --exclude-dir=patches

# patch-gather-args += -e 'from collections import'
patch-gather-args += '-e' 'from collections import Mapping'
patch-gather-args += '-e' 'from collections import MutableMapping'

# Defined by [Mm]akefile or makefiles/virtualenv.mk
venv-name   ?= $(error $(MAKE) venv-name= is required)

PATCH_PATH  ?= $(error $(MAKE) PATCH_PATH= is required)

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
patch-gather:
	grep -r $(patch-gather-args)

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
patch-diff:
	$(HIDE)diff -qr staging $(venv-name) \
	    | awk '{print "# diff -Naur "$$2" "$$4}' \
	    | tee $@.log

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
patch-create:
	mkdir -p patches/$(PATCH_PATH)
	diff -Naur staging/$(PATCH_PATH) $(venv-name)/$(PATCH_PATH) | tee patches/$(PATCH_PATH)/patch
	exit 1

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
patch-init:
	find "$(venv-name)" -name '__pycache__' -type d -print0 \
	    | xargs -I'{}' --null --no-run-if-empty $(RM) -r {}
	mkdir -p staging
	rsync -rv --checksum "$(venv-name)/." "staging/."
	@echo "Modify files beneath staging/ to create a patch source"

# [SEE ALSO]
# ---------------------------------------------------------------------------
# https://bobbyhadz.com/blog/python-importerror-cannot-import-name-mapping-from-collections
# ---------------------------------------------------------------------------
# [EOF]
