From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id D4F4261661 for ; Thu, 17 Dec 2020 15:17:45 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C8FDB27551 for ; Thu, 17 Dec 2020 15:17:45 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 308E52753D for ; Thu, 17 Dec 2020 15:17:44 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id E89E844A50 for ; Thu, 17 Dec 2020 15:17:43 +0100 (CET) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Thu, 17 Dec 2020 15:17:38 +0100 Message-Id: <20201217141739.22535-2-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201217141739.22535-1-f.ebner@proxmox.com> References: <20201217141739.22535-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.008 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [state.new] Subject: [pve-devel] [PATCH v2 zsync 2/3] introduce and use read_file helper 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: , X-List-Received-Date: Thu, 17 Dec 2020 14:17:45 -0000 Signed-off-by: Fabian Ebner --- New in v2 Is there a special reason why the input file handle was kept open until after renaming (in update_cron and update_state)? pve-zsync | 53 ++++++++++++++++++++--------------------------------- 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/pve-zsync b/pve-zsync index 881b9c8..76e12ce 100755 --- a/pve-zsync +++ b/pve-zsync @@ -81,6 +81,19 @@ sub check_bin { die "unable to find command '$bin'\n"; } +sub read_file { + my ($filename, $one_line_only) = @_; + + my $fh = IO::File->new($filename, "r") + or die "Could not open file ${filename}: $!\n"; + + my $text = $one_line_only ? <$fh> : [ <$fh> ]; + + close($fh); + + return $text; +} + sub cut_target_width { my ($path, $maxlen) = @_; $path =~ s@/+@/@g; @@ -202,14 +215,9 @@ sub read_cron { return undef; } - my $fh = IO::File->new("< $CRONJOBS"); - die "Could not open file $CRONJOBS: $!\n" if !$fh; - - my @text = <$fh>; - - close($fh); + my $text = read_file($CRONJOBS, 0); - return encode_cron(@text); + return encode_cron(@{$text}); } sub parse_argv { @@ -329,28 +337,14 @@ sub read_state { return undef; } - my $fh = IO::File->new("< $STATE"); - die "Could not open file $STATE: $!\n" if !$fh; - - my $text = <$fh>; - my $states = decode_json($text); - - close($fh); - - return $states; + my $text = read_file($STATE, 1); + return decode_json($text); } sub update_state { my ($job) = @_; - my $text; - my $in_fh; - eval { - - $in_fh = IO::File->new("< $STATE"); - die "Could not open file $STATE: $!\n" if !$in_fh; - $text = <$in_fh>; - }; + my $text = eval { read_file($STATE, 1); }; my $out_fh = IO::File->new("> $STATE.new"); die "Could not open file ${STATE}.new: $!\n" if !$out_fh; @@ -382,9 +376,6 @@ sub update_state { close($out_fh); rename "$STATE.new", $STATE; - eval { - close($in_fh); - }; return $states; } @@ -399,12 +390,9 @@ sub update_cron { my $header = "SHELL=/bin/sh\n"; $header .= "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n\n"; - my $fh = IO::File->new("< $CRONJOBS"); - die "Could not open file $CRONJOBS: $!\n" if !$fh; - - my @test = <$fh>; + my $current = read_file($CRONJOBS, 0); - while (my $line = shift(@test)) { + foreach my $line (@{$current}) { chomp($line); if ($line =~ m/source $job->{source} .*name $job->{name} /) { $updated = 1; @@ -433,7 +421,6 @@ sub update_cron { close ($new_fh); die "can't move $CRONJOBS.new: $!\n" if !rename "${CRONJOBS}.new", $CRONJOBS; - close ($fh); } sub format_job { -- 2.20.1