aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlibs/common7
-rwxr-xr-xlibs/git2
-rwxr-xr-xlibs/project82
3 files changed, 80 insertions, 11 deletions
diff --git a/libs/common b/libs/common
index 06b411e1..b1091e4f 100755
--- a/libs/common
+++ b/libs/common
@@ -117,6 +117,13 @@ diff_patch() {
patch -fd "$sources_path" -r - < "$patch_path"
}
+diff_patch_check() {
+ local sources_path=$1
+ local patch_path=$2
+
+ patch -sfd "$sources_path" --dry-run < "$patch_path" > /dev/null 2>&1
+}
+
path_wildcard_expand() {
local path=$@
diff --git a/libs/git b/libs/git
index 429d4783..2cde3dd3 100755
--- a/libs/git
+++ b/libs/git
@@ -312,7 +312,7 @@ git_project_patch_recursive() {
git_patch "$repository_path" "$branch" "$patch" || return 1
done
- if [[ $path != . ]]; then
+ if [[ -n $path && $path != . ]]; then
git_project_patch_recursive "$project" "$repository" "$branch" "$(dirname "$path")"
fi
}
diff --git a/libs/project b/libs/project
index 8f4ef233..b130af17 100755
--- a/libs/project
+++ b/libs/project
@@ -521,23 +521,75 @@ project_sources_archive_missing_check() {
project_sources_prepare() {
local project="$1"
- local sources_path="$2"
+ shift
+
+ project_sources_prepare_blobs "$project" "$@"
+ project_sources_prepare_patch "$project" "$@"
+}
+
+project_sources_prepare_blobs() {
+ local project=$1
+ shift
+
+ local sources_path=$(project_sources_path "$project" "$project" "$@")
+
+ (
+ cd "$sources_path" || exit 1
- # Not implemented yet / May end up not being needed
- #project_sources_prepare_blobs
- project_sources_prepare_patch "$project" "$sources_path" "$@"
+ project_blobs "$project" "$@" | while IFS='' read -r blob; do
+ rm -f -- "$blob"
+ done
+ )
}
project_sources_prepare_patch() {
local project="$1"
- local sources_path="$2"
+ shift
- local project_path="$(project_path "$project")"
- local patches_path="$project_path/$PATCHES"
+ local argument
+ local path
+
+ for argument in "$@"; do
+ if [[ -z $path ]]; then
+ path=$argument
+ else
+ path=$path/$argument
+ fi
+ done
+
+ if [[ -n $project ]]; then
+ project_sources_patch_recursive "$project" "$path"
+ fi
+}
+
+project_sources_prepare_check() {
+ local project=$1
+ shift
+
+ local sources_path=$(project_sources_path "$project" "$project" "$@")
+
+ directory_filled_check "$sources_path"
+}
+
+project_sources_patch_recursive() {
+ local project=$1
+ local path=$2
+
+ local project_path=$(project_path "$project")
+ local sources_path=$(project_sources_path "$project" "$project" "$@")
+ local patches_path=$project_path/$PATCHES/$path
+
+ if ! [[ -d $project_path/$PATCHES ]]; then
+ return 0
+ fi
for patch in "$patches_path"/[!.]*.@(patch|diff); do
- diff_patch "$sources_path" "$patch"
+ project_sources_patch "$sources_path" "$patch" || return 1
done
+
+ if [[ -n $path && $path != . ]]; then
+ project_sources_patch_recursive "$project" "$(dirname "$path")"
+ fi
}
project_blobs() {
@@ -556,6 +608,17 @@ project_blobs() {
fi
}
+project_sources_patch() {
+ local sources_path=$1
+ local patch_path=$2
+
+ if diff_patch_check "$sources_path" "$patch_path"; then
+ diff_patch "$sources_path" "$patch_path"
+ else
+ return 1
+ fi
+}
+
project_blobs_path() {
local project=$1
shift
@@ -751,8 +814,7 @@ project_download_archive() {
mv "${archive_path%.tar*}" "$sources_path"
fi
- # Patch the source, if necessary
- project_sources_prepare "$project" "$sources_path"
+ project_sources_prepare "$project"
}
project_download_check_archive() {