From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id A35011FF2A7 for ; Mon, 1 Jul 2024 16:10:52 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id F26E13700C; Mon, 1 Jul 2024 16:11:04 +0200 (CEST) From: Max Carrara To: pve-devel@lists.proxmox.com Date: Mon, 1 Jul 2024 16:10:32 +0200 Message-Id: <20240701141040.643701-3-m.carrara@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240701141040.643701-1-m.carrara@proxmox.com> References: <20240701141040.643701-1-m.carrara@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH v2 pve-manager 02/10] ceph: tools: parse Ceph version in separate sub and update regex X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Cc: Lukas Wagner Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" The part of the `get_local_version` sub that's concerned with actually parsing the Ceph version is factored into a separate sub `parse_ceph_version`. That way the parsing logic can easily be reused. Make the version regex more maintainable declaring it as a variable, breaking it up and commenting it by using the x flag. Also remove the part that parses our Debian revision (e.g. -pve1) from the version, as we do not actually include that in our Ceph builds. The part of the regex that parses the build commit hash is made mandatory (remove '?' after its group). Signed-off-by: Max Carrara Tested-by: Lukas Wagner Reviewed-by: Lukas Wagner --- Changes v1 --> v2: * parse Ceph version in separate subroutine `parse_ceph_version` * update comments NOTE: Not sure if we should just `return parse_ceph_version($ceph_version)` below - the context is "passed on" but I don't want to introduce a pattern where others have to decipher what a subroutine returns through another subroutine's return value. (Unless it's really obvious.) PVE/Ceph/Tools.pm | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm index 087c4ef3..90313353 100644 --- a/PVE/Ceph/Tools.pm +++ b/PVE/Ceph/Tools.pm @@ -68,11 +68,33 @@ sub get_local_version { return undef if !defined $ceph_version; - if ($ceph_version =~ /^ceph.*\sv?(\d+(?:\.\d+)+(?:-pve\d+)?)\s+(?:\(([a-zA-Z0-9]+)\))?/) { + my ($version, $buildcommit, $subversions) = parse_ceph_version($ceph_version); + + return undef if !defined($version); + + # return (version, buildid, [major, minor, ...]) : major; + return wantarray ? ($version, $buildcommit, $subversions) : $subversions->[0]; +} + +sub parse_ceph_version : prototype($) { + my ($ceph_version) = @_; + + my $re_ceph_version = qr/ + # Skip ahead to the version, which may optionally start with 'v' + ^ceph.*\sv? + + # Parse the version X.Y, X.Y.Z, etc. + ( \d+ (?:\.\d+)+ ) \s+ + + # Parse the git commit hash between parentheses + (?: \( ([a-zA-Z0-9]+) \) ) + /x; + + if ($ceph_version =~ /$re_ceph_version/) { my ($version, $buildcommit) = ($1, $2); my $subversions = [ split(/\.|-/, $version) ]; - # return (version, buildid, major, minor, ...) : major; + # return (version, buildid, [major, minor, ...]) : major; return wantarray ? ($version, $buildcommit, $subversions) : $subversions->[0]; -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel