[pacman-dev] [PATCH] Install unchanged backup files to get correct timestamps.

Patrick Steinhardt steinhardt.ptk at gmail.com
Tue Jun 4 09:05:15 EDT 2013


On Tue, Jun 04, 2013 at 01:41:07PM +0100, Ross Lagerwall wrote:
> On Tue, Jun 04, 2013 at 02:17:07PM +0200, Patrick Steinhardt wrote:
> > > Can we not just ignore it if it fails since it is non-fatal?
> > 
> > If we ignore it we should at least add a debug/warning message if
> > it fails, I guess.
> 
> Fair enough.

I've attached an updated version of the patch which emits a warning
when the timestamp could not be updated. The debug message has
been updated to state that the extraction is just a timestamp
update, as well.

> 
> > I don't think the checkfile should be unlinked here, should it?
> > It will certainly fail if you first unlink and afterwards try to
> > rename it.
> > 
> 
> Of course.  I think you're reading the diff wrong.  The unlink is
> *replaced* with a rename in the new code.

Never mind, I was screwed because no syntax highlighting existed.


Regards,
Patrick
-------------- next part --------------
From e84827ac3050c807aa2f0336ceda2b2172b89c71 Mon Sep 17 00:00:00 2001
From: Patrick Steinhardt <steinhardt.ptk at gmail.com>
Date: Tue, 4 Jun 2013 00:14:41 +0200
Subject: [PATCH] Install unchanged backup files to get correct timestamps.

Fixes FS#35515.
---
 lib/libalpm/add.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index c20e7c6..c9a516a 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -309,11 +309,14 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
 		_alpm_log(handle, ALPM_LOG_DEBUG, "original: %s\n", hash_orig);
 
 		if(hash_local && hash_pkg && strcmp(hash_local, hash_pkg) == 0) {
-			/* local and new files are the same, no sense in installing the file
-			 * over itself, regardless of what the original file was */
-			_alpm_log(handle, ALPM_LOG_DEBUG,
-					"action: leaving existing file in place\n");
-			unlink(checkfile);
+			/* local and new files are the same, updating anyway to get
+			 * correct timestamps */
+			_alpm_log(handle, ALPM_LOG_DEBUG, "action: updating timestamp: %s\n",
+					entryname_orig);
+			if(try_rename(handle, checkfile, filename)) {
+				_alpm_log(handle, ALPM_LOG_WARNING, "could not update timestamp: %s\n",
+					entryname_orig);
+			}
 		} else if(hash_orig && hash_pkg && strcmp(hash_orig, hash_pkg) == 0) {
 			/* original and new files are the same, leave the local version alone,
 			 * including any user changes */
-- 
1.8.3

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://mailman.archlinux.org/pipermail/pacman-dev/attachments/20130604/64cd2eec/attachment.asc>


More information about the pacman-dev mailing list