[yum] update to latest HEAD.

Zdeněk Pavlas zpavlas at fedoraproject.org
Tue Apr 16 14:28:10 UTC 2013


commit 2db746b563cb7c208ebab8bc53b31084fc844bbd
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Tue Apr 16 16:27:48 2013 +0200

    update to latest HEAD.

 yum-HEAD.patch |  453 +++++++++++++++++++++++++++++++++++++++-----------------
 yum.spec       |   13 ++-
 2 files changed, 329 insertions(+), 137 deletions(-)
---
diff --git a/yum-HEAD.patch b/yum-HEAD.patch
index 86fe184..b138508 100644
--- a/yum-HEAD.patch
+++ b/yum-HEAD.patch
@@ -1861,7 +1861,7 @@ index 6056d38..8ea5d1f
  
 diff --git a/completion-helper.py b/completion-helper.py
 new file mode 100755
-index 0000000..999b9ad
+index 0000000..1102fd6
 --- /dev/null
 +++ b/completion-helper.py
 @@ -0,0 +1,95 @@
@@ -1935,9 +1935,9 @@ index 0000000..999b9ad
 +
 +
 +def get_pattern(extcmds):
-+    if len(extcmds) > 1 and extcmds[-1]:
++    if len(extcmds) > 1:
 +        try: return shlex.split(extcmds[-1])[0] + "*"
-+        except ValueError: pass
++        except (ValueError, IndexError): pass
 +    return "*"
 +
 +def main(args):
@@ -2623,7 +2623,7 @@ index 0000000..4d01a5a
 + the mailing list, yum at lists.baseurl.org, or consult bugzilla.
 +.fi
 diff --git a/docs/yum.8 b/docs/yum.8
-index 1a8202a..8d03a30 100644
+index 1a8202a..0af27bb 100644
 --- a/docs/yum.8
 +++ b/docs/yum.8
 @@ -35,6 +35,8 @@ gnome\-packagekit application\&.
@@ -3014,7 +3014,23 @@ index 1a8202a..8d03a30 100644
  options are: 'critical', 'emergency', 'error', 'warn' and 'debug'.
  .br
  Configuration Option: \fBrpmverbosity\fP
