On 01/10/14 17:05, Andrew Gregory wrote:
> Leave user files in place and save new config files with a .pacnew
> extension.  This reduces the complexity of file extraction and respects
> the principle that pacman shouldn't modify files it didn't create.
> 
> Signed-off-by: Andrew Gregory <[email protected]>
> ---
>  contrib/README                  |  2 +-
>  contrib/pacdiff.sh.in           |  9 ++---
>  doc/pacman.8.txt                |  5 ++-
>  lib/libalpm/add.c               | 82 
> ++++++++++++-----------------------------
>  lib/libalpm/alpm.h              | 15 +-------
>  src/pacman/callback.c           | 16 --------
>  test/pacman/README              |  1 -
>  test/pacman/pmrule.py           |  3 --
>  test/pacman/tests/upgrade015.py |  1 -
>  test/pacman/tests/upgrade016.py |  5 +--
>  test/pacman/tests/upgrade027.py |  1 -
>  test/pacman/tests/upgrade028.py |  1 -
>  test/pacman/tests/upgrade029.py |  1 -
>  13 files changed, 34 insertions(+), 108 deletions(-)
> 

As Dan pointed out, it would be good to keep pacdiff as-is until a
suitable period has passed for the removal of pacorig files.  I am
undecided whether you should remove "pacorig" from its description
still, but leaning towards yes.

> diff --git a/contrib/README b/contrib/README
> index ae33bb2..8b5dd3c 100644
> --- a/contrib/README
> +++ b/contrib/README
> @@ -16,7 +16,7 @@ sync databases (for safety on rolling release 
> distributions).
>  paccache - a flexible package cache cleaning utility that allows greater
>  control over which packages are removed.
>  
> -pacdiff - a simple pacnew/pacorig/pacsave updater for /etc/.
> +pacdiff - a simple pacnew/pacsave updater for /etc/.
>  
>  paclist - list all packages installed from a given repository. Useful for
>  seeing which packages you may have installed from the testing repository,
> diff --git a/contrib/pacdiff.sh.in b/contrib/pacdiff.sh.in
> index ecb6ae2..d94754c 100644
> --- a/contrib/pacdiff.sh.in
> +++ b/contrib/pacdiff.sh.in
> @@ -1,5 +1,5 @@
>  #!/bin/bash
> -#   pacdiff : a simple pacnew/pacorig/pacsave updater
> +#   pacdiff : a simple pacnew/pacsave updater
>  #
>  #   Copyright (c) 2007 Aaron Griffin <[email protected]>
>  #   Copyright (c) 2013-2014 Pacman Development Team 
> <[email protected]>
> @@ -35,7 +35,7 @@ usage() {
>       cat <<EOF
>  ${myname} (pacman) v${myver}
>  
> -A simple program to merge or remove pacnew/pacorig/pacsave files.
> +A simple program to merge or remove pacnew/pacsave files.
>  
>  Usage: $myname [-l | -f | -p] [--nocolor]
>  
> @@ -77,9 +77,9 @@ print_existing_pacsave(){
>  
>  cmd() {
>       if (( USE_LOCATE )); then
> -             locate -0 -e -b \*.pacnew \*.pacorig \*.pacsave 
> '*.pacsave.[0-9]*'
> +             locate -0 -e -b \*.pacnew \*.pacsave '*.pacsave.[0-9]*'
>       elif (( USE_FIND )); then
> -             find $diffsearchpath \( -name \*.pacnew -o -name \*.pacorig -o 
> -name \*.pacsave -o -name '*.pacsave.[0-9]*' \) -print0
> +             find $diffsearchpath \( -name \*.pacnew -o -name \*.pacsave -o 
> -name '*.pacsave.[0-9]*' \) -print0
>       elif (( USE_PACDB )); then
>               awk '/^%BACKUP%$/ {
>               while (getline) {
> @@ -88,7 +88,6 @@ cmd() {
>                       }
>               }' "${pac_db}"/*/files | while read -r bkup; do
>                       print_existing "/$bkup.pacnew"
> -                     print_existing "/$bkup.pacorig"
>                       print_existing_pacsave "/$bkup.pacsave"
>               done
>       fi
> diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt
> index 152b261..4c05167 100644
> --- a/doc/pacman.8.txt
> +++ b/doc/pacman.8.txt
> @@ -454,8 +454,9 @@ original=X, current=Y, new=Z::
>  
>  original=NULL, current=Y, new=Z::
>       The package was not previously installed, and the file already exists 
> on the
> -     file system. Save the current file with a '.pacorig' extension, install 
> the
> -     new file, and warn the user.
> +     file system. Install the new file with a '.pacnew' extension and warn 
> the
> +     user. The user must then manually merge any necessary changes into the
> +     original file.
>  
>  
>  Examples

OK.

> diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
> index ee92414..74c1595 100644
> --- a/lib/libalpm/add.c
> +++ b/lib/libalpm/add.c
> @@ -334,69 +334,33 @@ static int extract_single_file(alpm_handle_t *handle, 
> struct archive *archive,
>               } else {
>                       /* none of the three files matched another, unpack the 
> new file alongside
>                        * the local file */
> +                     char *newpath;
> +                     size_t newlen = strlen(filename) + strlen(".pacnew") + 
> 1;
>  
> -                     if(oldpkg) {
> -                             char *newpath;
> -                             size_t newlen = strlen(filename) + 
> strlen(".pacnew") + 1;
> -
> -                             _alpm_log(handle, ALPM_LOG_DEBUG,
> -                                             "action: keeping current file 
> and installing"
> -                                             " new one with .pacnew 
> ending\n");
> -
> -                             MALLOC(newpath, newlen,
> -                                             errors++; handle->pm_errno = 
> ALPM_ERR_MEMORY; goto needbackup_cleanup);
> -                             snprintf(newpath, newlen, "%s.pacnew", 
> filename);
> -
> -                             if(try_rename(handle, checkfile, newpath)) {
> -                                     errors++;
> -                             } else {
> -                                     alpm_event_pacnew_created_t event = {
> -                                             .type = 
> ALPM_EVENT_PACNEW_CREATED,
> -                                             .from_noupgrade = 0,
> -                                             .oldpkg = oldpkg,
> -                                             .newpkg = newpkg,
> -                                             .file = filename
> -                                     };
> -                                     EVENT(handle, &event);
> -                                     alpm_logaction(handle, 
> ALPM_CALLER_PREFIX,
> -                                                     "warning: %s installed 
> as %s\n", filename, newpath);
> -                             }
> +                     _alpm_log(handle, ALPM_LOG_DEBUG,
> +                                     "action: keeping current file and 
> installing"
> +                                     " new one with .pacnew ending\n");
>  
> -                             free(newpath);
> -                     } else {
> -                             char *newpath;
> -                             size_t newlen = strlen(filename) + 
> strlen(".pacorig") + 1;
> -
> -                             _alpm_log(handle, ALPM_LOG_DEBUG,
> -                                             "action: saving existing file 
> with a .pacorig ending"
> -                                             " and installing a new one\n");
> -
> -                             MALLOC(newpath, newlen,
> -                                             errors++; handle->pm_errno = 
> ALPM_ERR_MEMORY; goto needbackup_cleanup);
> -                             snprintf(newpath, newlen, "%s.pacorig", 
> filename);
> -
> -                             /* move the existing file to the "pacorig" */
> -                             if(try_rename(handle, filename, newpath)) {
> -                                     errors++;   /* failed rename filename  
> -> filename.pacorig */
> -                                     errors++;   /* failed rename checkfile 
> -> filename */
> -                             } else {
> -                                     /* rename the file we extracted to the 
> real name */
> -                                     if(try_rename(handle, checkfile, 
> filename)) {
> -                                             errors++;
> -                                     } else {
> -                                             alpm_event_pacorig_created_t 
> event = {
> -                                                     .type = 
> ALPM_EVENT_PACORIG_CREATED,
> -                                                     .newpkg = newpkg,
> -                                                     .file = filename
> -                                             };
> -                                             EVENT(handle, &event);
> -                                             alpm_logaction(handle, 
> ALPM_CALLER_PREFIX,
> -                                                             "warning: %s 
> saved as %s\n", filename, newpath);
> -                                     }
> -                             }
> +                     MALLOC(newpath, newlen,
> +                                     errors++; handle->pm_errno = 
> ALPM_ERR_MEMORY; goto needbackup_cleanup);
> +                     snprintf(newpath, newlen, "%s.pacnew", filename);
>  
> -                             free(newpath);
> +                     if(try_rename(handle, checkfile, newpath)) {
> +                             errors++;
> +                     } else {
> +                             alpm_event_pacnew_created_t event = {
> +                                     .type = ALPM_EVENT_PACNEW_CREATED,
> +                                     .from_noupgrade = 0,
> +                                     .oldpkg = oldpkg,
> +                                     .newpkg = newpkg,
> +                                     .file = filename
> +                             };
> +                             EVENT(handle, &event);
> +                             alpm_logaction(handle, ALPM_CALLER_PREFIX,
> +                                             "warning: %s installed as 
> %s\n", filename, newpath);
>                       }
> +
> +                     free(newpath);
>               }
>  
>  needbackup_cleanup:

OK.

PS: Wow!!!   That is some serious deletions!



> diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
> index 1cfd4f5..7c64f34 100644
> --- a/lib/libalpm/alpm.h
> +++ b/lib/libalpm/alpm.h
> @@ -445,10 +445,7 @@ typedef enum _alpm_event_type_t {
>       ALPM_EVENT_PACNEW_CREATED,
>       /** A .pacsave file was created; See alpm_event_pacsave_created_t for
>        * arguments */
> -     ALPM_EVENT_PACSAVE_CREATED,
> -     /** A .pacorig file was created; See alpm_event_pacorig_created_t for
> -      * arguments */
> -     ALPM_EVENT_PACORIG_CREATED

Add note to README about this change.

> +     ALPM_EVENT_PACSAVE_CREATED
>  } alpm_event_type_t;
>  
>  typedef struct _alpm_event_any_t {
> @@ -539,15 +536,6 @@ typedef struct _alpm_event_pacsave_created_t {
>       const char *file;
>  } alpm_event_pacsave_created_t;
>  
> -typedef struct _alpm_event_pacorig_created_t {
> -     /** Type of event. */
> -     alpm_event_type_t type;
> -     /** New package. */
> -     alpm_pkg_t *newpkg;
> -     /** Filename of the file without the .pacorig suffix. */
> -     const char *file;
> -} alpm_event_pacorig_created_t;
> -

And this one.

>  /** Events.
>   * This is an union passed to the callback, that allows the frontend to know
>   * which type of event was triggered (via type). It is then possible to
> @@ -564,7 +552,6 @@ typedef union _alpm_event_t {
>       alpm_event_pkgdownload_t pkgdownload;
>       alpm_event_pacnew_created_t pacnew_created;
>       alpm_event_pacsave_created_t pacsave_created;
> -     alpm_event_pacorig_created_t pacorig_created;
>  } alpm_event_t;
>  

And this one.

>  /** Event callback. */
> diff --git a/src/pacman/callback.c b/src/pacman/callback.c
> index 4993382..6e3fbbe 100644
> --- a/src/pacman/callback.c
> +++ b/src/pacman/callback.c
> @@ -313,22 +313,6 @@ void cb_event(alpm_event_t *event)
>                               }
>                       }
>                       break;
> -             case ALPM_EVENT_PACORIG_CREATED:
> -                     {
> -                             alpm_event_pacorig_created_t *e = 
> &event->pacorig_created;
> -                             if(on_progress) {
> -                                     char *string = NULL;
> -                                     pm_sprintf(&string, ALPM_LOG_WARNING, 
> _("%s saved as %s.pacorig\n"),
> -                                                     e->file, e->file);
> -                                     if(string != NULL) {
> -                                             output = alpm_list_add(output, 
> string);
> -                                     }
> -                             } else {
> -                                     pm_printf(ALPM_LOG_WARNING, _("%s saved 
> as %s.pacorig\n"),
> -                                                     e->file, e->file);
> -                             }
> -                     }
> -                     break;
>               /* all the simple done events, with fallthrough for each */
>               case ALPM_EVENT_FILECONFLICTS_DONE:
>               case ALPM_EVENT_CHECKDEPS_DONE:

OK

> diff --git a/test/pacman/README b/test/pacman/README
> index 8d8354a..6c601b2 100644
> --- a/test/pacman/README
> +++ b/test/pacman/README
> @@ -310,7 +310,6 @@ its DEPENDS field.
>    FILE_TYPE=path/to/file|type  (possible types: dir, file, link)
>    FILE_PACNEW=path/to/file
>    FILE_PACSAVE=path/to/file
> -  FILE_PACORIG=path/to/file
>  
>  Example:
>       FILE_EXIST=etc/test.conf

OK

> diff --git a/test/pacman/pmrule.py b/test/pacman/pmrule.py
> index 0eec8ea..57f1786 100644
> --- a/test/pacman/pmrule.py
> +++ b/test/pacman/pmrule.py
> @@ -148,9 +148,6 @@ def check(self, test):
>              elif case == "PACNEW":
>                  if not os.path.isfile("%s.pacnew" % filename):
>                      success = 0
> -            elif case == "PACORIG":
> -                if not os.path.isfile("%s.pacorig" % filename):
> -                    success = 0
>              elif case == "PACSAVE":
>                  if not os.path.isfile("%s.pacsave" % filename):
>                      success = 0

OK

> diff --git a/test/pacman/tests/upgrade015.py b/test/pacman/tests/upgrade015.py
> index ea6046c..64fe281 100644
> --- a/test/pacman/tests/upgrade015.py
> +++ b/test/pacman/tests/upgrade015.py
> @@ -12,4 +12,3 @@
>  self.addrule("PKG_EXIST=dummy")
>  self.addrule("FILE_MODIFIED=etc/dummy.conf")
>  self.addrule("!FILE_PACNEW=etc/dummy.conf")
> -self.addrule("!FILE_PACORIG=etc/dummy.conf")

OK

> diff --git a/test/pacman/tests/upgrade016.py b/test/pacman/tests/upgrade016.py
> index b6b3f3a..ddf57e8 100644
> --- a/test/pacman/tests/upgrade016.py
> +++ b/test/pacman/tests/upgrade016.py
> @@ -11,6 +11,5 @@
>  
>  self.addrule("PACMAN_RETCODE=0")
>  self.addrule("PKG_EXIST=dummy")
> -self.addrule("FILE_MODIFIED=etc/dummy.conf")
> -self.addrule("!FILE_PACNEW=etc/dummy.conf")
> -self.addrule("FILE_PACORIG=etc/dummy.conf")
> +self.addrule("!FILE_MODIFIED=etc/dummy.conf")
> +self.addrule("FILE_PACNEW=etc/dummy.conf")

OK

> diff --git a/test/pacman/tests/upgrade027.py b/test/pacman/tests/upgrade027.py
> index 99087f3..3dd694a 100644
> --- a/test/pacman/tests/upgrade027.py
> +++ b/test/pacman/tests/upgrade027.py
> @@ -18,5 +18,4 @@
>  self.addrule("PKG_VERSION=dummy|1.0-2")
>  self.addrule("FILE_PACNEW=etc/dummy.conf")
>  self.addrule("!FILE_PACSAVE=etc/dummy.conf")
> -self.addrule("!FILE_PACORIG=etc/dummy.conf")
>  self.addrule("FILE_EXIST=etc/dummy.conf")

OK

> diff --git a/test/pacman/tests/upgrade028.py b/test/pacman/tests/upgrade028.py
> index 18a10f5..1e31aa3 100644
> --- a/test/pacman/tests/upgrade028.py
> +++ b/test/pacman/tests/upgrade028.py
> @@ -18,5 +18,4 @@
>  self.addrule("PKG_VERSION=dummy|1.0-2")
>  self.addrule("!FILE_PACNEW=etc/dummy.conf")
>  self.addrule("!FILE_PACSAVE=etc/dummy.conf")
> -self.addrule("!FILE_PACORIG=etc/dummy.conf")
>  self.addrule("FILE_EXIST=etc/dummy.conf")

OK

> diff --git a/test/pacman/tests/upgrade029.py b/test/pacman/tests/upgrade029.py
> index c308f42..eef5c70 100644
> --- a/test/pacman/tests/upgrade029.py
> +++ b/test/pacman/tests/upgrade029.py
> @@ -20,5 +20,4 @@
>  self.addrule("PKG_VERSION=dummy|1.0-1")
>  self.addrule("!FILE_PACNEW=etc/dummy.conf")
>  self.addrule("!FILE_PACSAVE=etc/dummy.conf")
> -self.addrule("!FILE_PACORIG=etc/dummy.conf")
>  self.addrule("FILE_EXIST=etc/dummy.conf")
> 

OK.

Reply via email to