From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language; bh=OAfYKYVg+NyUecrJPUQewGEXFgY05aQ3DXhfVon5JGc=; b=LcPWAlxw2zGpMYu4iNTneIn6i/wJHU7uVu9yreWji227/YNUo+V4b8tAZR2PreG6E4 vMVzbWqSniSnxw39R7zCUIBKXeWY3lbfBL7MDp+HkoI39mtnibdKvNQh77lmISWx2e9p VpkeTXzyy7ab7d5ZZpGsr+ZtaRfFe/PJiYPhewbzdQcG4xyiag35e3k9//UvP50SRpAY WSMtfqsDd7gGAGIidxgZleFw9Cjz57XUliFC5WAd0FhewziiwTYVX4+VTs7oP86O4I9T fwUtG7Zp3IwhR4JFg2OBZYbmua9NbTmpGQTuLqZipHQ5pZ/MHEVtPqq2laUsZdkNQUn0 CpCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=OAfYKYVg+NyUecrJPUQewGEXFgY05aQ3DXhfVon5JGc=; b=5wS24X6hPyZqkaXljBplBqK/5IeTCmrDxNN/fe1iun3iTI10S5uEpnw97yvzCYcbHs i0JmW18TZgdNdgejRlk4L6pKX97ghD7HKP1alIn0F2q7aoeX4eDGxYyh/DgQw5cES8rM 4MSM4ilGs/omoY6J7xkSR4EC9xC9m3P300yx5qOcYXTFxCMp/8j9n7Zz9eg1cLjCltl3 fMmVU4trOU6PRV2CSsCeUl5YQS6oohMOzkUascgc2bz+uM0mbH9j5sie2Si1EhaUMnAX Pdz/Dwj7Ji8hdzDBsdLtnS+JaSiNtMRdiz9ESX0JgC80fJ+8w+HCsQe9Veo2QO0YIYC6 qD2Q== X-Gm-Message-State: AOAM530rBSfPvBB2nYS+cfAxy1VSln7FUQSmsFiVcfyNm59s9Bcb3cWi CaDFNXi7F6QNhdP5by8V9KZhbd5j9Ns= X-Google-Smtp-Source: ABdhPJylSkH7ezp+67J3WVhVcVjPuSWZ4PyDw+lWq+KVeNCLRYhDgrsy+I1bvWb9CWaqz5Jk+xHfrw== X-Received: by 2002:a05:6512:3409:: with SMTP id i9mr5897905lfr.165.1632659353562; Sun, 26 Sep 2021 05:29:13 -0700 (PDT) To: make-initrd@lists.altlinux.org References: From: Leonid Krivoshein Message-ID: Date: Sun, 26 Sep 2021 15:29:11 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------67F81E71A87E336D654E106F" Content-Language: ru Subject: Re: [make-initrd] [PATCH v1 29/41] fork pipeline: bootchain-sh-functions: resolve_target modified X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Sep 2021 12:29:16 -0000 Archived-At: List-Archive: This is a multi-part message in MIME format. --------------67F81E71A87E336D654E106F Content-Type: text/plain; charset=windows-1251; format=flowed Content-Transfer-Encoding: 8bit Алексей, привет! Поздно заметил, что сильно налажал с resolve_target() даже в части адресации при перегрузке шагов, в следующей итерации исправлю, а пока прилагаю текущий патч. Можно ссылаться на результаты пройденных шагов, нумеруя от нуля слева направо: pipe0[/что-то-там], pipe1[/что-то-ещё], ..., а также в обратную сторону: step-1[/что-то-там] (предыдущий шаг), step-2[/что-то-ещё] (перед предыдущим), ..., при этом адресация работает в отношении шагов, полученных на старте или после перегрузки шагов через bc_nextchain(). Поскольку данный кейс нигде не использовался, заметил слишком поздно, когда продолжил работать над кодом... --------------67F81E71A87E336D654E106F Content-Type: text/x-patch; name="fix-resolve_target.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fix-resolve_target.patch" commit 3827df94d66c75873c53f0949960a294d7a7f88a Author: Leonid Krivoshein Date: Sun Sep 26 04:48:04 2021 +0300 fixed resolve_target(), reverse addressation added diff --git a/bootchain-core/data/bin/bootchain-sh-functions b/bootchain-core/data/bin/bootchain-sh-functions index 086d698..4f416d2 100644 --- a/bootchain-core/data/bin/bootchain-sh-functions +++ b/bootchain-core/data/bin/bootchain-sh-functions @@ -49,25 +49,33 @@ get_parameter() resolve_target() { local target="$1" + local where="${target%%/*}" + local n="${#where}" - case "${target%%/*}" in + target="${target:$n}" + + case "$where" in '') ;; pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9]) - target="$mntdir/dst/step${target:4}" + n="$(( ${basestep:-0} + ${where:4} ))" + [ ! -d "$mntdir/dst/step$n" ] && return 0 || + target="$mntdir/dst/step${n}${target}" ;; - step[0-9]|step[0-9][0-9]|step[0-9][0-9][0-9]) - target="$mntdir/dst/$target" + step-[1-9]|step-[1-9][0-9]|step-[1-9][0-9][0-9]) + n="$(( ${stepnum:-0} - ${where:5} ))" + [ "${basestep:-0}" -le "$n" ] && [ -d "$mntdir/dst/step$n" ] && + target="$mntdir/dst/step${n}${target}" || return 0 ;; *) if [ -z "${prevdir-}" ]; then - message "no previous step results to use with $PROG" + message "no previous step results to use with $name" return 0 fi - if [ "$target" = DEVNAME ] && [ -s "$prevdir/DEVNAME" ]; then - read -r target <"$prevdir/DEVNAME" ||: + if [ "$where" = DEVNAME ] && [ -s "$prevdir/DEVNAME" ]; then + read -r target <"$prevdir/DEVNAME" 2>/dev/null ||: else - target="$prevdir/${target#/}" + target="$prevdir/${where#/}${target}" fi ;; esac diff --git a/bootchain-core/data/sbin/bootchain-loop b/bootchain-core/data/sbin/bootchain-loop index 1cf00d3..59c2ac7 100755 --- a/bootchain-core/data/sbin/bootchain-loop +++ b/bootchain-core/data/sbin/bootchain-loop @@ -6,6 +6,7 @@ bcretry="${bcretry:-1}" stepnum="${stepnum:-0}" chainsteps="${chainsteps-}" prevdir="${prevdir-}" +basestep="$stepnum" BC_IM_supported= @@ -83,7 +84,8 @@ while [ -n "$chainsteps" ]; do else message "[$callnum] Handler: $exe" - export name callnum datadir destdir prevdir + export name callnum datadir destdir + export basestep stepnum prevdir for try in 1 2 3 4 5; do [ -z "$BC_DEBUG" ] || @@ -128,6 +130,7 @@ while [ -n "$chainsteps" ]; do debug "chain will be reloaded by $BC_NEXTCHAIN:" fdump "$BC_NEXTCHAIN" . "$BC_NEXTCHAIN" + basestep="$stepnum" run rm -f -- "$BC_NEXTCHAIN" fi --------------67F81E71A87E336D654E106F--