-@@ -506,7 +675,14 @@ option will corrupt your cache (and you can use $releasever in your cachedir
+@@ -461,8 +630,13 @@ processing logic. For more information see the \fBupdate\fP command above.
+ .br
+ Configuration Option: \fBobsoletes\fP
+ .IP "\fB\-x, \-\-exclude=package\fP"
+-Exclude a specific package by name or glob from updates on all repositories.
+-Configuration Option: \fBexclude\fP
++Exclude a specific package by name or glob from all repositories, so yum works
++as if that package was never in the repositories.
++This is commonly used so a package isn't upgraded or installed accidentally, but
++can be used to remove packages in any way that "yum list" will show packages.
++
++Can be disabled using --disableexcludes.
++Configuration Option: \fBexclude\fP, \fBincludepkgs\fP
+ .br
+ .IP "\fB\-\-color=[always|auto|never]\fP"
+ Display colorized output automatically, depending on the output terminal,
+@@ -506,7 +680,14 @@ option will corrupt your cache (and you can use $releasever in your cachedir
  configuration to stop this).
  .PP 
  .IP "\fB\-t, \-\-tolerant\fP"
@@ -3030,7 +3046,7 @@ index 1a8202a..8d03a30 100644
  .br
  .IP "\fB\-\-setopt=option=value\fP"
  Set any config option in yum config or repo files. For options in the global 
-@@ -523,7 +699,7 @@ version of the package\&.
+@@ -523,7 +704,7 @@ version of the package\&.
  
  The format of the output of yum list is:
  
@@ -3039,7 +3055,7 @@ index 1a8202a..8d03a30 100644
  
  .IP "\fByum list [all | glob_exp1] [glob_exp2] [\&.\&.\&.]\fP"
  List all available and installed packages\&.
-@@ -542,6 +718,10 @@ shell\-style glob and any matches are printed\&.
+@@ -542,6 +723,10 @@ shell\-style glob and any matches are printed\&.
  List the packages installed on the system that are not available in any yum
  repository listed in the config file.
  .IP
@@ -3051,7 +3067,7 @@ index 1a8202a..8d03a30 100644
  List the packages installed on the system that are obsoleted by packages
  in any yum repository listed in the config file.
 diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
-index 515aa73..e07d38c 100644
+index 515aa73..15aaa06 100644
 --- a/docs/yum.conf.5
 +++ b/docs/yum.conf.5
 @@ -114,15 +114,27 @@ are causing problems from the transaction.
@@ -3086,7 +3102,7 @@ index 515aa73..e07d38c 100644
  .br
  
  .IP
-@@ -131,6 +143,7 @@ Either `1' or `0'. If enabled, then yum will be tolerant of errors on the
+@@ -131,15 +143,22 @@ Either `1' or `0'. If enabled, then yum will be tolerant of errors on the
  command line with regard to packages. For example: if you request to install
  foo, bar and baz and baz is installed; yum won't error out complaining that baz
  is already installed. Default to `0' (not tolerant).
@@ -3094,7 +3110,23 @@ index 515aa73..e07d38c 100644
  .br
  Command-line option: \fB\-t\fP
  
-@@ -188,12 +201,32 @@ Default is `true'.
+ .IP
+ \fBexclude\fR
+-List of packages to exclude from updates or installs. This should be a space
++List of packages to exclude from all repositories, so yum works
++as if that package was never in the repositories.. This should be a space
+ separated list.
++This is commonly used so a package isn't upgraded or installed accidentally, but
++can be used to remove packages in any way that "yum list" will show packages.
+ Shell globs using wildcards (eg. * and ?) are allowed.
+ 
++Can be disabled using --disableexcludes.
++Command-line option: \fB\-x\fP
++
+ .IP
+ \fBexactarch\fR
+ Either `1' or `0'. Set to `1' to make yum update only update the architectures
+@@ -188,12 +207,32 @@ Default is `true'.
  Command-line option: \fB\-\-obsoletes\fP
  
  .IP
@@ -3127,7 +3159,7 @@ index 515aa73..e07d38c 100644
  
  .IP
  \fBgroupremove_leaf_only \fR
-@@ -215,6 +248,30 @@ of packages in groups will be installed when 'groupinstall' is called.
+@@ -215,6 +254,30 @@ of packages in groups will be installed when 'groupinstall' is called.
  Default is: default, mandatory
  
  .IP
@@ -3158,7 +3190,7 @@ index 515aa73..e07d38c 100644
  \fBinstallroot \fR
  Specifies an alternative installroot, relative to which all packages will be
  installed. 
-@@ -300,6 +357,40 @@ with the \fBthrottle\fR option (above). If \fBthrottle\fR is a percentage and
+@@ -300,6 +363,40 @@ with the \fBthrottle\fR option (above). If \fBthrottle\fR is a percentage and
  ignored. Default is `0' (no bandwidth throttling). 
  
  .IP
@@ -3199,7 +3231,7 @@ index 515aa73..e07d38c 100644
  \fBsslcacert \fR
  Path to the directory containing the databases of the certificate authorities
  yum should use to verify SSL certificates. Defaults to none - uses system
-@@ -331,6 +422,15 @@ Path to the SSL client key yum should use to connect to repos/remote sites
+@@ -331,6 +428,15 @@ Path to the SSL client key yum should use to connect to repos/remote sites
  Defaults to none.
  
  .IP
@@ -3215,7 +3247,7 @@ index 515aa73..e07d38c 100644
  \fBhistory_record \fR
  Boolean - should yum record history entries for transactions. This takes some
  disk space, and some extra time in the transactions. But it allows how to know a
-@@ -438,6 +538,31 @@ It's also possible to use the word "never", meaning that the metadata will
+@@ -438,6 +544,31 @@ It's also possible to use the word "never", meaning that the metadata will
  never expire. Note that when using a metalink file the metalink must always
  be newer than the metadata for the repository, due to the validation, so this
  timeout also applies to the metalink file.
@@ -3247,7 +3279,7 @@ index 515aa73..e07d38c 100644
  
  .IP
  \fBmirrorlist_expire \fR
-@@ -480,6 +605,19 @@ not listed above is the other metadata, which contains the changelog information
+@@ -480,6 +611,19 @@ not listed above is the other metadata, which contains the changelog information
  which is used by yum-changelog. This is what "yum makecache" uses.
  
  .IP
@@ -3267,7 +3299,7 @@ index 515aa73..e07d38c 100644
  \fBmultilib_policy \fR
  Can be set to 'all' or 'best'. All means install all possible arches for any package you 
  want to install. Therefore yum install foo will install foo.i386 and foo.x86_64 on x86_64, 
-@@ -587,14 +725,65 @@ be downloaded. The updates list is what is printed when you run "yum update",
+@@ -587,14 +731,65 @@ be downloaded. The updates list is what is printed when you run "yum update",
  Default is `normal'.
  See color_list_installed_older for possible values.
  
@@ -3289,15 +3321,15 @@ index 515aa73..e07d38c 100644
 +\fBupgrade_requirements_on_install \fR
 +When installing/reinstalling/upgrading packages go through each package's
 +installed dependencies and check for an update.
-+Boolean (1, 0, True, False, yes,no) Defaults to False
-+
+ Boolean (1, 0, True, False, yes,no) Defaults to False
+ 
 +.IP
 +\fBrecheck_installed_requires \fR
 +When upgrading a package do we recheck any requirements that existed in the old
 +package. Turning this on shouldn't do anything but slow yum depsolving down,
 +however using rpm --nodeps etc. can break the rpmdb and then this will help.
- Boolean (1, 0, True, False, yes,no) Defaults to False
- 
++Boolean (1, 0, True, False, yes,no) Defaults to False
++
 +.IP
 +\fBreset_nice \fR
 +If set to true then yum will try to reset the nice value to zero, before
@@ -3333,7 +3365,30 @@ index 515aa73..e07d38c 100644
  
  
  .SH "[repository] OPTIONS"
-@@ -755,6 +944,16 @@ repository.
+@@ -702,12 +897,18 @@ key will be automatically imported without user confirmation.
+ Same as the [main] \fBexclude\fR option but only for this repository.
+ Substitution variables, described below, are honored here.
+ 
++Can be disabled using --disableexcludes.
++
+ .IP
+ \fBincludepkgs\fR
+-Inverse of exclude. This is a list of packages you want to use from a
+-repository. If this option lists only one package then that is all yum will
+-ever see from the repository. Defaults to an empty list.  Substitution
+-variables, described below, are honored here.
++Inverse of exclude, yum will exclude any package in the repo. that doesn't
++match this list. This works in conjunction with exclude and doesn't override it,
++so if you exclude=*.i386 and includepkgs=python* then only packages starting
++with python that do not have an i386 arch. will be seen by yum in this repo.
++
++Substitution variables, described below, are honored here.
++
++Can be disabled using --disableexcludes.
+ 
+ .IP
+ \fBenablegroups\fR
+@@ -755,6 +956,16 @@ repository.
  Overrides the \fBbandwidth\fR option from the [main] section for this
  repository.
  
@@ -3350,7 +3405,7 @@ index 515aa73..e07d38c 100644
  
  .IP
  \fBsslcacert \fR
-@@ -776,6 +975,10 @@ repository.
+@@ -776,6 +987,10 @@ repository.
  Overrides the \fBsslclientkey\fR option from the [main] section for this
  repository.
  
@@ -3361,7 +3416,7 @@ index 515aa73..e07d38c 100644
  
  .IP
  \fBmetadata_expire \fR
-@@ -783,6 +986,11 @@ Overrides the \fBmetadata_expire\fR option from the [main] section for this
+@@ -783,6 +998,11 @@ Overrides the \fBmetadata_expire\fR option from the [main] section for this
  repository.
  
  .IP
@@ -3373,7 +3428,7 @@ index 515aa73..e07d38c 100644
  \fBmirrorlist_expire \fR
  Overrides the \fBmirrorlist_expire\fR option from the [main] section for this
  repository.
-@@ -824,7 +1032,16 @@ as greater/less than any other. defaults to 1000
+@@ -824,7 +1044,16 @@ as greater/less than any other. defaults to 1000
  If set to True yum will continue running if this repository cannot be 
  contacted for any reason. This should be set carefully as all repos are consulted
  for any given command. Defaults to False.
@@ -3538,7 +3593,7 @@ index 0cfaa4b..0000000
 -
 -exit 0
 diff --git a/etc/Makefile b/etc/Makefile
-index 29a7f95..99b5137 100644
+index 29a7f95..3e14af8 100644
 --- a/etc/Makefile
 +++ b/etc/Makefile
 @@ -1,4 +1,6 @@
@@ -3548,7 +3603,7 @@ index 29a7f95..99b5137 100644
  
  all:
  	echo "Nothing to do"
-@@ -24,15 +26,8 @@ install:
+@@ -24,15 +26,9 @@ install:
  
  	mkdir -p $(DESTDIR)/etc/dbus-1/system.d/
  	install -m 755 yum-updatesd-dbus.conf $(DESTDIR)/etc/dbus-1/system.d/yum-updatesd.conf
@@ -3569,6 +3624,7 @@ index 29a7f95..99b5137 100644
 +	install -m 644 yum.bash $(DESTDIR)/$(compdir)/yum
 +	ln -s yum $(DESTDIR)/$(compdir)/yummain.py
 +	install -m 644 yum-cron.conf $(YUMETC)
++	install -m 644 yum-cron-hourly.conf $(YUMETC)
 diff --git a/etc/yum-cron b/etc/yum-cron
 deleted file mode 100755
 index 63c5ec0..0000000
@@ -3677,9 +3733,74 @@ index 63c5ec0..0000000
 -esac
 -
 -exit $RETVAL
+diff --git a/etc/yum-cron-hourly.conf b/etc/yum-cron-hourly.conf
+new file mode 100644
+index 0000000..ece67c4
+--- /dev/null
++++ b/etc/yum-cron-hourly.conf
+@@ -0,0 +1,59 @@
++[commands]
++# Whether a message should emitted when updates are available.
++update_messages = no
++
++# Whether updates should be downloaded when they are available. Note
++# that updates_messages must also be yes for updates to be downloaded.
++download_updates = no
++
++# Whether updates should be applied when they are available.  Note
++# that both update_messages and download_updates must also be yes for
++# the update to be applied
++apply_updates = no
++
++# Maximum amout of time to randomly sleep, in minutes.  The program
++# will sleep for a random amount of time between 0 and random_sleep
++# minutes before running.  This is useful for e.g. staggering the
++# times that multiple systems will access update servers.  If
++# random_sleep is 0 or negative, the program will run immediately.
++random_sleep = 0
++
++
++[emitters]
++# Name to use for this system in messages that are emitted.  If
++# system_name is None, the hostname will be used.
++system_name = None
++
++# How to send messages.  Valid options are stdio and email.  If
++# emit_via includes stdio, messages will be sent to stdout; this is useful
++# to have cron send the messages.  If emit_via includes email, this
++# program will send email itself according to the configured options.
++# If emit_via is None or left blank, no messages will be sent.
++emit_via = stdio
++
++# The width, in characters, that messages that are emitted should be
++# formatted to.
++ouput_width = 80
++
++
++[email]
++# The address to send email messages from.
++email_from = root
++
++# List of addresses to send messages to.
++email_to = root
++
++# Name of the host to connect to to send email messages.
++email_host = localhost
++
++
++[groups]
++# List of groups to update
++group_list = None
++
++# The types of group packages to install
++group_package_types = mandatory, default
++
++[base]
++# override yum options of the same name
++# skip_broken = True
 diff --git a/etc/yum-cron.conf b/etc/yum-cron.conf
 new file mode 100644
-index 0000000..c227e40
+index 0000000..d19fce3
 --- /dev/null
 +++ b/etc/yum-cron.conf
 @@ -0,0 +1,59 @@
@@ -3689,7 +3810,7 @@ index 0000000..c227e40
 +
 +# Whether updates should be downloaded when they are available. Note
 +# that updates_messages must also be yes for updates to be downloaded.
-+download_updates = no
++download_updates = yes
 +
 +# Whether updates should be applied when they are available.  Note
 +# that both update_messages and download_updates must also be yes for
@@ -183407,10 +183528,10 @@ index ced6ba0..28fdd70
              return_code = self.doTransaction()
 diff --git a/yum-cron/Makefile b/yum-cron/Makefile
 new file mode 100644
-index 0000000..812bea2
+index 0000000..875d3d7
 --- /dev/null
 +++ b/yum-cron/Makefile
-@@ -0,0 +1,26 @@
+@@ -0,0 +1,28 @@
 +UNITDIR=/lib/systemd/system
 +
 +INIT=systemd
@@ -183430,12 +183551,14 @@ index 0000000..812bea2
 +	install -D -m 755 yum-cron.sysvinit $(DESTDIR)/etc/rc.d/init.d/yum-cron
 +
 +install-common:
++	mkdir -p $(DESTDIR)/etc/cron.hourly
 +	mkdir -p $(DESTDIR)/etc/cron.daily
 +	mkdir -p $(DESTDIR)/etc/rc.d/init.d
 +	mkdir -p $(DESTDIR)/usr/sbin
-+# Install yum-update.cron as 0yum-update.cron so it runs before items like
++# Install as 0yum-*.cron so it runs before items like
 +# manpage update, mlocate, and prelink
-+	install -D -m 755 yum-update.cron.sh $(DESTDIR)/etc/cron.daily/0yum-update.cron
++	install -D -m 755 yum-daily.cron.sh $(DESTDIR)/etc/cron.daily/0yum-daily.cron
++	install -D -m 755 yum-hourly.cron.sh $(DESTDIR)/etc/cron.hourly/0yum-hourly.cron
 +	install -D -m 755 yum-cron.py $(DESTDIR)/usr/sbin/yum-cron
 diff --git a/yum-cron/TODO b/yum-cron/TODO
 new file mode 100644
@@ -184717,11 +184840,11 @@ index 0000000..ee531c6
 +esac
 +
 +exit $RETVAL
-diff --git a/yum-cron/yum-update.cron.sh b/yum-cron/yum-update.cron.sh
+diff --git a/yum-cron/yum-daily.cron.sh b/yum-cron/yum-daily.cron.sh
 new file mode 100755
 index 0000000..06dee5f
 --- /dev/null
-+++ b/yum-cron/yum-update.cron.sh
++++ b/yum-cron/yum-daily.cron.sh
 @@ -0,0 +1,11 @@
 +#!/bin/bash
 +
@@ -184734,6 +184857,23 @@ index 0000000..06dee5f
 +
 +# Action!
 +exec /usr/sbin/yum-cron
+diff --git a/yum-cron/yum-hourly.cron.sh b/yum-cron/yum-hourly.cron.sh
+new file mode 100755
+index 0000000..557dd4d
+--- /dev/null
++++ b/yum-cron/yum-hourly.cron.sh
+@@ -0,0 +1,11 @@
++#!/bin/bash
++
++# Only run if this flag is set. The flag is created by the yum-cron init
++# script when the service is started -- this allows one to use chkconfig and
++# the standard "service stop|start" commands to enable or disable yum-cron.
++if [[ ! -f /var/lock/subsys/yum-cron ]]; then
++  exit 0
++fi
++
++# Action!
++exec /usr/sbin/yum-cron -C /etc/yum/yum-cron-hourly.conf
 diff --git a/yum-updatesd.py b/yum-updatesd.py
 old mode 100644
 new mode 100755
@@ -185295,10 +185435,10 @@ index 1ce4720..2f3f7a3
      gobject.threads_init()
      dbus.glib.threads_init()
 diff --git a/yum.spec b/yum.spec
-index abd203f..294eb96 100644
+index abd203f..a270de5 100644
 --- a/yum.spec
 +++ b/yum.spec
-@@ -1,24 +1,74 @@
+@@ -1,24 +1,78 @@
 -Summary: RPM installer/updater
 +%define move_yum_conf_back 1
 +%define auto_sitelib 1
@@ -185311,6 +185451,11 @@ index abd203f..294eb96 100644
 +%define yum_cron_systemd 0
 +%endif
 +
++%if ! 0%{?rhel}
++# we don't have this in rhel yet...
++BuildRequires: bash-completion
++%endif
++
 +%if 0%{?fedora} <= 18
 +# yum in Fedora <= 18 doesn't use systemd unit files...
 +%define yum_cron_systemd 0
@@ -185359,7 +185504,6 @@ index abd203f..294eb96 100644
 +BuildRequires: python-urlgrabber >= 3.9.0-8
 +BuildRequires: yum-metadata-parser >= 1.1.0
 +BuildRequires: pygpgme
-+BuildRequires: bash-completion
 +# End of CheckRequires
 +Conflicts: pirut < 1.1.4
  Requires: python >= 2.4
@@ -185379,7 +185523,7 @@ index abd203f..294eb96 100644
  Conflicts: rpm >= 5-0
  # Zif is a re-implementation of yum in C, however:
  #
-@@ -34,18 +84,30 @@ Conflicts: rpm >= 5-0
+@@ -34,18 +88,30 @@ Conflicts: rpm >= 5-0
  # zif experts).
  #
  # ...so we have two sane choices: i) Conflict with it. 2) Stop developing yum.
@@ -185417,7 +185561,7 @@ index abd203f..294eb96 100644
  
  %description
  Yum is a utility that can check for and automatically download and
-@@ -58,9 +120,11 @@ Group: Applications/System
+@@ -58,9 +124,11 @@ Group: Applications/System
  Requires: yum = %{version}-%{release}
  Requires: dbus-python
  Requires: pygobject2
@@ -185431,7 +185575,7 @@ index abd203f..294eb96 100644
  Requires(postun): /sbin/service
  
  
-@@ -68,33 +132,74 @@ Requires(postun): /sbin/service
+@@ -68,33 +136,74 @@ Requires(postun): /sbin/service
  yum-updatesd provides a daemon which checks for available updates and 
  can notify you when they are available via email, syslog or dbus. 
  
@@ -185511,7 +185655,7 @@ index abd203f..294eb96 100644
  
  # Ghost files:
  mkdir -p $RPM_BUILD_ROOT/var/lib/yum/history
-@@ -102,12 +207,26 @@ mkdir -p $RPM_BUILD_ROOT/var/lib/yum/plugins
+@@ -102,12 +211,26 @@ mkdir -p $RPM_BUILD_ROOT/var/lib/yum/plugins
  mkdir -p $RPM_BUILD_ROOT/var/lib/yum/yumdb
  touch $RPM_BUILD_ROOT/var/lib/yum/uuid
  
@@ -185538,7 +185682,7 @@ index abd203f..294eb96 100644
  %post updatesd
  /sbin/chkconfig --add yum-updatesd
  /sbin/service yum-updatesd condrestart >/dev/null 2>&1
-@@ -119,9 +238,29 @@ if [ $1 = 0 ]; then
+@@ -119,9 +242,29 @@ if [ $1 = 0 ]; then
   /sbin/service yum-updatesd stop >/dev/null 2>&1
  fi
  exit 0
@@ -185569,7 +185713,7 @@ index abd203f..294eb96 100644
  # Make sure chkconfig knows about the service
  /sbin/chkconfig --add yum-cron
  # if an upgrade:
-@@ -144,8 +283,13 @@ if [ "$1" -ge "1" ]; then
+@@ -144,8 +287,13 @@ if [ "$1" -ge "1" ]; then
   fi
  fi 
  exit 0
@@ -185583,7 +185727,7 @@ index abd203f..294eb96 100644
  # if this will be a complete removeal of yum-cron rather than an upgrade,
  # remove the service from chkconfig control
  if [ $1 = 0 ]; then
-@@ -153,33 +297,48 @@ if [ $1 = 0 ]; then
+@@ -153,33 +301,48 @@ if [ $1 = 0 ]; then
   /sbin/service yum-cron stop 1> /dev/null 2>&1
  fi
  exit 0
@@ -185639,7 +185783,7 @@ index abd203f..294eb96 100644
  %dir /var/cache/yum
  %dir /var/lib/yum
  %ghost /var/lib/yum/uuid
-@@ -188,20 +347,25 @@ exit 0
+@@ -188,20 +351,27 @@ exit 0
  %ghost /var/lib/yum/yumdb
  %{_mandir}/man*/yum.*
  %{_mandir}/man*/yum-shell*
@@ -185655,8 +185799,10 @@ index abd203f..294eb96 100644
 -%{_sysconfdir}/cron.daily/0yum.cron
 -%config(noreplace) %{_sysconfdir}/yum/yum-daily.yum
 -%config(noreplace) %{_sysconfdir}/yum/yum-weekly.yum
-+%{_sysconfdir}/cron.daily/0yum-update.cron
++%{_sysconfdir}/cron.daily/0yum-daily.cron
++%{_sysconfdir}/cron.hourly/0yum-hourly.cron
 +%config(noreplace) %{_sysconfdir}/yum/yum-cron.conf
++%config(noreplace) %{_sysconfdir}/yum/yum-cron-hourly.conf
 +%if %{yum_cron_systemd}
 +%{_unitdir}/yum-cron.service
 +%else
@@ -185673,7 +185819,7 @@ index abd203f..294eb96 100644
  %files updatesd
  %defattr(-, root, root)
  %config(noreplace) %{_sysconfdir}/yum/yum-updatesd.conf
-@@ -210,8 +374,12 @@ exit 0
+@@ -210,8 +380,12 @@ exit 0
  %{_datadir}/yum-cli/yumupd.py*
  %{_sbindir}/yum-updatesd
  %{_mandir}/man*/yum-updatesd*
@@ -185714,7 +185860,7 @@ index c1af4ad..e3e3956 100644
      pass
      
 diff --git a/yum/__init__.py b/yum/__init__.py
-index 99039e0..a5e21fb 100644
+index 99039e0..d1ab41a 100644
 --- a/yum/__init__.py
 +++ b/yum/__init__.py
 @@ -21,6 +21,7 @@ The Yum RPM software updater.
@@ -186908,13 +187054,13 @@ index 99039e0..a5e21fb 100644
 +            pkgs.append(po)
 +
 +        # download presto metadata and use drpms
-+        presto = DeltaInfo(self, pkgs)
++        presto = DeltaInfo(self, pkgs, adderror)
 +        deltasize = rpmsize = 0
 +        for po in pkgs:
 +            if isinstance(po, DeltaPackage):
 +                if verify_local(po):
 +                    # there's .drpm already, use it
-+                    presto.rebuild(po, adderror)
++                    presto.rebuild(po)
                      continue
 -                        
 +                deltasize += po.size
@@ -187024,7 +187170,7 @@ index 99039e0..a5e21fb 100644
 -                    del errors[po]
 +                                                                  local_size[0])
 +                    if isinstance(po, DeltaPackage):
-+                        presto.rebuild(po, adderror)
++                        presto.rebuild(po)
 +                        return
 +                    else:
 +                        presto.dequeue_max()
@@ -191999,10 +192145,10 @@ index 6d744c0..60047a9 100644
          self.conflict = conflict # what the conflict was between them
 diff --git a/yum/drpm.py b/yum/drpm.py
 new file mode 100644
-index 0000000..058977e
+index 0000000..ae5a764
 --- /dev/null
 +++ b/yum/drpm.py
-@@ -0,0 +1,310 @@
+@@ -0,0 +1,316 @@
 +#  Integrated delta rpm support
 +#  Copyright 2013 Zdenek Pavlas
 +
@@ -192026,8 +192172,8 @@ index 0000000..058977e
 +from yum.Errors import RepoError
 +from yum.i18n import exception2msg, _
 +from yum.Errors import MiscError
-+from misc import checksum, repo_gen_decompress
-+from urlgrabber import grabber
++from yum.misc import checksum, repo_gen_decompress, unlink_f
++from urlgrabber import grabber, progress
 +async = hasattr(grabber, 'parallel_wait')
 +from xml.etree.cElementTree import iterparse
 +import os, re
@@ -192111,10 +192257,12 @@ index 0000000..058977e
 +    return unknown
 +
 +class DeltaInfo:
-+    def __init__(self, ayum, pkgs):
++    def __init__(self, ayum, pkgs, adderror):
 +        self.verbose_logger = ayum.verbose_logger
++        self.adderror = adderror
 +        self.jobs = {}
 +        self._future_jobs = []
++        self.progress = None
 +        self.limit = ayum.conf.deltarpm
 +        if self.limit < 0:
 +            nprocs = _num_cpus_online()
@@ -192243,39 +192391,43 @@ index 0000000..058977e
 +            # urlgrabber spawns child jobs, too.  But they exit synchronously,
 +            # so we should never see an unknown pid here.
 +            assert pid in self.jobs
-+            callback = self.jobs.pop(pid)
-+            callback(code)
++            po = self.jobs.pop(pid)
++            if self.progress:
++                self.done += po.rpm.size
++                self.progress.update(self.done)
++            if code != 0:
++                unlink_f(po.rpm.localpath)
++                self.adderror(po, _('Delta RPM rebuild failed'))
++            elif not po.rpm.verifyLocalPkg():
++                self.adderror(po, _('Checksum of the delta-rebuilt RPM failed'))
++            else:
++                os.unlink(po.localpath)
++                po.localpath = po.rpm.localpath # for --downloadonly
 +            num += 1
 +        return num
 +
-+    def rebuild(self, po, adderror):
++    def rebuild(self, po):
 +        """ Turn a drpm into an rpm, by adding it to the queue and trying to
 +            service the queue. """
-+        # this runs when worker finishes
-+        def callback(code):
-+            if code != 0:
-+                adderror(po, _('Delta RPM rebuild failed'))
-+                return
-+            if not po.rpm.verifyLocalPkg():
-+                adderror(po, _('Checksum of the delta-rebuilt RPM failed'))
-+                return
-+            os.unlink(po.localpath)
-+            po.localpath = po.rpm.localpath # for --downloadonly
-+
-+        args = ()
-+        if po.oldrpm: args += '-r', po.oldrpm
-+        args += po.localpath, po.rpm.localpath
-+
-+        self.queue(args, callback)
++        self._future_jobs.append(po)
 +        self.dequeue_max()
 +
-+    def queue(self, args, callback):
-+        """ Queue a delta rebuild up. """
-+        self._future_jobs.append((args, callback))
-+
 +    def dequeue_all(self):
 +        """ De-Queue all delta rebuilds and spawn the rebuild processes. """
 +
++        count = total = 0
++        for po in self.jobs.values() + self._future_jobs:
++            count += 1
++            total += po.rpm.size
++        if total:
++            self.verbose_logger.info(_('Finishing delta rebuilds of %d package(s) (%s)'),
++                                     count, progress.format_number(total))
++            if po.repo.callback:
++                if hasattr(progress, 'text_meter_total_size'):
++                    progress.text_meter_total_size(0)
++                self.progress = po.repo.callback
++                self.progress.start(text='<locally rebuilding deltarpms>', size=total)
++                self.done = 0
 +        while self._future_jobs:
 +            self.dequeue()
 +
@@ -192305,14 +192457,14 @@ index 0000000..058977e
 +                return False
 +            self.wait((self.limit - len(self.jobs)) + 1)
 +
-+        args, callback = self._future_jobs.pop(0)
-+        self._spawn(args, callback)
-+
-+        return True
++        po = self._future_jobs.pop(0)
++        args = ()
++        if po.oldrpm: args += '-r', po.oldrpm
++        args += po.localpath, po.rpm.localpath
 +
-+    def _spawn(self, args, callback):
 +        pid = os.spawnl(os.P_NOWAIT, APPLYDELTA, APPLYDELTA, *args)
-+        self.jobs[pid] = callback
++        self.jobs[pid] = po
++        return True
 diff --git a/yum/failover.py b/yum/failover.py
 index bca9651..00c17ad 100644
 --- a/yum/failover.py
@@ -195407,7 +195559,7 @@ index 4d7e36e..826ad62 100644
      @param     quotes: legal quoting characters
      @type      quotes: string
 diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
-index 4d89d83..14d8c7a 100644
+index 4d89d83..57a6764 100644
 --- a/yum/transactioninfo.py
 +++ b/yum/transactioninfo.py
 @@ -34,6 +34,8 @@ import Errors
@@ -195527,17 +195679,28 @@ index 4d89d83..14d8c7a 100644
          self.removed = []
          self.installed = []
          self.updated = []
-@@ -365,6 +397,10 @@ class TransactionData:
+@@ -347,7 +379,7 @@ class TransactionData:
+ 
+         for txmbr in self.getMembers():
+             if txmbr.output_state == TS_UPDATE:
+-                if txmbr.isDep:
++                if txmbr.isDep and txmbr.reason != 'user':
+                     self.depupdated.append(txmbr)
+                 else:
+                     self.updated.append(txmbr)
+@@ -365,7 +397,11 @@ class TransactionData:
                      for g in txmbr.groups:
                          if g not in self.instgroups:
                              self.instgroups.append(g)
+-                if txmbr.isDep:
 +                if txmbr.environments:
 +                    for evg in txmbr.environments:
 +                        if evg not in self.instenvironments:
 +                            self.instenvironments.append(evg)
-                 if txmbr.isDep:
++                if txmbr.isDep and txmbr.reason != 'user':
                      self.depinstalled.append(txmbr)
                  else:
+                     self.installed.append(txmbr)
 @@ -377,6 +413,9 @@ class TransactionData:
                  for g in txmbr.groups:
                      if g not in self.instgroups:
@@ -195763,7 +195926,7 @@ index 2cb1acb..3ac0010 100644
      def __unicode__(self):
          ret = u''
 diff --git a/yum/yumRepo.py b/yum/yumRepo.py
-index e5e9ece..b9bf1fe 100644
+index e5e9ece..2e4fcd9 100644
 --- a/yum/yumRepo.py
 +++ b/yum/yumRepo.py
 @@ -20,10 +20,12 @@ import time
@@ -196116,7 +196279,7 @@ index e5e9ece..b9bf1fe 100644
  
          if proxy_string is not None:
              self._proxy_dict['http'] = proxy_string
-@@ -483,13 +605,30 @@ class YumRepository(Repository, config.RepoConf):
+@@ -483,14 +605,49 @@ class YumRepository(Repository, config.RepoConf):
  
          ugopts = self._default_grabopts()
          self._grabfunc = URLGrabber(progress_obj=self.callback,
@@ -196142,13 +196305,33 @@ index e5e9ece..b9bf1fe 100644
 +        urls = self.urls
 +        if self.metalink:
 +            urls = map(add_mc, urls)
++
++        def mirror_failure(obj):
++            action = {}
++
++            # special handling of 503 errors
++            if getattr(obj.exception, 'code', 0) == 503:
++                tries = getattr(obj, 'tries', self.retries)
++                if tries <= self.retries - len(self.urls):
++                    # don't remove this mirror yet
++                    action['remove'] = False
++
++            # No known user of this callback, but just in case...
++            cb = self.mirror_failure_obj
++            if cb:
++                fun, arg, karg = callable(cb) and (cb, (), {}) or cb
++                action.update(fun(obj, *arg, **karg))
  
 -        self._grab = mgclass(self._grabfunc, self.urls,
+-                             failure_callback=self.mirror_failure_obj)
++            return action
++
 +        self._grab = mgclass(self._grabfunc, urls,
-                              failure_callback=self.mirror_failure_obj)
++                             failure_callback=mirror_failure)
  
      def _default_grabopts(self, cache=True):
-@@ -499,6 +638,7 @@ class YumRepository(Repository, config.RepoConf):
+         opts = { 'keepalive': self.keepalive,
+@@ -499,6 +656,7 @@ class YumRepository(Repository, config.RepoConf):
                   'throttle': self.throttle,
                   'proxies': self.proxy_dict,
                   'timeout': self.timeout,
@@ -196156,7 +196339,7 @@ index e5e9ece..b9bf1fe 100644
                   'http_headers': tuple(self.__headersListFromDict(cache=cache)),
                   'ssl_verify_peer': self.sslverify,
                   'ssl_verify_host': self.sslverify,
-@@ -561,7 +701,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -561,7 +719,7 @@ class YumRepository(Repository, config.RepoConf):
          cookie = self.cachedir + '/' + self.metadata_cookie_fn
          self.setAttribute('_dir_setup_metadata_cookie', cookie)
  
@@ -196165,7 +196348,7 @@ index e5e9ece..b9bf1fe 100644
              self._dirSetupMkdir_p(dir)
  
          # persistdir is really root-only but try the make anyway and just
-@@ -714,15 +854,15 @@ class YumRepository(Repository, config.RepoConf):
+@@ -714,15 +872,15 @@ class YumRepository(Repository, config.RepoConf):
              local = self.metalink_filename + '.tmp'
              if not self._metalinkCurrent():
                  url = misc.to_utf8(self.metalink)
@@ -196185,7 +196368,7 @@ index e5e9ece..b9bf1fe 100644
                          raise Errors.RepoError, msg
                      #  Now, we have an old usable metalink, so we can't move to
                      # a newer repomd.xml ... or checksums won't match.
-@@ -749,9 +889,22 @@ class YumRepository(Repository, config.RepoConf):
+@@ -749,9 +907,22 @@ class YumRepository(Repository, config.RepoConf):
                                                                value),
                               fdel=lambda self: setattr(self, "_metalink", None))
  
@@ -196209,7 +196392,7 @@ index e5e9ece..b9bf1fe 100644
          """retrieve file from the mirrorgroup for the repo
             relative to local, optionally get range from
             start to end, also optionally retrieve from a specific baseurl"""
-@@ -768,7 +921,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -768,7 +939,7 @@ class YumRepository(Repository, config.RepoConf):
  
          if local is None or relative is None:
              raise Errors.RepoError, \
@@ -196218,7 +196401,7 @@ index e5e9ece..b9bf1fe 100644
  
          if self.cache == 1:
              if os.path.exists(local): # FIXME - we should figure out a way
-@@ -778,7 +931,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -778,7 +949,7 @@ class YumRepository(Repository, config.RepoConf):
                  raise Errors.RepoError, \
                      "Caching enabled but no local cache of %s from %s" % (local,
  
@@ -196227,7 +196410,7 @@ index e5e9ece..b9bf1fe 100644
  
          if url:
              (scheme, netloc, path, query, fragid) = urlparse.urlsplit(url)
-@@ -796,6 +949,16 @@ class YumRepository(Repository, config.RepoConf):
+@@ -796,6 +967,16 @@ class YumRepository(Repository, config.RepoConf):
              except Errors.MediaError, e:
                  verbose_logger.log(logginglevels.DEBUG_2, "Error getting package from media; falling back to url %s" %(e,))
  
@@ -196244,7 +196427,7 @@ index e5e9ece..b9bf1fe 100644
          if url and scheme != "media":
              ugopts = self._default_grabopts(cache=cache)
              ug = URLGrabber(progress_obj = self.callback,
-@@ -815,14 +978,9 @@ class YumRepository(Repository, config.RepoConf):
+@@ -815,14 +996,9 @@ class YumRepository(Repository, config.RepoConf):
                                      range=(start, end),
                                      )
              except URLGrabError, e:
@@ -196262,7 +196445,7 @@ index e5e9ece..b9bf1fe 100644
  
  
          else:
-@@ -835,19 +993,19 @@ class YumRepository(Repository, config.RepoConf):
+@@ -835,19 +1011,19 @@ class YumRepository(Repository, config.RepoConf):
                                             reget = reget,
                                             checkfunc=checkfunc,
                                             http_headers=headers,
@@ -196289,7 +196472,7 @@ index e5e9ece..b9bf1fe 100644
          remote = package.relativepath
          local = package.localPkg()
          basepath = package.basepath
-@@ -857,15 +1015,30 @@ class YumRepository(Repository, config.RepoConf):
+@@ -857,15 +1033,30 @@ class YumRepository(Repository, config.RepoConf):
                  return local
              misc.unlink_f(local)
  
@@ -196321,7 +196504,7 @@ index e5e9ece..b9bf1fe 100644
      def getHeader(self, package, checkfunc = None, reget = 'simple',
              cache = True):
  
-@@ -933,7 +1106,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -933,7 +1124,7 @@ class YumRepository(Repository, config.RepoConf):
              self._metadataCurrent = False
          return self._metadataCurrent
  
@@ -196330,7 +196513,7 @@ index e5e9ece..b9bf1fe 100644
          """check if any file is older than a certain amount of time. Used for
             the cachecookie and the mirrorlist
             return True if w/i the expiration time limit
-@@ -943,6 +1116,24 @@ class YumRepository(Repository, config.RepoConf):
+@@ -943,6 +1134,24 @@ class YumRepository(Repository, config.RepoConf):
             file. If any of them are newer then invalidate the cache
             """
  
@@ -196355,7 +196538,7 @@ index e5e9ece..b9bf1fe 100644
          # -1 is special and should never get refreshed
          if expiration_time == -1 and os.path.exists(myfile):
              return True
-@@ -991,7 +1182,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -991,7 +1200,7 @@ class YumRepository(Repository, config.RepoConf):
      def _cachingRepoXML(self, local):
          """ Should we cache the current repomd.xml """
          if self.cache and not os.path.exists(local):
@@ -196364,7 +196547,7 @@ index e5e9ece..b9bf1fe 100644
          if self.cache or self.metadataCurrent():
              return True
          return False
-@@ -1020,7 +1211,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1020,7 +1229,7 @@ class YumRepository(Repository, config.RepoConf):
              if grab_can_fail:
                  return None
              raise Errors.RepoError, 'Error downloading file %s: %s' % (local, e)
@@ -196373,7 +196556,7 @@ index e5e9ece..b9bf1fe 100644
              misc.unlink_f(tfname)
              if grab_can_fail:
                  return None
-@@ -1047,7 +1238,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1047,7 +1256,7 @@ class YumRepository(Repository, config.RepoConf):
                  parse_can_fail = 'old_repo_XML' in self._oldRepoMDData
              if parse_can_fail:
                  return None
@@ -196382,7 +196565,7 @@ index e5e9ece..b9bf1fe 100644
  
      def _saveOldRepoXML(self, local):
          """ If we have an older repomd.xml file available, save it out. """
-@@ -1074,7 +1265,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1074,7 +1283,7 @@ class YumRepository(Repository, config.RepoConf):
          #  We still want the old data, so we don't download twice. So we
          # pretend everything is good until the revert.
          if not self.timestamp_check:
@@ -196391,7 +196574,7 @@ index e5e9ece..b9bf1fe 100644
  
          if 'old_repo_XML' not in self._oldRepoMDData:
              self._oldRepoMDData = {}
-@@ -1250,7 +1441,6 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1250,7 +1459,6 @@ class YumRepository(Repository, config.RepoConf):
              self._revertOldRepoXML()
              return False
  
@@ -196399,7 +196582,7 @@ index e5e9ece..b9bf1fe 100644
          if caching:
              return False # Skip any work.
  
-@@ -1260,6 +1450,9 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1260,6 +1468,9 @@ class YumRepository(Repository, config.RepoConf):
          return True
  
      def _check_db_version(self, mdtype, repoXML=None):
@@ -196409,7 +196592,7 @@ index e5e9ece..b9bf1fe 100644
          if repoXML is None:
              repoXML = self.repoXML
          if mdtype in repoXML.repoData:
-@@ -1277,11 +1470,11 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1277,11 +1488,11 @@ class YumRepository(Repository, config.RepoConf):
              return None
  
          if not file_check:
@@ -196424,7 +196607,7 @@ index e5e9ece..b9bf1fe 100644
              if not os.path.exists(local):
                  local = misc.decompress(local, fn_only=True)
                  compressed = True
-@@ -1302,6 +1495,17 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1302,6 +1513,17 @@ class YumRepository(Repository, config.RepoConf):
              into the delete list, this means metadata can change filename
              without us leaking it. """
  
@@ -196442,7 +196625,7 @@ index e5e9ece..b9bf1fe 100644
          def _mdtype_eq(omdtype, odata, nmdtype, ndata):
              """ Check if two returns from _get_mdtype_data() are equal. """
              if ndata is None:
-@@ -1321,6 +1525,14 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1321,6 +1543,14 @@ class YumRepository(Repository, config.RepoConf):
              return True
  
          all_mdtypes = self.retrieved.keys()
@@ -196457,7 +196640,7 @@ index e5e9ece..b9bf1fe 100644
          if mdtypes is None:
              mdtypes = all_mdtypes
  
-@@ -1333,8 +1545,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1333,8 +1563,7 @@ class YumRepository(Repository, config.RepoConf):
  
          # Inited twice atm. ... sue me
          self._oldRepoMDData['new_MD_files'] = []
@@ -196467,7 +196650,7 @@ index e5e9ece..b9bf1fe 100644
          for mdtype in all_mdtypes:
              (nmdtype, ndata) = self._get_mdtype_data(mdtype)
  
-@@ -1371,43 +1582,16 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1371,43 +1600,16 @@ class YumRepository(Repository, config.RepoConf):
              # No old repomd data, but we might still have uncompressed MD
              if self._groupCheckDataMDValid(ndata, nmdtype, mdtype):
                  continue
@@ -196482,7 +196665,9 @@ index e5e9ece..b9bf1fe 100644
 -        if len(downloading_with_size) == 1:
 -            downloading_no_size.extend(downloading_with_size)
 -            downloading_with_size = []
--
++    def _commonRetrieveDataMD_done(self, downloading):
++        """ Uncompress the downloaded metadata """
+ 
 -        remote_size = 0
 -        local_size  = 0
 -        for (ndata, nmdtype) in downloading_with_size: # Get total size...
@@ -196499,9 +196684,7 @@ index e5e9ece..b9bf1fe 100644
 -            if not self._retrieveMD(nmdtype, retrieve_can_fail=True):
 -                self._revertOldRepoXML()
 -                return False
-+    def _commonRetrieveDataMD_done(self, downloading):
-+        """ Uncompress the downloaded metadata """
- 
+-
 -        for (ndata, nmdtype) in downloading_with_size + downloading_no_size:
 +        for (ndata, nmdtype) in downloading:
              local = self._get_mdtype_fname(ndata, False)
@@ -196516,7 +196699,7 @@ index e5e9ece..b9bf1fe 100644
  
      def _groupLoadRepoXML(self, text=None, mdtypes=None):
          """ Retrieve the new repomd.xml from the repository, then check it
-@@ -1421,7 +1605,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1421,7 +1623,7 @@ class YumRepository(Repository, config.RepoConf):
              self._commonRetrieveDataMD(mdtypes)
  
      def _mdpolicy2mdtypes(self):
@@ -196525,7 +196708,7 @@ index e5e9ece..b9bf1fe 100644
                       'group:primary' : ['primary'],
                       'group:small'   : ["primary", "updateinfo"],
                       'group:main'    : ["primary", "group", "filelists",
-@@ -1436,6 +1620,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1436,6 +1638,7 @@ class YumRepository(Repository, config.RepoConf):
          if not mdtypes or 'group:all' in mdtypes:
              mdtypes = None
          else:
@@ -196533,7 +196716,7 @@ index e5e9ece..b9bf1fe 100644
              mdtypes = sorted(list(mdtypes))
          return mdtypes
  
-@@ -1446,17 +1631,12 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1446,17 +1649,12 @@ class YumRepository(Repository, config.RepoConf):
          except KeyboardInterrupt:
              self._revertOldRepoXML() # Undo metadata cookie?
              raise
@@ -196553,7 +196736,7 @@ index e5e9ece..b9bf1fe 100644
          return self._repoXML
  
  
-@@ -1480,7 +1660,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1480,7 +1678,7 @@ class YumRepository(Repository, config.RepoConf):
                  result = self._getFile(relative='repodata/repomd.xml.asc',
                                         copy_local=1,
                                         local = sigfile,
@@ -196562,7 +196745,7 @@ index e5e9ece..b9bf1fe 100644
                                         reget=None,
                                         checkfunc=None,
                                         cache=self.http_caching == 'all',
-@@ -1508,6 +1688,18 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1508,6 +1706,18 @@ class YumRepository(Repository, config.RepoConf):
              raise URLGrabError(-1, 'repomd.xml does not match metalink for %s' %
                                 self)
  
@@ -196581,7 +196764,7 @@ index e5e9ece..b9bf1fe 100644
  
      def checkMD(self, fn, mdtype, openchecksum=False):
          """check the metadata type against its checksum"""
-@@ -1537,6 +1729,16 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1537,6 +1747,16 @@ class YumRepository(Repository, config.RepoConf):
          if size is not None:
              size = int(size)
  
@@ -196598,7 +196781,7 @@ index e5e9ece..b9bf1fe 100644
          try: # get the local checksum
              l_csum = self._checksum(r_ctype, file, datasize=size)
          except Errors.RepoError, e:
-@@ -1545,21 +1747,20 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1545,21 +1765,20 @@ class YumRepository(Repository, config.RepoConf):
              raise URLGrabError(-3, 'Error performing checksum')
  
          if l_csum == r_csum:
@@ -196622,7 +196805,7 @@ index e5e9ece..b9bf1fe 100644
          """ Internal function, use .retrieveMD() from outside yum. """
          #  Note that this can raise Errors.RepoMDError if mdtype doesn't exist
          # for this repo.
-@@ -1580,15 +1781,19 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1580,15 +1799,19 @@ class YumRepository(Repository, config.RepoConf):
                  try:
                      self.checkMD(local, mdtype)
                  except URLGrabError, e:
@@ -196643,7 +196826,7 @@ index e5e9ece..b9bf1fe 100644
  
          if (os.path.exists(local) or
              self._preload_md_from_system_cache(os.path.basename(local))):
-@@ -1597,15 +1802,22 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1597,15 +1820,22 @@ class YumRepository(Repository, config.RepoConf):
                  return local # it's the same return the local one
  
          try:
@@ -196671,7 +196854,7 @@ index e5e9ece..b9bf1fe 100644
              local = self._getFile(relative=remote,
                                    local=local, 
                                    copy_local=1,
-@@ -1613,8 +1825,9 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1613,8 +1843,9 @@ class YumRepository(Repository, config.RepoConf):
                                    checkfunc=checkfunc, 
                                    text=text,
                                    cache=self.http_caching == 'all',
@@ -196683,7 +196866,7 @@ index e5e9ece..b9bf1fe 100644
              if retrieve_can_fail:
                  return None
              raise
-@@ -1622,9 +1835,8 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1622,9 +1853,8 @@ class YumRepository(Repository, config.RepoConf):
              if retrieve_can_fail:
                  return None
              raise Errors.RepoError, \
@@ -196694,7 +196877,7 @@ index e5e9ece..b9bf1fe 100644
              return local
  
  
-@@ -1646,13 +1858,21 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1646,13 +1876,21 @@ class YumRepository(Repository, config.RepoConf):
  
      def getGroups(self):
          """gets groups and returns group file path for the repository, if there
@@ -196719,7 +196902,7 @@ index e5e9ece..b9bf1fe 100644
          self._callbacks_changed = True
  
      def setFailureObj(self, failure_obj):
-@@ -1681,7 +1901,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1681,7 +1919,7 @@ class YumRepository(Repository, config.RepoConf):
                  print "Could not read mirrorlist %s, error was \n%s" %(url, e)
                  content = []
              for line in content:
@@ -196728,7 +196911,7 @@ index e5e9ece..b9bf1fe 100644
                      continue
                  mirror = line.rstrip() # no more trailing \n's
                  mirror = mirror.replace('$ARCH', '$BASEARCH')
-@@ -1701,7 +1921,8 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1701,7 +1939,8 @@ class YumRepository(Repository, config.RepoConf):
          fo = None
  
          cacheok = False
@@ -196738,7 +196921,7 @@ index e5e9ece..b9bf1fe 100644
              cacheok = True
              fo = open(self.mirrorlist_file, 'r')
              url = 'file://' + self.mirrorlist_file # just to keep self._readMirrorList(fo,url) happy
-@@ -1713,7 +1934,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1713,7 +1952,7 @@ class YumRepository(Repository, config.RepoConf):
              ugopts = self._default_grabopts()
              try:
                  fo = urlgrabber.grabber.urlopen(url, **ugopts)
@@ -196747,7 +196930,7 @@ index e5e9ece..b9bf1fe 100644
                  print "Could not retrieve mirrorlist %s error was\n%s: %s" % (url, e.args[0], misc.to_unicode(e.args[1]))
                  fo = None
  
-@@ -1740,7 +1961,11 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1740,7 +1979,11 @@ class YumRepository(Repository, config.RepoConf):
          if os.path.exists(destfn):
              if os.stat(fn)[stat.ST_CTIME] <= os.stat(destfn)[stat.ST_CTIME]:
                  return False
@@ -196760,7 +196943,7 @@ index e5e9ece..b9bf1fe 100644
          return True
  
      def _preload_file_from_system_cache(self, filename, subdir='',
-@@ -1877,7 +2102,7 @@ def getMirrorList(mirrorlist, pdict = None):
+@@ -1877,7 +2120,7 @@ def getMirrorList(mirrorlist, pdict = None):
  
      try:
          fo = urlresolver.urlopen(url, proxies=pdict)
diff --git a/yum.spec b/yum.spec
index f8efc2b..e9b0910 100644
--- a/yum.spec
+++ b/yum.spec
@@ -41,7 +41,7 @@ BuildRequires: bash-completion
 Summary: RPM package installer/updater/manager
 Name: yum
 Version: 3.4.3
-Release: 82%{?dist}
+Release: 83%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 Source0: http://yum.baseurl.org/download/3.4/%{name}-%{version}.tar.gz
@@ -376,8 +376,10 @@ exit 0
 %files cron
 %defattr(-,root,root)
 %doc COPYING
-%{_sysconfdir}/cron.daily/0yum-update.cron
+%{_sysconfdir}/cron.daily/0yum-daily.cron
+%{_sysconfdir}/cron.hourly/0yum-hourly.cron
 %config(noreplace) %{_sysconfdir}/yum/yum-cron.conf
+%config(noreplace) %{_sysconfdir}/yum/yum-cron-hourly.conf
 %if %{yum_cron_systemd}
 %{_unitdir}/yum-cron.service
 %else
@@ -398,6 +400,13 @@ exit 0
 %endif
 
 %changelog
+* Tue Apr 16 2013 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-83
+- update to latest HEAD.
+- Update yum-cron to make it worthwhile on Fedora.
+- Fix the installed/depinstalled split.  BZ 952162
+- rebuilding deltarpms: fix the callback==None case. BZ 952357
+- Reuse mirrors when max_retries > len(mirrors).  BZ 765598
+
 * Thu Apr  4 2013 James Antill <james at fedoraproject.org> - 3.4.3-82
 - update to latest HEAD.
 - Keep installedFileRequires in sync. BZ 920758.


More information about the scm-commits mailing list