openSUSE Commits
Threads by month
- ----- 2024 -----
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
October 2015
- 1 participants
- 1896 discussions
Hello community,
here is the log from the commit of package git for openSUSE:Factory checked in at 2015-10-01 09:28:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/git (Old)
and /work/SRC/openSUSE:Factory/.git.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "git"
Changes:
--------
--- /work/SRC/openSUSE:Factory/git/git.changes 2015-09-17 09:17:55.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.git.new/git.changes 2015-10-01 09:28:20.000000000 +0200
@@ -1,0 +2,29 @@
+Tue Sep 29 18:57:13 UTC 2015 - astieger(a)suse.com
+
+- git 2.6.0:
+ * many UI and workflow updates, added parameters and options
+ * some performance optimisations and resource use reduction
+- refresh pager-don-t-use-unsafe-functions-in-signal-handle.patch
+
+-------------------------------------------------------------------
+Fri Sep 25 15:11:29 CEST 2015 - tiwai(a)suse.de
+
+- Fix deadlock in signal handler in pager (boo#942297):
+ pager-don-t-use-unsafe-functions-in-signal-handle.patch
+
+-------------------------------------------------------------------
+Sun Sep 20 16:34:29 UTC 2015 - astieger(a)suse.com
+
+- git 2.5.3:
+ * The experimental untracked-cache feature were buggy when paths
+ with a few levels of subdirectories are involved.
+ * Fix performance regression in "git am --skip"
+
+-------------------------------------------------------------------
+Sat Sep 19 10:13:32 UTC 2015 - dimstar(a)opensuse.org
+
+- Suggest instead of recommend git-web: git-web is the web-server
+ browsing part. Users that install git-core and appache will still
+ get it auto-recommended based on the supplements.
+
+-------------------------------------------------------------------
Old:
----
git-2.5.2.tar.sign
git-2.5.2.tar.xz
New:
----
git-2.6.0.tar.sign
git-2.6.0.tar.xz
pager-don-t-use-unsafe-functions-in-signal-handle.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ git.spec ++++++
--- /var/tmp/diff_new_pack.fFfC83/_old 2015-10-01 09:28:22.000000000 +0200
+++ /var/tmp/diff_new_pack.fFfC83/_new 2015-10-01 09:28:22.000000000 +0200
@@ -26,7 +26,7 @@
%endif
Name: git
-Version: 2.5.2
+Version: 2.6.0
Release: 0
Summary: Fast, scalable, distributed revision control system
License: GPL-2.0
@@ -51,6 +51,8 @@
Patch6: git-tcsh-completion-fixes.diff
# adapt paths in zsh completion (bnc#853183)
Patch7: git-zsh-completion-fixes.diff
+# PATCH-FIX-SUSE pager-don-t-use-unsafe-functions-in-signal-handle.patch boo#942297
+Patch8: pager-don-t-use-unsafe-functions-in-signal-handle.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: apache2
BuildRequires: asciidoc
@@ -70,8 +72,8 @@
BuildRequires: xmlto
BuildRequires: xz
Requires: git-core = %{version}
-Recommends: git-svn git-cvs git-email gitk git-gui git-web
-Suggests: git-daemon
+Recommends: git-svn git-cvs git-email gitk git-gui
+Suggests: git-daemon git-web
%description
Git is a fast, scalable, distributed revision control system with an
@@ -236,6 +238,7 @@
%patch5 -p1
%patch6 -p1
%patch7 -p1
+%patch8 -p1
%build
cat > .make <<'EOF'
++++++ git-2.5.2.tar.xz -> git-2.6.0.tar.xz ++++++
++++ 107983 lines of diff (skipped)
++++++ pager-don-t-use-unsafe-functions-in-signal-handle.patch ++++++
>From bbc10c28f64194c143775b80bcd349f46d927bbf Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai(a)suse.de>
Date: Fri, 4 Sep 2015 07:23:55 +0200
Subject: [PATCH v2] pager: don't use unsafe functions in signal handlers
Since the commit [a3da8821208d: pager: do wait_for_pager on signal
death], we call wait_for_pager() in the pager's signal handler. The
recent bug report revealed that this causes a deadlock in glibc at
aborting "git log" [*1]. When this happens, git process is left
unterminated, and it can't be killed by SIGTERM but only by SIGKILL.
The problem is that wait_for_pager() function does more than waiting
for pager process's termination, but it does cleanups and printing
errors. Unfortunately, the functions that may be used in a signal
handler are very limited [*2]. Particularly, malloc(), free() and the
variants can't be used in a signal handler because they take a mutex
internally in glibc. This was the cause of the deadlock above. Other
than the direct calls of malloc/free, many functions calling
malloc/free can't be used. strerror() is such one, either.
Also the usage of fflush() and printf() in a signal handler is bad,
although it seems working so far. In a safer side, we should avoid
them, too.
This patch tries to reduce the calls of such functions in signal
handlers. wait_for_signal() takes a flag and avoids the unsafe
calls. Also, finish_command_in_signal() is introduced for the
same reason. There the free() calls are removed, and only waits for
the children without whining at errors.
[*1] https://bugzilla.opensuse.org/show_bug.cgi?id=942297
[*2] http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#ta…
Signed-off-by: Takashi Iwai <tiwai(a)suse.de>
---
pager.c | 22 ++++++++++++++++------
run-command.c | 25 +++++++++++++++++--------
run-command.h | 1 +
3 files changed, 34 insertions(+), 14 deletions(-)
Index: git-2.6.0/pager.c
===================================================================
--- git-2.6.0.orig/pager.c 2015-09-29 01:01:32.000000000 +0200
+++ git-2.6.0/pager.c 2015-09-29 20:50:23.000000000 +0200
@@ -14,19 +14,29 @@
static const char *pager_argv[] = { NULL, NULL };
static struct child_process pager_process = CHILD_PROCESS_INIT;
-static void wait_for_pager(void)
+static void wait_for_pager(int in_signal)
{
- fflush(stdout);
- fflush(stderr);
+ if (!in_signal) {
+ fflush(stdout);
+ fflush(stderr);
+ }
/* signal EOF to pager */
close(1);
close(2);
- finish_command(&pager_process);
+ if (in_signal)
+ finish_command_in_signal(&pager_process);
+ else
+ finish_command(&pager_process);
+}
+
+static void wait_for_pager_atexit(void)
+{
+ wait_for_pager(0);
}
static void wait_for_pager_signal(int signo)
{
- wait_for_pager();
+ wait_for_pager(1);
sigchain_pop(signo);
raise(signo);
}
@@ -90,7 +100,7 @@ void setup_pager(void)
/* this makes sure that the parent terminates after the pager */
sigchain_push_common(wait_for_pager_signal);
- atexit(wait_for_pager);
+ atexit(wait_for_pager_atexit);
}
int pager_in_use(void)
Index: git-2.6.0/run-command.c
===================================================================
--- git-2.6.0.orig/run-command.c 2015-09-29 01:01:32.000000000 +0200
+++ git-2.6.0/run-command.c 2015-09-29 20:50:23.000000000 +0200
@@ -18,26 +18,27 @@ struct child_to_clean {
static struct child_to_clean *children_to_clean;
static int installed_child_cleanup_handler;
-static void cleanup_children(int sig)
+static void cleanup_children(int sig, int in_signal)
{
while (children_to_clean) {
struct child_to_clean *p = children_to_clean;
children_to_clean = p->next;
kill(p->pid, sig);
- free(p);
+ if (!in_signal)
+ free(p);
}
}
static void cleanup_children_on_signal(int sig)
{
- cleanup_children(sig);
+ cleanup_children(sig, 1);
sigchain_pop(sig);
raise(sig);
}
static void cleanup_children_on_exit(void)
{
- cleanup_children(SIGTERM);
+ cleanup_children(SIGTERM, 0);
}
static void mark_child_for_cleanup(pid_t pid)
@@ -220,7 +221,7 @@ static inline void set_cloexec(int fd)
fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
}
-static int wait_or_whine(pid_t pid, const char *argv0)
+static int wait_or_whine(pid_t pid, const char *argv0, int in_signal)
{
int status, code = -1;
pid_t waiting;
@@ -228,6 +229,8 @@ static int wait_or_whine(pid_t pid, cons
while ((waiting = waitpid(pid, &status, 0)) < 0 && errno == EINTR)
; /* nothing */
+ if (in_signal)
+ return 0;
if (waiting < 0) {
failed_errno = errno;
@@ -437,7 +440,7 @@ fail_pipe:
* At this point we know that fork() succeeded, but execvp()
* failed. Errors have been reported to our stderr.
*/
- wait_or_whine(cmd->pid, cmd->argv[0]);
+ wait_or_whine(cmd->pid, cmd->argv[0], 0);
failed_errno = errno;
cmd->pid = -1;
}
@@ -536,12 +539,18 @@ fail_pipe:
int finish_command(struct child_process *cmd)
{
- int ret = wait_or_whine(cmd->pid, cmd->argv[0]);
+ int ret = wait_or_whine(cmd->pid, cmd->argv[0], 0);
argv_array_clear(&cmd->args);
argv_array_clear(&cmd->env_array);
return ret;
}
+int finish_command_in_signal(struct child_process *cmd)
+{
+ return wait_or_whine(cmd->pid, cmd->argv[0], 1);
+}
+
+
int run_command(struct child_process *cmd)
{
int code;
@@ -772,7 +781,7 @@ error:
int finish_async(struct async *async)
{
#ifdef NO_PTHREADS
- return wait_or_whine(async->pid, "child process");
+ return wait_or_whine(async->pid, "child process", 0);
#else
void *ret = (void *)(intptr_t)(-1);
Index: git-2.6.0/run-command.h
===================================================================
--- git-2.6.0.orig/run-command.h 2015-09-29 01:01:32.000000000 +0200
+++ git-2.6.0/run-command.h 2015-09-29 20:50:23.000000000 +0200
@@ -50,6 +50,7 @@ void child_process_init(struct child_pro
int start_command(struct child_process *);
int finish_command(struct child_process *);
+int finish_command_in_signal(struct child_process *);
int run_command(struct child_process *);
/*
1
0
Hello community,
here is the log from the commit of package v4l-utils for openSUSE:Factory checked in at 2015-10-01 09:28:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/v4l-utils (Old)
and /work/SRC/openSUSE:Factory/.v4l-utils.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "v4l-utils"
Changes:
--------
--- /work/SRC/openSUSE:Factory/v4l-utils/v4l-utils.changes 2015-09-17 09:18:14.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.v4l-utils.new/v4l-utils.changes 2015-10-01 09:28:16.000000000 +0200
@@ -1,0 +2,14 @@
+Fri Sep 25 20:38:19 UTC 2015 - mpluskal(a)suse.com
+
+- Add gpg signature
+- Switch to qt5 on recent releases
+- Split language packages
+- Update to 1.8.0
+ * See ChangeLog for full list of changes
+
+-------------------------------------------------------------------
+Sun Sep 20 08:47:04 UTC 2015 - meissner(a)suse.com
+
+- Add -devel pkg to baselibs to build Wine on 64bit only distros
+
+-------------------------------------------------------------------
Old:
----
v4l-utils-1.6.3.tar.bz2
New:
----
v4l-utils-1.8.0.tar.bz2
v4l-utils-1.8.0.tar.bz2.asc
v4l-utils.keyring
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ v4l-utils.spec ++++++
--- /var/tmp/diff_new_pack.j49IUO/_old 2015-10-01 09:28:17.000000000 +0200
+++ /var/tmp/diff_new_pack.j49IUO/_new 2015-10-01 09:28:17.000000000 +0200
@@ -18,35 +18,44 @@
%define _udevdir %(pkg-config --variable udevdir udev)
%define so_ver 0
-
Name: v4l-utils
-Version: 1.6.3
+Version: 1.8.0
Release: 0
Summary: Utilities for video4linux
License: GPL-2.0+ and GPL-2.0
Group: Hardware/TV
Url: http://linuxtv.org/downloads/v4l-utils/
Source0: http://linuxtv.org/downloads/v4l-utils/%{name}-%{version}.tar.bz2
+Source1: http://linuxtv.org/downloads/v4l-utils/%{name}-%{version}.tar.bz2.asc
+Source2: %{name}.keyring
Source100: baselibs.conf
BuildRequires: alsa-devel
-%if 0%{?suse_version} < 1230
-BuildRequires: autoconf
-BuildRequires: libtool
-%endif
BuildRequires: doxygen
BuildRequires: kernel-headers
BuildRequires: libjpeg-devel
-BuildRequires: libqt4-devel
BuildRequires: pkg-config
BuildRequires: udev
BuildRequires: update-desktop-files
Requires: libv4l = %{version}
Requires: udev
BuildRoot: %{_tmppath}/%{name}-%{version}-build
+%if 0%{?suse_version} > 1310
+BuildRequires: glu-devel
+BuildRequires: libqt5-qtbase-devel
+%else
+BuildRequires: libqt4-devel
+%endif
+%if 0%{?suse_version} < 1230
+BuildRequires: autoconf
+BuildRequires: libtool
+%endif
%description
v4l-utils is a collection of various video4linux (V4L) utilities.
+%lang_package
+%lang_package -n libdvbv5-%{so_ver}
+
%package devel-tools
Summary: Utilities for v4l2 / DVB driver development and debugging
License: GPL-2.0+ and GPL-2.0
@@ -181,8 +190,11 @@
make %{?_smp_mflags}
%install
-make DESTDIR=%{buildroot} install
-find %{buildroot}%{_libdir} -name '*.la' -exec rm -f {} ';'
+make DESTDIR=%{buildroot} install --jobs=1
+find %{buildroot} -type f -name "*.la" -delete -print
+
+%find_lang "%{name}"
+%find_lang "libdvbv5" libdvbv5.lang
# Not needed (links to plugins in libv4l subdir)
rm %{buildroot}%{_libdir}/{v4l1compat.so,v4l2convert.so}
@@ -209,6 +221,12 @@
%postun -n libv4lconvert%{so_ver} -p /sbin/ldconfig
+%files -f "%{name}.lang" lang
+%defattr(-,root,root)
+
+%files -f "libdvbv5.lang" -n libdvbv5-%{so_ver}-lang
+%defattr(-,root,root)
+
%files
%defattr(-,root,root,-)
%doc COPYING ChangeLog README TODO
@@ -227,6 +245,7 @@
%{_bindir}/v4l2-ctl
%{_bindir}/v4l2-sysfs-path
%{_mandir}/man1/ir-keytable.1%{ext_man}
+%{_mandir}/man1/v4l2-ctl.1%{ext_man}
%files devel-tools
%defattr(-,root,root,-)
@@ -234,6 +253,7 @@
%{_bindir}/decode_tm6000
%{_bindir}/v4l2-compliance
%{_sbindir}/v4l2-dbg
+%{_mandir}/man1/v4l2-compliance.1%{ext_man}
%files -n dvb-utils
%defattr(-,root,root,-)
++++++ baselibs.conf ++++++
--- /var/tmp/diff_new_pack.j49IUO/_old 2015-10-01 09:28:17.000000000 +0200
+++ /var/tmp/diff_new_pack.j49IUO/_new 2015-10-01 09:28:17.000000000 +0200
@@ -4,3 +4,4 @@
libv4l2-0
libv4l2rds0
libv4lconvert0
+libv4l-devel
++++++ v4l-utils-1.6.3.tar.bz2 -> v4l-utils-1.8.0.tar.bz2 ++++++
++++ 80518 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package yast2-storage for openSUSE:Factory checked in at 2015-10-01 09:28:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-storage (Old)
and /work/SRC/openSUSE:Factory/.yast2-storage.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-storage"
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-storage/yast2-storage.changes 2015-08-29 20:03:24.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-storage.new/yast2-storage.changes 2015-10-01 09:28:11.000000000 +0200
@@ -1,0 +2,20 @@
+Fri Sep 25 11:47:15 CEST 2015 - aschnell(a)suse.com
+
+- avoid unnessasary steps if no packages need to be installed
+ (bsc#907331 and bsc#915097)
+- 3.1.69
+
+-------------------------------------------------------------------
+Wed Sep 23 15:50:03 CEST 2015 - aschnell(a)suse.com
+
+- install storage related packages before commit (bsc#907331 and
+ bsc#915097)
+- 3.1.68
+
+-------------------------------------------------------------------
+Fri Sep 11 09:28:45 UTC 2015 - igonzalezsosa(a)suse.com
+
+- Expert partitioner does not forget logical volumes (bsc#944492)
+- 3.1.67
+
+-------------------------------------------------------------------
Old:
----
yast2-storage-3.1.66.tar.bz2
New:
----
yast2-storage-3.1.69.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-storage.spec ++++++
--- /var/tmp/diff_new_pack.mxGAQg/_old 2015-10-01 09:28:12.000000000 +0200
+++ /var/tmp/diff_new_pack.mxGAQg/_new 2015-10-01 09:28:12.000000000 +0200
@@ -17,7 +17,7 @@
Name: yast2-storage
-Version: 3.1.66
+Version: 3.1.69
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
++++++ yast2-storage-3.1.66.tar.bz2 -> yast2-storage-3.1.69.tar.bz2 ++++++
++++ 4333 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package libstorage for openSUSE:Factory checked in at 2015-10-01 09:28:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libstorage (Old)
and /work/SRC/openSUSE:Factory/.libstorage.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libstorage"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libstorage/libstorage.changes 2015-09-11 09:00:49.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.libstorage.new/libstorage.changes 2015-10-01 09:28:05.000000000 +0200
@@ -1,0 +2,20 @@
+Wed Sep 23 16:13:20 CEST 2015 - aschnell(a)suse.com
+
+- changed some requires to suggests (bsc#907331 and bsc#915097)
+- 2.25.33
+
+-------------------------------------------------------------------
+Fri Sep 18 15:33:45 CEST 2015 - aschnell(a)suse.com
+
+- fixed detection for parted reporting that GPT does not use
+ complete disk (bsc#946013)
+- 2.25.32
+
+-------------------------------------------------------------------
+Wed Sep 9 11:07:32 CEST 2015 - shundhammer(a)suse.de
+
+- Make sure no volumes are left behind when writing a new disk
+ label for multipath (bsc#888513)
+- 2.25.31
+
+-------------------------------------------------------------------
Old:
----
libstorage-2.25.30.tar.bz2
New:
----
libstorage-2.25.33.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libstorage.spec ++++++
--- /var/tmp/diff_new_pack.orHSGr/_old 2015-10-01 09:28:06.000000000 +0200
+++ /var/tmp/diff_new_pack.orHSGr/_new 2015-10-01 09:28:06.000000000 +0200
@@ -17,7 +17,7 @@
Name: libstorage
-Version: 2.25.30
+Version: 2.25.33
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Source: libstorage-%{version}.tar.bz2
@@ -117,14 +117,14 @@
%package -n libstorage6
Requires: coreutils
-Requires: cryptsetup
+Suggests: cryptsetup
Requires: device-mapper
-Requires: dmraid
+Suggests: dmraid
Requires: grep
Requires: lsscsi >= 0.26
-Requires: lvm2
-Requires: mdadm >= 3.3
-Requires: multipath-tools
+Suggests: lvm2
+Suggests: mdadm >= 3.3
+Suggests: multipath-tools
Requires: parted >= 3.1
Requires: udev
Requires: util-linux >= 2.16
++++++ libstorage-2.25.30.tar.bz2 -> libstorage-2.25.33.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/VERSION new/libstorage-2.25.33/VERSION
--- old/libstorage-2.25.30/VERSION 2015-09-01 15:02:58.000000000 +0200
+++ new/libstorage-2.25.33/VERSION 2015-09-23 16:28:37.000000000 +0200
@@ -1 +1 @@
-2.25.30
+2.25.33
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/libstorage.spec.in new/libstorage-2.25.33/libstorage.spec.in
--- old/libstorage-2.25.30/libstorage.spec.in 2015-08-24 16:52:23.000000000 +0200
+++ new/libstorage-2.25.33/libstorage.spec.in 2015-09-23 16:28:37.000000000 +0200
@@ -117,14 +117,14 @@
%package -n libstorage@LIBVERSION_MAJOR@
Requires: coreutils
-Requires: cryptsetup
+Suggests: cryptsetup
Requires: device-mapper
-Requires: dmraid
+Suggests: dmraid
Requires: grep
Requires: lsscsi >= 0.26
-Requires: lvm2
-Requires: mdadm >= 3.3
-Requires: multipath-tools
+Suggests: lvm2
+Suggests: mdadm >= 3.3
+Suggests: multipath-tools
Requires: parted >= 3.1
Requires: udev
Requires: util-linux >= 2.16
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/storage/DmPartCo.cc new/libstorage-2.25.33/storage/DmPartCo.cc
--- old/libstorage-2.25.30/storage/DmPartCo.cc 2015-04-28 15:17:15.000000000 +0200
+++ new/libstorage-2.25.33/storage/DmPartCo.cc 2015-09-09 11:36:47.000000000 +0200
@@ -457,39 +457,44 @@
int DmPartCo::destroyPartitionTable( const string& new_label )
{
- y2mil("begin");
- int ret = disk->destroyPartitionTable( new_label );
- if( ret==0 )
+ int ret = 0;
+
+ // Collect dev names for all disk volumes
+
+ vector<string> dev_names;
+ ConstVolPair vol_pair( disk->volPair( Volume::notDeleted ) );
+
+ for ( ConstVolIterator it = vol_pair.begin(); it != vol_pair.end(); ++it )
{
- VIter j = vols.begin();
- while( j!=vols.end() )
- {
- if( (*j)->created() )
- {
- delete( *j );
- j = vols.erase( j );
- }
- else
- ++j;
- }
- bool save = getStorage()->getRecursiveRemoval();
- getStorage()->setRecursiveRemoval(true);
- if (isUsedBy())
- {
- getStorage()->removeUsing( device(), getUsedBy() );
- }
- ronly = false;
- RVIter i = vols.rbegin();
- while( i!=vols.rend() )
+ string dev = it->device();
+ y2mil( "Going to delete dev " << dev );
+ dev_names.push_back( dev );
+ }
+
+ // Remove disk partitions one by one from last to first
+
+ bool save = getStorage()->getRecursiveRemoval();
+ getStorage()->setRecursiveRemoval(true);
+
+ for ( int i = dev_names.size()-1; i >= 0; i-- )
+ {
+ string dev_name = dev_names[i];
+ y2mil( "Removing volume " << dev_name );
+ ret = getStorage()->removeVolume( dev_name );
+ if ( ret != 0 )
{
- if( !(*i)->deleted() )
- getStorage()->removeVolume( (*i)->device() );
- ++i;
+ y2err( "ERROR: Couldn't remove volume " << dev_name << ": " << ret );
+ // break;
}
- getStorage()->setRecursiveRemoval(save);
}
- y2mil("ret:" << ret);
- return( ret );
+
+ getStorage()->setRecursiveRemoval(save);
+
+ // Create new disk label
+ disk->destroyPartitionTable( new_label );
+
+ y2mil("ret: " << ret );
+ return ret;
}
int DmPartCo::changePartitionId( unsigned nr, unsigned id )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/storage/SystemInfo/CmdParted.cc new/libstorage-2.25.33/storage/SystemInfo/CmdParted.cc
--- old/libstorage-2.25.30/storage/SystemInfo/CmdParted.cc 2015-08-24 16:52:23.000000000 +0200
+++ new/libstorage-2.25.33/storage/SystemInfo/CmdParted.cc 2015-09-18 15:55:07.000000000 +0200
@@ -73,12 +73,12 @@
}
}
- parse( cmd.stdout() );
+ parse(cmd.stdout(), cmd.stderr());
}
void
- Parted::parse(const vector<string>& lines)
+ Parted::parse(const vector<string>& stdout, const vector<string>& stderr)
{
implicit = false;
gpt_enlarge = false;
@@ -86,8 +86,8 @@
vector<string>::const_iterator pos;
- pos = find_if(lines, string_starts_with("Partition Table:"));
- if (pos != lines.end())
+ pos = find_if(stdout, string_starts_with("Partition Table:"));
+ if (pos != stdout.end())
{
label = extractNthWord(2, *pos);
if (label == "unknown")
@@ -99,8 +99,8 @@
y2war("could not find partition table");
// only present for unrecognised disk label due to patch in parted
- pos = find_if(lines, string_starts_with("BIOS cylinder,head,sector geometry:"));
- if (pos != lines.end())
+ pos = find_if(stdout, string_starts_with("BIOS cylinder,head,sector geometry:"));
+ if (pos != stdout.end())
scanGeometryLine(*pos);
else
{
@@ -110,8 +110,8 @@
}
// see bnc #866535
- pos = find_if(lines, string_starts_with("Disk " + device + ":"));
- if (pos != lines.end())
+ pos = find_if(stdout, string_starts_with("Disk " + device + ":"));
+ if (pos != stdout.end())
{
unsigned long tmp;
extractNthWord(2, *pos) >> tmp;
@@ -125,19 +125,19 @@
y2war("could not find cylinder number");
// not present for unrecognised disk label
- pos = find_if(lines, string_starts_with("Sector size (logical/physical):"));
- if (pos != lines.end())
+ pos = find_if(stdout, string_starts_with("Sector size (logical/physical):"));
+ if (pos != stdout.end())
scanSectorSizeLine(*pos);
else
y2war("could not find sector size");
- pos = find_if(lines, string_starts_with("Disk Flags:"));
- if (pos != lines.end())
+ pos = find_if(stdout, string_starts_with("Disk Flags:"));
+ if (pos != stdout.end())
scanDiskFlags(*pos);
else
y2war("could not find disk flags");
- gpt_enlarge = find_if(lines, string_starts_with("fix the GPT to use all")) != lines.end();
+ gpt_enlarge = find_if(stderr, string_contains("fix the GPT to use all")) != stderr.end();
if (label != "loop")
{
@@ -146,7 +146,7 @@
// Parse partition tables: One with cylinder sizes, one with sector sizes
- for (vector<string>::const_iterator it = lines.begin(); it != lines.end(); ++it)
+ for (vector<string>::const_iterator it = stdout.begin(); it != stdout.end(); ++it)
{
if (boost::starts_with(*it, "Number"))
n++;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/storage/SystemInfo/CmdParted.h new/libstorage-2.25.33/storage/SystemInfo/CmdParted.h
--- old/libstorage-2.25.30/storage/SystemInfo/CmdParted.h 2015-08-24 16:52:23.000000000 +0200
+++ new/libstorage-2.25.33/storage/SystemInfo/CmdParted.h 2015-09-18 15:55:07.000000000 +0200
@@ -113,7 +113,7 @@
* Parse the output of the 'parted' command in 'lines'.
* This may throw a ParseException.
*/
- void parse(const vector<string>& lines);
+ void parse(const vector<string>& stdout, const vector<string>& stderr);
/**
* Return the stderr output of parted command.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/storage/gen_md5sum.cc new/libstorage-2.25.33/storage/gen_md5sum.cc
--- old/libstorage-2.25.30/storage/gen_md5sum.cc 2015-09-01 15:04:18.000000000 +0200
+++ new/libstorage-2.25.33/storage/gen_md5sum.cc 2015-09-09 11:36:52.000000000 +0200
@@ -1,5 +1,5 @@
-#define SOURCES_MD5SUM "73808992d2a2f6fd939c333ca93c4a74"
-#define SOURCES_MD5_DATE " Tue 1 Sep 15:04:18 CEST 2015 "
+#define SOURCES_MD5SUM "5db1ab4a20c4b339479fab62ca08fd4a"
+#define SOURCES_MD5_DATE " Wed 9 Sep 11:36:52 CEST 2015 "
namespace storage
{
const char* GetSourceMd5() { return SOURCES_MD5SUM; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/testsuite/parted.cc new/libstorage-2.25.33/testsuite/parted.cc
--- old/libstorage-2.25.30/testsuite/parted.cc 2015-06-01 12:05:45.000000000 +0200
+++ new/libstorage-2.25.33/testsuite/parted.cc 2015-09-18 15:55:07.000000000 +0200
@@ -39,7 +39,7 @@
};
Parted parted("/dev/sda", false);
- parted.parse(lines);
+ parted.parse(lines, {});
cout << parted << endl;
}
@@ -81,7 +81,44 @@
};
Parted parted("/dev/sdb", false);
- parted.parse(lines);
+ parted.parse(lines, {});
+
+ cout << parted << endl;
+}
+
+
+void
+parse_gpt_enlarge_good()
+{
+ TRACE();
+
+ vector<string> stdout = {
+ "Model: Maxtor 6 Y080L0 (scsi)",
+ "Disk /dev/sdb: 9964cyl",
+ "Sector size (logical/physical): 512B/512B",
+ "BIOS cylinder,head,sector geometry: 9964,255,63. Each cylinder is 8225kB.",
+ "Partition Table: gpt",
+ "Disk Flags: ",
+ "",
+ "Number Start End Size File system Name Flags",
+ "",
+ "Model: Maxtor 6 Y080L0 (scsi)",
+ "Disk /dev/sdb: 160086528s",
+ "Sector size (logical/physical): 512B/512B",
+ "Partition Table: gpt",
+ "Disk Flags: ",
+ "",
+ "Number Start End Size File system Name Flags",
+ ""
+ };
+
+ vector<string> stderr = {
+ "Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 78164480 blocks) or continue with the current setting? ",
+ "Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 78164480 blocks) or continue with the current setting? "
+ };
+
+ Parted parted("/dev/sdb", false);
+ parted.parse(stdout, stderr);
cout << parted << endl;
}
@@ -119,7 +156,7 @@
};
Parted parted("/dev/dasda", false);
- parted.parse(lines);
+ parted.parse(lines, {});
cout << parted << endl;
}
@@ -151,7 +188,7 @@
};
Parted parted("/dev/sdb", false);
- parted.parse(lines);
+ parted.parse(lines, {});
cout << parted << endl;
}
@@ -184,7 +221,7 @@
};
Parted parted("/dev/dasdc", false);
- parted.parse(lines);
+ parted.parse(lines, {});
cout << parted << endl;
}
@@ -207,7 +244,7 @@
};
Parted parted("/dev/sdb", false);
- parted.parse(lines);
+ parted.parse(lines, {});
cout << parted << endl;
}
@@ -268,7 +305,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -310,7 +347,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -352,7 +389,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -385,7 +422,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -427,7 +464,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -461,7 +498,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -505,7 +542,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -557,7 +594,7 @@
try
{
- parted.parse(lines);
+ parted.parse(lines, {});
EXCEPTION_EXPECTED();
}
catch ( const ParseException &ex )
@@ -578,6 +615,7 @@
parse_msdos_disk_label_good();
parse_gpt_good();
+ parse_gpt_enlarge_good();
parse_dasd_good();
parse_loop_good();
parse_dasd_implicit_good();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-2.25.30/testsuite/single.out/parted.out new/libstorage-2.25.33/testsuite/single.out/parted.out
--- old/libstorage-2.25.30/testsuite/single.out/parted.out 2015-06-01 12:05:45.000000000 +0200
+++ new/libstorage-2.25.33/testsuite/single.out/parted.out 2015-09-18 15:55:07.000000000 +0200
@@ -12,6 +12,9 @@
num:5 cylRegion:[36610,263] secRegion:[588140544,4208640] type:primary id:130
num:6 cylRegion:[36872,23929] secRegion:[592349184,384423936] type:primary id:131
+### parse_gpt_enlarge_good()
+device:/dev/sdb label:gpt geometry:[9964,255,63,512] gpt_enlarge
+
### parse_dasd_good()
device:/dev/dasda label:dasd geometry:[178079,15,12,512]
num:1 cylRegion:[1,23303] secRegion:[192,4194528] type:primary id:130
1
0
Hello community,
here is the log from the commit of package python3-setuptools for openSUSE:Factory checked in at 2015-10-01 09:27:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-setuptools (Old)
and /work/SRC/openSUSE:Factory/.python3-setuptools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-setuptools"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-setuptools/python3-setuptools.changes 2015-08-28 08:24:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python3-setuptools.new/python3-setuptools.changes 2015-10-01 09:28:00.000000000 +0200
@@ -1,0 +2,27 @@
+Wed Sep 23 05:27:45 UTC 2015 - arun(a)gmx.de
+
+- update to version 18.3.2:
+ * Correct another regression in setuptools.findall
+ where the fix for Python #12885 was lost.
+
+-------------------------------------------------------------------
+Sat Sep 19 14:47:41 UTC 2015 - arun(a)gmx.de
+
+- update to version 18.3.1:
+ * Issue #425: Correct regression in setuptools.findall.
+
+- changes from version 18.3:
+ * Setuptools now allows disabling of the manipulation of the
+ sys.path during the processing of the easy-install.pth file. To do
+ so, set the environment variable "SETUPTOOLS_SYS_PATH_TECHNIQUE"
+ to anything but "rewrite" (consider "raw"). During any install
+ operation with manipulation disabled, setuptools packages will be
+ appended to sys.path naturally.
+
+ Future versions may change the default behavior to disable
+ manipulation. If so, the default behavior can be retained by
+ setting the variable to "rewrite".
+ * Issue #257: "easy_install --version" now shows more detail about
+ the installation location and Python version.
+
+-------------------------------------------------------------------
Old:
----
setuptools-18.2.tar.gz
New:
----
setuptools-18.3.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-setuptools.spec ++++++
--- /var/tmp/diff_new_pack.kESXNC/_old 2015-10-01 09:28:01.000000000 +0200
+++ /var/tmp/diff_new_pack.kESXNC/_new 2015-10-01 09:28:01.000000000 +0200
@@ -17,7 +17,7 @@
Name: python3-setuptools
-Version: 18.2
+Version: 18.3.2
Release: 0
Url: http://pypi.python.org/pypi/setuptools
Summary: Easily download, build, install, upgrade, and uninstall Python packages
++++++ setuptools-18.2.tar.gz -> setuptools-18.3.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/CHANGES.txt new/setuptools-18.3.2/CHANGES.txt
--- old/setuptools-18.2/CHANGES.txt 2015-08-19 18:45:47.000000000 +0200
+++ new/setuptools-18.3.2/CHANGES.txt 2015-09-19 18:26:28.000000000 +0200
@@ -2,6 +2,40 @@
CHANGES
=======
+------
+18.3.2
+------
+
+* Correct another regression in setuptools.findall
+ where the fix for Python #12885 was lost.
+
+------
+18.3.1
+------
+
+* Issue #425: Correct regression in setuptools.findall.
+
+----
+18.3
+----
+
+* Setuptools now allows disabling of the manipulation of the sys.path
+ during the processing of the easy-install.pth file. To do so, set
+ the environment variable ``SETUPTOOLS_SYS_PATH_TECHNIQUE`` to
+ anything but "rewrite" (consider "raw"). During any install operation
+ with manipulation disabled, setuptools packages will be appended to
+ sys.path naturally.
+
+ Future versions may change the default behavior to disable
+ manipulation. If so, the default behavior can be retained by setting
+ the variable to "rewrite".
+
+* Issue #257: ``easy_install --version`` now shows more detail
+ about the installation location and Python version.
+
+* Refactor setuptools.findall in preparation for re-submission
+ back to distutils.
+
----
18.2
----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/PKG-INFO new/setuptools-18.3.2/PKG-INFO
--- old/setuptools-18.2/PKG-INFO 2015-08-19 18:46:16.000000000 +0200
+++ new/setuptools-18.3.2/PKG-INFO 2015-09-19 18:27:13.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: setuptools
-Version: 18.2
+Version: 18.3.2
Summary: Easily download, build, install, upgrade, and uninstall Python packages
Home-page: https://bitbucket.org/pypa/setuptools
Author: Python Packaging Authority
@@ -232,6 +232,17 @@
.. _files:
+
+ ---------------
+ Code of Conduct
+ ---------------
+
+ Everyone interacting in the setuptools project's codebases, issue trackers,
+ chat rooms, and mailing lists is expected to follow the
+ `PyPA Code of Conduct`_.
+
+ .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/
+
Keywords: CPAN PyPI distutils eggs package management
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -246,6 +257,7 @@
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Archiving :: Packaging
Classifier: Topic :: System :: Systems Administration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/README.txt new/setuptools-18.3.2/README.txt
--- old/setuptools-18.2/README.txt 2015-08-07 19:08:28.000000000 +0200
+++ new/setuptools-18.3.2/README.txt 2015-09-19 18:00:35.000000000 +0200
@@ -223,3 +223,14 @@
the Python Packaging Authority (PyPA) and the larger Python community.
.. _files:
+
+
+---------------
+Code of Conduct
+---------------
+
+Everyone interacting in the setuptools project's codebases, issue trackers,
+chat rooms, and mailing lists is expected to follow the
+`PyPA Code of Conduct`_.
+
+.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/docs/index.txt new/setuptools-18.3.2/docs/index.txt
--- old/setuptools-18.2/docs/index.txt 2015-08-07 19:08:28.000000000 +0200
+++ new/setuptools-18.3.2/docs/index.txt 2015-09-19 18:00:35.000000000 +0200
@@ -23,4 +23,3 @@
easy_install
pkg_resources
development
- merge
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/docs/merge-faq.txt new/setuptools-18.3.2/docs/merge-faq.txt
--- old/setuptools-18.2/docs/merge-faq.txt 2015-06-18 14:36:06.000000000 +0200
+++ new/setuptools-18.3.2/docs/merge-faq.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1,80 +0,0 @@
-Setuptools/Distribute Merge FAQ
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-How do I upgrade from Distribute?
-=================================
-
-Distribute specifically prohibits installation of Setuptools 0.7 from Distribute 0.6. There are then two options for upgrading.
-
-Note that after upgrading using either technique, the only option to downgrade to either version is to completely uninstall Distribute and Setuptools 0.7 versions before reinstalling an 0.6 release.
-
-Use Distribute 0.7
-------------------
-
-The PYPA has put together a compatibility wrapper, a new release of Distribute version 0.7. This package will install over Distribute 0.6.x installations and will replace Distribute with a simple wrapper that requires Setuptools 0.7 or later. This technique is experimental, but initial results indicate this technique is the easiest upgrade path.
-
-
-Uninstall
----------
-
-First, completely uninstall Distribute. Since Distribute does not have an automated installation routine, this process is manual. Follow the instructions in the README for uninstalling.
-
-
-How do I upgrade from Setuptools 0.6?
-=====================================
-
-There are no special instructions for upgrading over older versions of Setuptools. Simply use `easy_install -U` or run the latest `ez_setup.py`.
-
-Where does the merge occur?
-========================================================
-
-The merge is occurring between the heads of the default branch of Distribute and the setuptools-0.6 branch of Setuptools. The Setuptools SVN repo has been converted to a Mercurial repo hosted on Bitbucket. The work is still underway, so the exact changesets included may change, although the anticipated merge targets are Setuptools at 0.6c12 and Distribute at 0.6.35.
-
-What happens to other branches?
-========================================================
-
-Distribute 0.7 was abandoned long ago and won't be included in the resulting code tree, but may be retained for posterity in the original repo.
-
-Setuptools default branch (also 0.7 development) may also be abandoned or may be incorporated into the new merged line if desirable (and as resources allow).
-
-What history is lost/changed?
-========================================================
-
-As setuptools was not on Mercurial when the fork occurred and as Distribute did not include the full setuptools history (prior to the creation of the setuptools-0.6 branch), the two source trees were not compatible. In order to most effectively communicate the code history, the Distribute code was grafted onto the (originally private) setuptools Mercurial repo. Although this grafting maintained the full code history with names, dates, and changes, it did lose the original hashes of those changes. Therefore, references to changes by hash (including tags) are lost.
-
-Additionally, any heads that were not actively merged into the Distribute 0.6.35 release were also omitted. As a result, the changesets included in the merge repo are those from the original setuptools repo and all changesets ancestral to the Distribute 0.6.35 release.
-
-What features will be in the merged code base?
-========================================================
-
-In general, all "features" added in distribute will be included in setuptools. Where there exist conflicts or undesirable features, we will be explicit about what these limitations are. Changes that are backward-incompatible from setuptools 0.6 to distribute will likely be removed, and these also will be well documented.
-
-Bootstrapping scripts (ez_setup/distribute_setup) and docs, as with distribute, will be maintained in the repository and built as part of the release process. Documentation and bootstrapping scripts will be hosted at python.org, as they are with distribute now. Documentation at telecommunity will be updated to refer or redirect to the new, merged docs.
-
-On the whole, the merged setuptools should be largely compatible with the latest releases of both setuptools and distribute and will be an easy transition for users of either library.
-
-Who is invited to contribute? Who is excluded?
-========================================================
-
-While we've worked privately to initiate this merge due to the potential sensitivity of the topic, no one is excluded from this effort. We invite all members of the community, especially those most familiar with Python packaging and its challenges to join us in the effort.
-
-We have lots of ideas for how we'd like to improve the codebase, release process, everything. Like distribute, the post-merge setuptools will have its source hosted on Bitbucket. (So if you're currently a distribute contributor, about the only thing that's going to change is the URL of the repository you follow.) Also like distribute, it'll support Python 3, and hopefully we'll soon merge Vinay Sajip's patches to make it run on Python 3 without needing 2to3 to be run on the code first.
-
-While we've worked privately to initiate this merge due to the potential sensitivity of the topic, no one is excluded from this effort. We invite all members of the community, especially those most familiar with Python packaging and its challenges to join us in the effort.
-
-Why Setuptools and not Distribute or another name?
-========================================================
-
-We do, however, understand that this announcement might be unsettling for some. The setuptools name has been subjected to a lot of deprecation in recent years, so the idea that it will now be the preferred name instead of distribute might be somewhat difficult or disorienting for some. We considered use of another name (Distribute or an entirely new name), but that would serve to only complicate matters further. Instead, our goal is to simplify the packaging landscape but without losing any hard-won advancements. We hope that the people who worked to spread the first message will be equally enthusiastic about spreading the new one, and we especially look forward to seeing the new posters and slogans celebrating setuptools.
-
-What is the timeframe of release?
-========================================================
-
-There are no hard timeframes for any of this effort, although progress is underway and a draft merge is underway and being tested privately. As an unfunded volunteer effort, our time to put in on it is limited, and we've both had some recent health and other challenges that have made working on this difficult, which in part explains why we haven't met our original deadline of a completed merge before PyCon.
-
-The final Setuptools 0.7 was cut on June 1, 2013 and will be released to PyPI shortly thereafter.
-
-What version number can I expect for the new release?
-========================================================
-
-The new release will roughly follow the previous trend for setuptools and release the new release as 0.7. This number is somewhat arbitrary, but we wanted something other than 0.6 to distinguish it from its ancestor forks but not 1.0 to avoid putting too much emphasis on the release itself and to focus on merging the functionality. In the future, the project will likely adopt a versioning scheme similar to semver to convey semantic meaning about the release in the version number.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/docs/merge.txt new/setuptools-18.3.2/docs/merge.txt
--- old/setuptools-18.2/docs/merge.txt 2015-06-18 14:36:06.000000000 +0200
+++ new/setuptools-18.3.2/docs/merge.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1,122 +0,0 @@
-Merge with Distribute
-~~~~~~~~~~~~~~~~~~~~~
-
-In 2013, the fork of Distribute was merged back into Setuptools. This
-document describes some of the details of the merge.
-
-.. toctree::
- :maxdepth: 2
-
- merge-faq
-
-Process
-=======
-
-In order to try to accurately reflect the fork and then re-merge of the
-projects, the merge process brought both code trees together into one
-repository and grafted the Distribute fork onto the Setuptools development
-line (as if it had been created as a branch in the first place).
-
-The rebase to get distribute onto setuptools went something like this::
-
- hg phase -d -f -r 26b4c29b62db
- hg rebase -s 26b4c29b62db -d 7a5cf59c78d7
-
-The technique required a late version of mercurial (2.5) to work correctly.
-
-The only code that was included was the code that was ancestral to the public
-releases of Distribute 0.6. Additionally, because Setuptools was not hosted
-on Mercurial at the time of the fork and because the Distribute fork did not
-include a complete conversion of the Setuptools history, the Distribute
-changesets had to be re-applied to a new, different conversion of the
-Setuptools SVN repository. As a result, all of the hashes have changed.
-
-Distribute was grafted in a 'distribute' branch and the 'setuptools-0.6'
-branch was targeted for the merge. The 'setuptools' branch remains with
-unreleased code and may be incorporated in the future.
-
-Reconciling Differences
-=======================
-
-There were both technical and philosophical differences between Setuptools
-and Distribute. To reconcile these differences in a manageable way, the
-following technique was undertaken:
-
-Create a 'Setuptools-Distribute merge' branch, based on a late release of
-Distribute (0.6.35). This was done with a00b441856c4.
-
-In that branch, first remove code that is no longer relevant to
-Setuptools (such as the setuptools patching code).
-
-Next, in the the merge branch, create another base from at the point where the
-fork occurred (such that the code is still essentially an older but pristine
-setuptools). This base can be found as 955792b069d0. This creates two heads
-in the merge branch, each with a basis in the fork.
-
-Then, repeatedly copy changes for a
-single file or small group of files from a late revision of that file in the
-'setuptools-0.6' branch (1aae1efe5733 was used) and commit those changes on
-the setuptools-only head. That head is then merged with the head with
-Distribute changes. It is in this Mercurial
-merge operation that the fundamental differences between Distribute and
-Setuptools are reconciled, but since only a single file or small set of files
-are used, the scope is limited.
-
-Finally, once all the challenging files have been reconciled and merged, the
-remaining changes from the setuptools-0.6 branch are merged, deferring to the
-reconciled changes (a1fa855a5a62 and 160ccaa46be0).
-
-Originally, jaraco attempted all of this using anonymous heads in the
-Distribute branch, but later realized this technique made for a somewhat
-unclear merge process, so the changes were re-committed as described above
-for clarity. In this way, the "distribute" and "setuptools" branches can
-continue to track the official Distribute changesets.
-
-Concessions
-===========
-
-With the merge of Setuptools and Distribute, the following concessions were
-made:
-
-Differences from setuptools 0.6c12:
-
-Major Changes
--------------
-
-* Python 3 support.
-* Improved support for GAE.
-* Support `PEP-370 <http://www.python.org/dev/peps/pep-0370/>`_ per-user site
- packages.
-* Sort order of Distributions in pkg_resources now prefers PyPI to external
- links (Distribute issue 163).
-* Python 2.4 or greater is required (drop support for Python 2.3).
-
-Minor Changes
--------------
-
-* Wording of some output has changed to replace contractions with their
- canonical form (i.e. prefer "could not" to "couldn't").
-* Manifest files are only written for 32-bit .exe launchers.
-
-Differences from Distribute 0.6.36:
-
-Major Changes
--------------
-
-* The _distribute property of the setuptools module has been removed.
-* Distributions are once again installed as zipped eggs by default, per the
- rationale given in `the seminal bug report
- <http://bugs.python.org/setuptools/issue33>`_ indicates that the feature
- should remain and no substantial justification was given in the `Distribute
- report <https://bitbucket.org/tarek/distribute/issue/19/>`_.
-
-Minor Changes
--------------
-
-* The patch for `#174 <https://bitbucket.org/tarek/distribute/issue/174>`_
- has been rolled-back, as the comment on the ticket indicates that the patch
- addressed a symptom and not the fundamental issue.
-* ``easy_install`` (the command) once again honors setup.cfg if found in the
- current directory. The "mis-behavior" characterized in `#99
- <https://bitbucket.org/tarek/distribute/issue/99>`_ is actually intended
- behavior, and no substantial rationale was given for the deviation.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/docs/python3.txt new/setuptools-18.3.2/docs/python3.txt
--- old/setuptools-18.2/docs/python3.txt 2015-06-18 14:36:06.000000000 +0200
+++ new/setuptools-18.3.2/docs/python3.txt 2015-09-19 18:00:35.000000000 +0200
@@ -5,16 +5,22 @@
Starting with Distribute version 0.6.2 and Setuptools 0.7, the Setuptools
project supported Python 3. Installing and
using setuptools for Python 3 code works exactly the same as for Python 2
-code, but Setuptools also helps you to support Python 2 and Python 3 from
-the same source code by letting you run 2to3 on the code as a part of the
-build process, by setting the keyword parameter ``use_2to3`` to True.
+code.
-
-Setuptools as help during porting
-=================================
-
-Setuptools can make the porting process much easier by automatically running
-2to3 as a part of the test running. To do this you need to configure the
+Setuptools provides a facility to invoke 2to3 on the code as a part of the
+build process, by setting the keyword parameter ``use_2to3`` to True, but
+the Setuptools strongly recommends instead developing a unified codebase
+using `six <https://pypi.python.org/pypi/six>`_,
+`future <https://pypi.python.org/pypi/future>`_, or another compatibility
+library.
+
+
+Using 2to3
+==========
+
+Setuptools attempts to make the porting process easier by automatically
+running
+2to3 as a part of running tests. To do so, you need to configure the
setup.py so that you can run the unit tests with ``python setup.py test``.
See :ref:`test` for more information on this.
@@ -37,23 +43,23 @@
parameter ``use_2to3_exclude_fixers`` can be set to fixer names to be
skipped.
-A typical setup.py can look something like this::
+An example setup.py might look something like this::
from setuptools import setup
setup(
name='your.module',
- version = '1.0',
+ version='1.0',
description='This is your awesome module',
author='You',
author_email='your@email',
- package_dir = {'': 'src'},
- packages = ['your', 'you.module'],
- test_suite = 'your.module.tests',
- use_2to3 = True,
- convert_2to3_doctests = ['src/your/module/README.txt'],
- use_2to3_fixers = ['your.fixers'],
- use_2to3_exclude_fixers = ['lib2to3.fixes.fix_import'],
+ package_dir={'': 'src'},
+ packages=['your', 'you.module'],
+ test_suite='your.module.tests',
+ use_2to3=True,
+ convert_2to3_doctests=['src/your/module/README.txt'],
+ use_2to3_fixers=['your.fixers'],
+ use_2to3_exclude_fixers=['lib2to3.fixes.fix_import'],
)
Differential conversion
@@ -86,39 +92,3 @@
If you don't want to run the 2to3 conversion on the doctests in Python files,
you can turn that off by setting ``setuptools.use_2to3_on_doctests = False``.
-
-Note on compatibility with older versions of setuptools
-=======================================================
-
-Setuptools earlier than 0.7 does not know about the new keyword parameters to
-support Python 3.
-As a result it will warn about the unknown keyword parameters if you use
-those versions of setuptools instead of Distribute under Python 2. This output
-is not an error, and
-install process will continue as normal, but if you want to get rid of that
-error this is easy. Simply conditionally add the new parameters into an extra
-dict and pass that dict into setup()::
-
- from setuptools import setup
- import sys
-
- extra = {}
- if sys.version_info >= (3,):
- extra['use_2to3'] = True
- extra['convert_2to3_doctests'] = ['src/your/module/README.txt']
- extra['use_2to3_fixers'] = ['your.fixers']
-
- setup(
- name='your.module',
- version = '1.0',
- description='This is your awesome module',
- author='You',
- author_email='your@email',
- package_dir = {'': 'src'},
- packages = ['your', 'you.module'],
- test_suite = 'your.module.tests',
- **extra
- )
-
-This way the parameters will only be used under Python 3, where Distribute or
-Setuptools 0.7 or later is required.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/docs/setuptools.txt new/setuptools-18.3.2/docs/setuptools.txt
--- old/setuptools-18.2/docs/setuptools.txt 2015-08-07 19:08:28.000000000 +0200
+++ new/setuptools-18.3.2/docs/setuptools.txt 2015-09-19 18:00:35.000000000 +0200
@@ -2595,8 +2595,8 @@
Adding Support for Other Revision Control Systems
-------------------------------------------------
-If you would like to create a plugin for ``setuptools`` to find files in other
-source control systems besides CVS and Subversion, you can do so by adding an
+If you would like to create a plugin for ``setuptools`` to find files in
+source control systems, you can do so by adding an
entry point to the ``setuptools.file_finders`` group. The entry point should
be a function accepting a single directory name, and should yield
all the filenames within that directory (and any subdirectories thereof) that
@@ -2652,9 +2652,7 @@
-----------------------
Sorry, this section isn't written yet, and neither is a lot of what's below
-this point, except for the change log. You might want to `subscribe to changes
-in this page <setuptools?action=subscribe>`_ to see when new documentation is
-added or updated.
+this point.
XXX
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/ez_setup.py new/setuptools-18.3.2/ez_setup.py
--- old/setuptools-18.2/ez_setup.py 2015-08-07 20:01:18.000000000 +0200
+++ new/setuptools-18.3.2/ez_setup.py 2015-09-19 18:27:06.000000000 +0200
@@ -30,7 +30,7 @@
except ImportError:
USER_SITE = None
-DEFAULT_VERSION = "18.2"
+DEFAULT_VERSION = "18.3.2"
DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/"
DEFAULT_SAVE_DIR = os.curdir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setup.py new/setuptools-18.3.2/setup.py
--- old/setuptools-18.2/setup.py 2015-08-07 19:08:28.000000000 +0200
+++ new/setuptools-18.3.2/setup.py 2015-09-19 18:00:35.000000000 +0200
@@ -144,6 +144,7 @@
Programming Language :: Python :: 3.2
Programming Language :: Python :: 3.3
Programming Language :: Python :: 3.4
+ Programming Language :: Python :: 3.5
Topic :: Software Development :: Libraries :: Python Modules
Topic :: System :: Archiving :: Packaging
Topic :: System :: Systems Administration
@@ -151,10 +152,10 @@
""").strip().splitlines(),
extras_require={
"ssl:sys_platform=='win32'": "wincertstore==0.2",
- "certs": "certifi==1.0.1",
+ "certs": "certifi==2015.04.28",
},
dependency_links=[
- 'https://pypi.python.org/packages/source/c/certifi/certifi-1.0.1.tar.gz#md5=…',
+ 'https://pypi.python.org/packages/source/c/certifi/certifi-2015.04.28.tar.gz…',
'https://pypi.python.org/packages/source/w/wincertstore/wincertstore-0.2.zip…',
],
scripts=[],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools/__init__.py new/setuptools-18.3.2/setuptools/__init__.py
--- old/setuptools-18.2/setuptools/__init__.py 2015-08-07 20:05:29.000000000 +0200
+++ new/setuptools-18.3.2/setuptools/__init__.py 2015-09-19 18:05:38.000000000 +0200
@@ -1,6 +1,7 @@
"""Extensions to the 'distutils' for large or complex distributions"""
import os
+import functools
import distutils.core
import distutils.filelist
from distutils.core import Command as _Command
@@ -123,30 +124,45 @@
command_consumes_arguments = False
def __init__(self, dist, **kw):
- # Add support for keyword arguments
- _Command.__init__(self,dist)
- for k,v in kw.items():
- setattr(self,k,v)
+ """
+ Construct the command for dist, updating
+ vars(self) with any keyword parameters.
+ """
+ _Command.__init__(self, dist)
+ vars(self).update(kw)
def reinitialize_command(self, command, reinit_subcommands=0, **kw):
cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
- for k,v in kw.items():
- setattr(cmd,k,v) # update command with keywords
+ vars(cmd).update(kw)
return cmd
-distutils.core.Command = Command # we can't patch distutils.cmd, alas
+# we can't patch distutils.cmd, alas
+distutils.core.Command = Command
+
-def findall(dir = os.curdir):
- """Find all files under 'dir' and return the list of full filenames
- (relative to 'dir').
+def _find_all_simple(path):
"""
- all_files = []
- for base, dirs, files in os.walk(dir, followlinks=True):
- if base==os.curdir or base.startswith(os.curdir+os.sep):
- base = base[2:]
- if base:
- files = [os.path.join(base, f) for f in files]
- all_files.extend(filter(os.path.isfile, files))
- return all_files
+ Find all files under 'path'
+ """
+ results = (
+ os.path.join(base, file)
+ for base, dirs, files in os.walk(path, followlinks=True)
+ for file in files
+ )
+ return filter(os.path.isfile, results)
+
+
+def findall(dir=os.curdir):
+ """
+ Find all files under 'dir' and return the list of full filenames.
+ Unless dir is '.', return full filenames with dir prepended.
+ """
+ files = _find_all_simple(dir)
+ if dir == os.curdir:
+ make_rel = functools.partial(os.path.relpath, start=dir)
+ files = map(make_rel, files)
+ return list(files)
+
-distutils.filelist.findall = findall # fix findall bug in distutils.
+# fix findall bug in distutils (http://bugs.python.org/issue12885)
+distutils.filelist.findall = findall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools/command/easy_install.py new/setuptools-18.3.2/setuptools/command/easy_install.py
--- old/setuptools-18.2/setuptools/command/easy_install.py 2015-08-07 19:08:28.000000000 +0200
+++ new/setuptools-18.3.2/setuptools/command/easy_install.py 2015-09-19 18:00:35.000000000 +0200
@@ -215,10 +215,19 @@
remover = rmtree if is_tree else os.unlink
remover(path)
+ @staticmethod
+ def _render_version():
+ """
+ Render the Setuptools version and installation details, then exit.
+ """
+ ver = sys.version[:3]
+ dist = get_distribution('setuptools')
+ tmpl = 'setuptools {dist.version} from {dist.location} (Python {ver})'
+ print(tmpl.format(**locals()))
+ raise SystemExit()
+
def finalize_options(self):
- if self.version:
- print('setuptools %s' % get_distribution('setuptools').version)
- sys.exit()
+ self.version and self._render_version()
py_version = sys.version.split()[0]
prefix, exec_prefix = get_config_vars('prefix', 'exec_prefix')
@@ -1530,23 +1539,16 @@
if not self.dirty:
return
- data = '\n'.join(map(self.make_relative, self.paths))
- if data:
+ rel_paths = list(map(self.make_relative, self.paths))
+ if rel_paths:
log.debug("Saving %s", self.filename)
- data = (
- "import sys; sys.__plen = len(sys.path)\n"
- "%s\n"
- "import sys; new=sys.path[sys.__plen:];"
- " del sys.path[sys.__plen:];"
- " p=getattr(sys,'__egginsert',0); sys.path[p:p]=new;"
- " sys.__egginsert = p+len(new)\n"
- ) % data
+ lines = self._wrap_lines(rel_paths)
+ data = '\n'.join(lines) + '\n'
if os.path.islink(self.filename):
os.unlink(self.filename)
- f = open(self.filename, 'wt')
- f.write(data)
- f.close()
+ with open(self.filename, 'wt') as f:
+ f.write(data)
elif os.path.exists(self.filename):
log.debug("Deleting empty %s", self.filename)
@@ -1554,6 +1556,10 @@
self.dirty = False
+ @staticmethod
+ def _wrap_lines(lines):
+ return lines
+
def add(self, dist):
"""Add `dist` to the distribution map"""
new_path = (
@@ -1591,6 +1597,34 @@
return path
+class RewritePthDistributions(PthDistributions):
+
+ @classmethod
+ def _wrap_lines(cls, lines):
+ yield cls.prelude
+ for line in lines:
+ yield line
+ yield cls.postlude
+
+ _inline = lambda text: textwrap.dedent(text).strip().replace('\n', '; ')
+ prelude = _inline("""
+ import sys
+ sys.__plen = len(sys.path)
+ """)
+ postlude = _inline("""
+ import sys
+ new = sys.path[sys.__plen:]
+ del sys.path[sys.__plen:]
+ p = getattr(sys, '__egginsert', 0)
+ sys.path[p:p] = new
+ sys.__egginsert = p + len(new)
+ """)
+
+
+if os.environ.get('SETUPTOOLS_SYS_PATH_TECHNIQUE', 'rewrite') == 'rewrite':
+ PthDistributions = RewritePthDistributions
+
+
def _first_line_re():
"""
Return a regular expression based on first_line_re suitable for matching
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools/tests/test_setuptools.py new/setuptools-18.3.2/setuptools/tests/test_setuptools.py
--- old/setuptools-18.2/setuptools/tests/test_setuptools.py 1970-01-01 01:00:00.000000000 +0100
+++ new/setuptools-18.3.2/setuptools/tests/test_setuptools.py 2015-09-19 18:00:38.000000000 +0200
@@ -0,0 +1,48 @@
+import os
+
+import pytest
+
+import setuptools
+
+
+(a)pytest.fixture
+def example_source(tmpdir):
+ tmpdir.mkdir('foo')
+ (tmpdir / 'foo/bar.py').write('')
+ (tmpdir / 'readme.txt').write('')
+ return tmpdir
+
+
+def test_findall(example_source):
+ found = list(setuptools.findall(str(example_source)))
+ expected = ['readme.txt', 'foo/bar.py']
+ expected = [example_source.join(fn) for fn in expected]
+ assert found == expected
+
+
+def test_findall_curdir(example_source):
+ with example_source.as_cwd():
+ found = list(setuptools.findall())
+ expected = ['readme.txt', 'foo/bar.py']
+ assert found == expected
+
+
+(a)pytest.fixture
+def can_symlink(tmpdir):
+ """
+ Skip if cannot create a symbolic link
+ """
+ link_fn = 'link'
+ target_fn = 'target'
+ try:
+ os.symlink(target_fn, link_fn)
+ except (OSError, NotImplementedError, AttributeError):
+ pytest.skip("Cannot create symbolic links")
+ os.remove(link_fn)
+
+
+def test_findall_missing_symlink(tmpdir, can_symlink):
+ with tmpdir.as_cwd():
+ os.symlink('foo', 'bar')
+ found = list(setuptools.findall())
+ assert found == []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools/version.py new/setuptools-18.3.2/setuptools/version.py
--- old/setuptools-18.2/setuptools/version.py 2015-08-07 20:01:18.000000000 +0200
+++ new/setuptools-18.3.2/setuptools/version.py 2015-09-19 18:27:06.000000000 +0200
@@ -1 +1 @@
-__version__ = '18.2'
+__version__ = '18.3.2'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools.egg-info/PKG-INFO new/setuptools-18.3.2/setuptools.egg-info/PKG-INFO
--- old/setuptools-18.2/setuptools.egg-info/PKG-INFO 2015-08-19 18:46:15.000000000 +0200
+++ new/setuptools-18.3.2/setuptools.egg-info/PKG-INFO 2015-09-19 18:27:11.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: setuptools
-Version: 18.2
+Version: 18.3.2
Summary: Easily download, build, install, upgrade, and uninstall Python packages
Home-page: https://bitbucket.org/pypa/setuptools
Author: Python Packaging Authority
@@ -232,6 +232,17 @@
.. _files:
+
+ ---------------
+ Code of Conduct
+ ---------------
+
+ Everyone interacting in the setuptools project's codebases, issue trackers,
+ chat rooms, and mailing lists is expected to follow the
+ `PyPA Code of Conduct`_.
+
+ .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/
+
Keywords: CPAN PyPI distutils eggs package management
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -246,6 +257,7 @@
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Archiving :: Packaging
Classifier: Topic :: System :: Systems Administration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools.egg-info/SOURCES.txt new/setuptools-18.3.2/setuptools.egg-info/SOURCES.txt
--- old/setuptools-18.2/setuptools.egg-info/SOURCES.txt 2015-08-19 18:46:16.000000000 +0200
+++ new/setuptools-18.3.2/setuptools.egg-info/SOURCES.txt 2015-09-19 18:27:13.000000000 +0200
@@ -22,8 +22,6 @@
docs/formats.txt
docs/history.txt
docs/index.txt
-docs/merge-faq.txt
-docs/merge.txt
docs/pkg_resources.txt
docs/python3.txt
docs/releases.txt
@@ -125,6 +123,7 @@
setuptools/tests/test_packageindex.py
setuptools/tests/test_sandbox.py
setuptools/tests/test_sdist.py
+setuptools/tests/test_setuptools.py
setuptools/tests/test_test.py
setuptools/tests/test_upload_docs.py
setuptools/tests/test_windows_wrappers.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools.egg-info/dependency_links.txt new/setuptools-18.3.2/setuptools.egg-info/dependency_links.txt
--- old/setuptools-18.2/setuptools.egg-info/dependency_links.txt 2015-08-19 18:46:15.000000000 +0200
+++ new/setuptools-18.3.2/setuptools.egg-info/dependency_links.txt 2015-09-19 18:27:11.000000000 +0200
@@ -1,2 +1,2 @@
-https://pypi.python.org/packages/source/c/certifi/certifi-1.0.1.tar.gz#md5=45f5cb94b8af9e1df0f9450a8f61b790
+https://pypi.python.org/packages/source/c/certifi/certifi-2015.04.28.tar.gz#md5=12c7c3a063b2ff97a0f8291d8de41e8c
https://pypi.python.org/packages/source/w/wincertstore/wincertstore-0.2.zip…
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-18.2/setuptools.egg-info/requires.txt new/setuptools-18.3.2/setuptools.egg-info/requires.txt
--- old/setuptools-18.2/setuptools.egg-info/requires.txt 2015-08-19 18:46:15.000000000 +0200
+++ new/setuptools-18.3.2/setuptools.egg-info/requires.txt 2015-09-19 18:27:11.000000000 +0200
@@ -1,6 +1,6 @@
[certs]
-certifi==1.0.1
+certifi==2015.04.28
[ssl:sys_platform=='win32']
wincertstore==0.2
1
0
Hello community,
here is the log from the commit of package links for openSUSE:Factory checked in at 2015-10-01 09:27:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/links (Old)
and /work/SRC/openSUSE:Factory/.links.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "links"
Changes:
--------
--- /work/SRC/openSUSE:Factory/links/links.changes 2015-07-27 09:08:17.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.links.new/links.changes 2015-10-01 09:27:54.000000000 +0200
@@ -1,0 +2,12 @@
+Mon Sep 21 12:50:36 UTC 2015 - tchvatal(a)suse.com
+
+- Version bump to 2.12:
+ * Verify ssl certificates bnc#946065
+ * Warn if server uses SSL2 or SSL3 protocol
+ * Support SSL client certificates
+- Remove obsolete patch:
+ * links-no-date-time.patch
+- Rebase patch:
+ * links-nosslcomp.patch
+
+-------------------------------------------------------------------
Old:
----
links-2.10.tar.bz2
links-no-date-time.patch
New:
----
links-2.12.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ links.spec ++++++
--- /var/tmp/diff_new_pack.MxYSk8/_old 2015-10-01 09:27:55.000000000 +0200
+++ /var/tmp/diff_new_pack.MxYSk8/_new 2015-10-01 09:27:55.000000000 +0200
@@ -17,7 +17,7 @@
Name: links
-Version: 2.10
+Version: 2.12
Release: 0
Summary: Text-Based WWW Browser
License: GPL-2.0+
@@ -26,7 +26,6 @@
Source: http://links.twibright.com/download/%{name}-%{version}.tar.bz2
Patch2: configure.diff
Patch3: links-nosslcomp.patch
-Patch5: links-no-date-time.patch
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: gpm-devel
@@ -56,7 +55,6 @@
%setup -q -n links-%{version}
%patch2 -p1
%patch3 -p1
-%patch5 -p1
%build
autoreconf -ifv
++++++ links-2.10.tar.bz2 -> links-2.12.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/links/links-2.10.tar.bz2 /work/SRC/openSUSE:Factory/.links.new/links-2.12.tar.bz2 differ: char 11, line 1
++++++ links-nosslcomp.patch ++++++
--- /var/tmp/diff_new_pack.MxYSk8/_old 2015-10-01 09:27:55.000000000 +0200
+++ /var/tmp/diff_new_pack.MxYSk8/_new 2015-10-01 09:27:55.000000000 +0200
@@ -3,56 +3,28 @@
https.c | 18 +++++++++++++++++-
2 files changed, 17 insertions(+), 7 deletions(-)
-Index: links-2.10/connect.c
+Index: links-2.12/https.c
===================================================================
---- links-2.10.orig/connect.c 2015-07-21 22:16:55.000000000 +0200
-+++ links-2.10/connect.c 2015-07-21 22:17:34.000000000 +0200
-@@ -323,9 +323,6 @@ static void ssl_want_io(struct connectio
-
- set_connection_timeout(c);
-
--#ifndef HAVE_NSS
-- if (c->no_tls) c->ssl->options |= SSL_OP_NO_TLSv1;
--#endif
- switch ((ret2 = SSL_get_error(c->ssl, ret1 = SSL_connect(c->ssl)))) {
- case SSL_ERROR_NONE:
- connected_callback(c);
-@@ -586,9 +583,6 @@ static void connected(struct connection
- goto ssl_error;
- }
- SSL_set_fd(c->ssl, *b->sock);
--#ifndef HAVE_NSS
-- if (c->no_tls) c->ssl->options |= SSL_OP_NO_TLSv1;
--#endif
- #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- {
- unsigned char *u = remove_proxy_prefix(c->url);
-Index: links-2.10/https.c
-===================================================================
---- links-2.10.orig/https.c 2015-07-21 22:15:29.000000000 +0200
-+++ links-2.10/https.c 2015-07-21 22:16:55.000000000 +0200
-@@ -55,7 +55,23 @@ SSL *getSSL(void)
+--- links-2.12.orig/https.c
++++ links-2.12/https.c
+@@ -100,7 +100,19 @@ SSL *getSSL(void)
if (!m) return NULL;
context = SSL_CTX_new((void *)m);
if (!context) return NULL;
- SSL_CTX_set_options(context, SSL_OP_ALL);
+ SSL_CTX_set_options(context, SSL_OP_ALL | SSL_OP_NO_SSLv2);
-+
+#ifdef SSL_OP_NO_COMPRESSION
-+ SSL_CTX_set_options(context, SSL_OP_NO_COMPRESSION);
++ SSL_CTX_set_options(context, SSL_OP_NO_COMPRESSION);
+#endif
-+
+#ifdef SSL_OP_NO_TICKET
-+ SSL_CTX_set_options(context, SSL_OP_NO_TICKET);
++ SSL_CTX_set_options(context, SSL_OP_NO_TICKET);
+#endif
+#ifdef SSL_MODE_RELEASE_BUFFERS
-+ SSL_CTX_set_mode(context, SSL_MODE_RELEASE_BUFFERS);
++ SSL_CTX_set_mode(context, SSL_MODE_RELEASE_BUFFERS);
+#endif
-+
+#ifdef SSL_MODE_AUTO_RETRY
-+ SSL_CTX_set_mode(context, SSL_MODE_AUTO_RETRY);
++ SSL_CTX_set_mode(context, SSL_MODE_AUTO_RETRY);
+#endif
-+
- SSL_CTX_set_default_verify_paths(context);
-
- }
+ if (ssl_set_private_paths())
+ SSL_CTX_set_default_verify_paths(context);
+ SSL_CTX_set_default_passwd_cb(context, ssl_password_callback);
1
0
Hello community,
here is the log from the commit of package libchamplain for openSUSE:Factory checked in at 2015-10-01 09:27:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libchamplain (Old)
and /work/SRC/openSUSE:Factory/.libchamplain.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libchamplain"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libchamplain/libchamplain.changes 2015-03-19 21:04:31.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libchamplain.new/libchamplain.changes 2015-10-01 09:27:47.000000000 +0200
@@ -1,0 +2,9 @@
+Fri Sep 18 17:40:03 UTC 2015 - zaitor(a)opensuse.org
+
+- Update to version 0.12.11:
+ + Improved touch-screen support, pinch-to-zoom.
+ + Add champlain_view_set_world() to limit the world to the
+ specified bounding box.
+ + Various minor fixes.
+
+-------------------------------------------------------------------
Old:
----
libchamplain-0.12.10.tar.xz
New:
----
libchamplain-0.12.11.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libchamplain.spec ++++++
--- /var/tmp/diff_new_pack.bN51Co/_old 2015-10-01 09:27:48.000000000 +0200
+++ /var/tmp/diff_new_pack.bN51Co/_new 2015-10-01 09:27:48.000000000 +0200
@@ -17,7 +17,7 @@
Name: libchamplain
-Version: 0.12.10
+Version: 0.12.11
Release: 0
Summary: Library to display maps
License: LGPL-2.1+
++++++ libchamplain-0.12.10.tar.xz -> libchamplain-0.12.11.tar.xz ++++++
++++ 1824 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package libdrm for openSUSE:Factory checked in at 2015-10-01 09:27:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libdrm (Old)
and /work/SRC/openSUSE:Factory/.libdrm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libdrm"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libdrm/libdrm.changes 2015-08-21 12:42:43.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.libdrm.new/libdrm.changes 2015-10-01 09:27:42.000000000 +0200
@@ -1,0 +2,6 @@
+Mon Sep 21 07:33:11 UTC 2015 - sndirsch(a)suse.com
+
+- Update to version 2.4.65
+ * bugfixes
+
+-------------------------------------------------------------------
Old:
----
libdrm-2.4.64.tar.bz2
New:
----
libdrm-2.4.65.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libdrm.spec ++++++
--- /var/tmp/diff_new_pack.FBY7m5/_old 2015-10-01 09:27:43.000000000 +0200
+++ /var/tmp/diff_new_pack.FBY7m5/_new 2015-10-01 09:27:43.000000000 +0200
@@ -18,7 +18,7 @@
Name: libdrm
Url: http://dri.freedesktop.org/
-Version: 2.4.64
+Version: 2.4.65
Release: 0
Provides: libdrm23 = %{version}
Obsoletes: libdrm23 < %{version}
@@ -209,7 +209,7 @@
rm -f "%buildroot/%_libdir"/*.la
%{__mkdir} -p $RPM_BUILD_ROOT/usr/bin
%{__install} \
- tests/.libs/dristat \
+ tests/dristat \
tests/.libs/drmstat \
tests/modeprint/.libs/modeprint \
tests/modetest/.libs/modetest $RPM_BUILD_ROOT/usr/bin
++++++ libdrm-2.4.64.tar.bz2 -> libdrm-2.4.65.tar.bz2 ++++++
++++ 2014 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package perl-Net-DNS for openSUSE:Factory checked in at 2015-10-01 09:27:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Net-DNS (Old)
and /work/SRC/openSUSE:Factory/.perl-Net-DNS.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Net-DNS"
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Net-DNS/perl-Net-DNS.changes 2015-04-22 01:08:02.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-Net-DNS.new/perl-Net-DNS.changes 2015-10-01 09:27:35.000000000 +0200
@@ -1,0 +2,6 @@
+Sun Sep 20 16:08:50 UTC 2015 - coolo(a)suse.com
+
+- updated to 1.02
+ see /usr/share/doc/packages/perl-Net-DNS/Changes
+
+-------------------------------------------------------------------
Old:
----
Net-DNS-0.83.tar.gz
New:
----
Net-DNS-1.02.tar.gz
cpanspec.yml
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Net-DNS.spec ++++++
--- /var/tmp/diff_new_pack.4kVJcH/_old 2015-10-01 09:27:37.000000000 +0200
+++ /var/tmp/diff_new_pack.4kVJcH/_new 2015-10-01 09:27:37.000000000 +0200
@@ -17,21 +17,25 @@
Name: perl-Net-DNS
-Version: 0.83
+Version: 1.02
Release: 0
%define cpan_name Net-DNS
Summary: Perl Interface to the Domain Name System
-License: Artistic-1.0 or GPL-1.0+
+License: MIT
Group: Development/Libraries/Perl
Url: http://search.cpan.org/dist/Net-DNS/
-Source: http://www.cpan.org/authors/id/N/NL/NLNETLABS/%{cpan_name}-%{version}.tar.gz
+Source0: http://www.cpan.org/authors/id/N/NL/NLNETLABS/%{cpan_name}-%{version}.tar.gz
+Source1: cpanspec.yml
+BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
-BuildRequires: perl(Digest::HMAC) >= 1.01
+BuildRequires: perl(Digest::HMAC) >= 1.03
BuildRequires: perl(Digest::SHA) >= 5.23
-Requires: perl(Digest::HMAC) >= 1.01
+BuildRequires: perl(Time::Local) >= 1.19
+Requires: perl(Digest::HMAC) >= 1.03
Requires: perl(Digest::SHA) >= 5.23
+Requires: perl(Time::Local) >= 1.19
%{perl_requires}
%description
@@ -48,7 +52,7 @@
find . -type f -print0 | xargs -0 chmod 644
%build
-%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
+%{__perl} Makefile.PL INSTALLDIRS=vendor
%{__make} %{?_smp_mflags}
%check
@@ -61,6 +65,6 @@
%files -f %{name}.files
%defattr(-,root,root,755)
-%doc Changes README TODO
+%doc Changes README
%changelog
++++++ Net-DNS-0.83.tar.gz -> Net-DNS-1.02.tar.gz ++++++
++++ 27572 lines of diff (skipped)
++++++ cpanspec.yml ++++++
---
#description_paragraphs: 3
#no_testing: broken upstream
#sources:
# - source1
# - source2
#patches:
# foo.patch: -p1
# bar.patch:
#preamble: |-
# BuildRequires: gcc-c++
#post_prep: |-
# hunspell=`pkg-config --libs hunspell | sed -e 's,-l,,; s, *,,g'`
# sed -i -e "s,hunspell-X,$hunspell," t/00-prereq.t Makefile.PL
#post_install: |-
# sed on %{name}.files
#license: SUSE-NonFree
#skip_noarch: 1
#custom_build: |-
#./Build build flags=%{?_smp_mflags} --myflag
#custom_test: |-
#startserver && make test
#ignore_requires: Bizarre::Module
1
0
Hello community,
here is the log from the commit of package perl-DBI for openSUSE:Factory checked in at 2015-10-01 09:27:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-DBI (Old)
and /work/SRC/openSUSE:Factory/.perl-DBI.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-DBI"
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-DBI/perl-DBI.changes 2015-04-22 01:14:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-DBI.new/perl-DBI.changes 2015-10-01 09:27:29.000000000 +0200
@@ -1,0 +2,26 @@
+Sun Sep 20 15:44:57 UTC 2015 - coolo(a)suse.com
+
+- updated to 1.634
+ see /usr/share/doc/packages/perl-DBI/Changes
+
+ =head2 Changes in DBI 1.634 - 3rd August 2015
+
+ Enabled strictures on all modules (Jose Luis Perez Diez) #22
+ Note that this might cause new exceptions in existing code.
+ Please take time for extra testing before deploying to production.
+ Improved handling of row counts for compiled drivers and enable them to
+ return larger row counts (IV type) by defining new *_iv macros.
+ Fixed quote_identifier that was adding a trailing separator when there
+ was only a catalog (Martin J. Evans)
+
+ Removed redundant keys() call in fetchall_arrayref with hash slice (ilmari) #24
+ Corrected pod xref to Placeholders section (Matthew D. Fuller)
+ Corrected pod grammar (Nick Tonkin) #25
+
+ Added support for tables('', '', '', '%') special case (Martin J. Evans)
+ Added support for DBD prefixes with numbers (Jens Rehsack) #19
+ Added extra initializer for DBI::DBD::SqlEngine based DBD's (Jens Rehsack)
+ Added Memory Leaks section to the DBI docs (Tim)
+ Added Artistic v1 & GPL v1 LICENSE file (Jose Luis Perez Diez) #21
+
+-------------------------------------------------------------------
Old:
----
DBI-1.633.tar.gz
New:
----
DBI-1.634.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-DBI.spec ++++++
--- /var/tmp/diff_new_pack.kQIztp/_old 2015-10-01 09:27:30.000000000 +0200
+++ /var/tmp/diff_new_pack.kQIztp/_new 2015-10-01 09:27:30.000000000 +0200
@@ -17,7 +17,7 @@
Name: perl-DBI
-Version: 1.633
+Version: 1.634
Release: 0
%define cpan_name DBI
Summary: Database independent interface for Perl
++++++ DBI-1.633.tar.gz -> DBI-1.634.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/Changes new/DBI-1.634/Changes
--- old/DBI-1.633/Changes 2015-01-11 14:22:12.000000000 +0100
+++ new/DBI-1.634/Changes 2015-08-03 16:38:14.000000000 +0200
@@ -6,6 +6,26 @@
=cut
+=head2 Changes in DBI 1.634 - 3rd August 2015
+
+ Enabled strictures on all modules (Jose Luis Perez Diez) #22
+ Note that this might cause new exceptions in existing code.
+ Please take time for extra testing before deploying to production.
+ Improved handling of row counts for compiled drivers and enable them to
+ return larger row counts (IV type) by defining new *_iv macros.
+ Fixed quote_identifier that was adding a trailing separator when there
+ was only a catalog (Martin J. Evans)
+
+ Removed redundant keys() call in fetchall_arrayref with hash slice (ilmari) #24
+ Corrected pod xref to Placeholders section (Matthew D. Fuller)
+ Corrected pod grammar (Nick Tonkin) #25
+
+ Added support for tables('', '', '', '%') special case (Martin J. Evans)
+ Added support for DBD prefixes with numbers (Jens Rehsack) #19
+ Added extra initializer for DBI::DBD::SqlEngine based DBD's (Jens Rehsack)
+ Added Memory Leaks section to the DBI docs (Tim)
+ Added Artistic v1 & GPL v1 LICENSE file (Jose Luis Perez Diez) #21
+
=head2 Changes in DBI 1.633 - 11th Jan 2015
Fixed selectrow_*ref to return undef on error in list context
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/DBI.pm new/DBI-1.634/DBI.pm
--- old/DBI-1.633/DBI.pm 2015-01-11 14:22:26.000000000 +0100
+++ new/DBI-1.634/DBI.pm 2015-08-03 16:38:42.000000000 +0200
@@ -11,7 +11,7 @@
require 5.008_001;
BEGIN {
-our $XS_VERSION = our $VERSION = "1.633"; # ==> ALSO update the version in the pod text below!
+our $XS_VERSION = our $VERSION = "1.634"; # ==> ALSO update the version in the pod text below!
$VERSION = eval $VERSION;
}
@@ -137,6 +137,8 @@
"How to Report Bugs Effectively" by Simon Tatham:
L<http://www.chiark.greenend.org.uk/~sgtatham/bugs.html>.
+If you think you've found a memory leak then read L</Memory Leaks>.
+
Your problem is most likely related to the specific DBD driver module you're
using. If that's the case then click on the 'Bugs' link on the L<http://metacpan.org>
page for your driver. Only submit a bug report against the DBI itself if you're
@@ -144,7 +146,7 @@
=head2 NOTES
-This is the DBI specification that corresponds to DBI version 1.633
+This is the DBI specification that corresponds to DBI version 1.634
(see L<DBI::Changes> for details).
The DBI is evolving at a steady pace, so it's good to check that
@@ -1391,7 +1393,7 @@
unless $class =~ /^DBD::(\w+)::(dr|db|st)$/;
my ($driver, $subtype) = ($1, $2);
Carp::croak("invalid method name '$method'")
- unless $method =~ m/^([a-z]+_)\w+$/;
+ unless $method =~ m/^([a-z][a-z0-9]*_)\w+$/;
my $prefix = $1;
my $reg_info = $dbd_prefix_registry->{$prefix};
Carp::carp("method name prefix '$prefix' is not associated with a registered driver") unless $reg_info;
@@ -1588,9 +1590,13 @@
my $quoted_id = join '.', grep { defined } @id;
if ($catalog) { # add catalog correctly
- $quoted_id = ($info->[2] == 2) # SQL_CL_END
- ? $quoted_id . $info->[1] . $catalog
- : $catalog . $info->[1] . $quoted_id;
+ if ($quoted_id) {
+ $quoted_id = ($info->[2] == 2) # SQL_CL_END
+ ? $quoted_id . $info->[1] . $catalog
+ : $catalog . $info->[1] . $quoted_id;
+ } else {
+ $quoted_id = $catalog;
+ }
}
return $quoted_id;
}
@@ -1761,7 +1767,11 @@
my $sth = $dbh->table_info(@args[0,1,2,3,4]) or return;
my $tables = $sth->fetchall_arrayref or return;
my @tables;
- if ($dbh->get_info(29)) { # SQL_IDENTIFIER_QUOTE_CHAR
+ if (defined($args[3]) && $args[3] eq '%' # special case for tables('','','','%')
+ && grep {defined($_) && $_ eq ''} @args[0,1,2]
+ ) {
+ @tables = map { $_->[3] } @$tables;
+ } elsif ($dbh->get_info(29)) { # SQL_IDENTIFIER_QUOTE_CHAR
@tables = map { $dbh->quote_identifier( @{$_}[0,1,2] ) } @$tables;
}
else { # temporary old style hack (yeach)
@@ -2060,8 +2070,7 @@
}
}
elsif ($mode eq 'HASH') {
- if (keys %$slice) {
- keys %$slice; # reset the iterator
+ if (keys %$slice) { # resets the iterator
my $name2idx = $sth->FETCH('NAME_lc_hash');
while ( my ($name, $unused) = each %$slice ) {
my $idx = $name2idx->{lc $name};
@@ -3643,7 +3652,7 @@
The ChildHandles attribute contains a reference to an array of all the
handles created by this handle which are still accessible. The
contents of the array are weak-refs and will become undef when the
-handle goes out of scope.
+handle goes out of scope. (They're cleared out occasionally.)
C<ChildHandles> returns undef if your perl version does not support weak
references (check the L<Scalar::Util|Scalar::Util> module). The referenced
@@ -4635,7 +4644,7 @@
passing to C</fetchall_arrayref>.
You may often want to fetch an array of rows where each row is stored as a
-hash. That can be done simple using:
+hash. That can be done simply using:
my $emps = $dbh->selectall_arrayref(
"SELECT ename FROM emp ORDER BY ename",
@@ -4731,7 +4740,8 @@
has been called. Portable applications should take this into account.
In general, DBI drivers do not parse the contents of the statement
-(other than simply counting any L</Placeholders>). The statement is
+(other than simply counting any L<Placeholders|/Placeholders and Bind Values>).
+The statement is
passed directly to the database engine, sometimes known as pass-thru
mode. This has advantages and disadvantages. On the plus side, you can
access all the functionality of the engine being used. On the downside,
@@ -5995,7 +6005,7 @@
$sth->execute;
DBI::dump_results($sth);
-See L</"Placeholders and Bind Values"> for more information.
+See L</Placeholders and Bind Values> for more information.
B<Data Types for Placeholders>
@@ -6047,7 +6057,7 @@
The C<CONVERT> function used here is just an example. The actual function
and syntax will vary between different databases and is non-portable.
-See also L</"Placeholders and Bind Values"> for more information.
+See also L</Placeholders and Bind Values> for more information.
=head3 C<bind_param_inout>
@@ -6073,7 +6083,7 @@
returned. The only cost of using a larger value than needed is wasted memory.
Undefined values or C<undef> are used to indicate null values.
-See also L</"Placeholders and Bind Values"> for more information.
+See also L</Placeholders and Bind Values> for more information.
=head3 C<bind_param_array>
@@ -7663,6 +7673,23 @@
via C<$h-E<gt>{private_..._*}>. See the entry under L</ATTRIBUTES
COMMON TO ALL HANDLES> for info and important caveats.
+=head2 Memory Leaks
+
+When tracking down memory leaks using tools like L<Devel::Leak>
+you'll find that some DBI internals are reported as 'leaking' memory.
+This is very unlikely to be a real leak. The DBI has various caches to improve
+performance and the apparrent leaks are simply the normal operation of these
+caches.
+
+The most frequent sources of the apparrent leaks are L</ChildHandles>,
+L</prepare_cached> and L</connect_cached>.
+
+For example http://stackoverflow.com/questions/13338308/perl-dbi-memory-leak
+
+Given how widely the DBI is used, you can rest assured that if a new release of
+the DBI did have a real leak it would be discovered, reported, and fixed
+immediately. The leak you're looking for is probably elsewhere. Good luck!
+
=head1 TRACING
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/DBI.xs new/DBI-1.634/DBI.xs
--- old/DBI-1.633/DBI.xs 2015-01-07 16:37:19.000000000 +0100
+++ new/DBI-1.634/DBI.xs 2015-07-19 15:34:45.000000000 +0200
@@ -1372,7 +1372,7 @@
if (DBIc_TYPE(imp) == DBIt_ST) {
imp_sth_t *imp_sth = (imp_sth_t*)imp;
- DBIc_ROW_COUNT(imp_sth) = -1;
+ DBIc_ROW_COUNT(imp_sth) = -1;
}
DBIc_COMSET_on(imp); /* common data now set up */
@@ -3802,7 +3802,7 @@
if (trace_level >= (is_nested_call ? 3 : 1)) {
PerlIO *logfp = DBILOGFP;
const int is_fetch = (meth_type == methtype_fetch_star && DBIc_TYPE(imp_xxh)==DBIt_ST);
- const int row_count = (is_fetch) ? DBIc_ROW_COUNT((imp_sth_t*)imp_xxh) : 0;
+ const IV row_count = (is_fetch) ? DBIc_ROW_COUNT((imp_sth_t*)imp_xxh) : 0;
if (is_fetch && row_count>=2 && trace_level<=4 && SvOK(ST(0))) {
/* skip the 'middle' rows to reduce output */
goto skip_meth_return_trace;
@@ -3861,7 +3861,7 @@
PerlIO_printf(logfp," ) [%d items]", outitems);
}
if (is_fetch && row_count) {
- PerlIO_printf(logfp," row%d", row_count);
+ PerlIO_printf(logfp," row%"IVdf, row_count);
}
if (qsv) /* flag as quick and peek at the first arg (still on the stack) */
PerlIO_printf(logfp," (%s from cache)", neatsvpv(st1,0));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/Driver.xst new/DBI-1.634/Driver.xst
--- old/DBI-1.633/Driver.xst 2013-06-26 18:46:16.000000000 +0200
+++ new/DBI-1.634/Driver.xst 2015-08-02 18:45:40.000000000 +0200
@@ -8,6 +8,27 @@
#include "Driver_xst.h"
+# Historically dbd_db_do4, dbd_st_execute, and dbd_st_rows returned an 'int' type.
+# That's only 32 bits (31+sign) so isn't sufficient for very large row counts
+# So now instead of defining those macros, drivers can define dbd_db_do4_iv,
+# dbd_st_execute_iv, and dbd_st_rows_iv to be the names of functions that
+# return an 'IV' type. They could also set DBIc_ROW_COUNT(imp_sth).
+#
+# To save a mess of #ifdef's we arrange for dbd_st_execute (etc) to work
+# as dbd_st_execute_iv if that's defined
+#
+#if defined(dbd_st_execute_iv)
+#undef dbd_st_execute
+#define dbd_st_execute dbd_st_execute_iv
+#endif
+#if defined(dbd_st_rows_iv)
+#undef dbd_st_rows
+#define dbd_st_rows dbd_st_rows_iv
+#endif
+#if defined(dbd_db_do4_iv)
+#undef dbd_db_do4
+#define dbd_db_do4 dbd_db_do4_iv
+#endif
MODULE = DBD::~DRIVER~ PACKAGE = DBD::~DRIVER~
@@ -240,7 +261,7 @@
{
D_imp_dbh(dbh);
IV retval;
- retval = dbd_db_do4(dbh, imp_dbh, statement, params);
+ retval = dbd_db_do4(dbh, imp_dbh, statement, params); /* might be dbd_db_do4_iv via macro */
/* remember that dbd_db_do4 must return <= -2 for error */
if (retval == 0) /* ok with no rows affected */
XST_mPV(0, "0E0"); /* (true but zero) */
@@ -582,16 +603,15 @@
SV * sth
CODE:
D_imp_sth(sth);
- int retval;
+ IV retval;
if (items > 1) { /* need to bind params */
if (!dbdxst_bind_params(sth, imp_sth, items, ax) ) {
XSRETURN_UNDEF;
}
}
/* XXX this code is duplicated in selectrow_arrayref above */
- if (DBIc_ROW_COUNT(imp_sth) > 0) /* reset for re-execute */
- DBIc_ROW_COUNT(imp_sth) = 0;
- retval = dbd_st_execute(sth, imp_sth);
+ DBIc_ROW_COUNT(imp_sth) = 0;
+ retval = dbd_st_execute(sth, imp_sth); /* might be dbd_st_execute_iv via macro */
/* remember that dbd_st_execute must return <= -2 for error */
if (retval == 0) /* ok with no rows affected */
XST_mPV(0, "0E0"); /* (true but zero) */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/META.json new/DBI-1.634/META.json
--- old/DBI-1.633/META.json 2015-01-11 14:24:38.000000000 +0100
+++ new/DBI-1.634/META.json 2015-08-03 16:51:29.000000000 +0200
@@ -4,7 +4,7 @@
"Tim Bunce (dbi-users(a)perl.org)"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.142690",
+ "generated_by" : "ExtUtils::MakeMaker version 7.04, CPAN::Meta::Converter version 2.150005",
"license" : [
"perl_5"
],
@@ -58,7 +58,8 @@
"x_IRC" : "irc://irc.perl.org/#dbi",
"x_MailingList" : "mailto:dbi-dev@perl.org"
},
- "version" : "1.633",
+ "version" : "1.634",
+ "x_serialization_backend" : "JSON::PP version 2.27203",
"x_suggests" : {
"Clone" : 0.34,
"DB_File" : 0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/META.yml new/DBI-1.634/META.yml
--- old/DBI-1.633/META.yml 2015-01-11 14:24:38.000000000 +0100
+++ new/DBI-1.634/META.yml 2015-08-03 16:51:29.000000000 +0200
@@ -16,7 +16,7 @@
DBD::RAM: '0.072'
SQL::Statement: '1.33'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.142690'
+generated_by: 'ExtUtils::MakeMaker version 7.04, CPAN::Meta::Converter version 2.150005'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -34,7 +34,8 @@
homepage: http://dbi.perl.org/
license: http://dev.perl.org/licenses/
repository: https://github.com/perl5-dbi/dbi
-version: '1.633'
+version: '1.634'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.012'
x_suggests:
Clone: 0.34
DB_File: 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/Perl.xs new/DBI-1.634/Perl.xs
--- old/DBI-1.633/Perl.xs 2013-04-05 00:17:19.000000000 +0200
+++ new/DBI-1.634/Perl.xs 2015-07-22 16:49:44.000000000 +0200
@@ -27,7 +27,7 @@
#define dbd_discon_all(drh, imp_drh) (drh=drh,imp_drh=imp_drh,1)
#define dbd_dr_data_sources(drh, imp_drh, attr) (drh=drh,imp_drh=imp_drh,Nullav)
-#define dbd_db_do4(dbh,imp_dbh,p3,p4) (dbh=dbh,imp_dbh=imp_dbh,p3=p3,p4=p4,-2)
+#define dbd_db_do4_iv(dbh,imp_dbh,p3,p4) (dbh=dbh,imp_dbh=imp_dbh,p3=p3,p4=p4,-2)
#define dbd_db_last_insert_id(dbh, imp_dbh, p3,p4,p5,p6, attr) \
(dbh=dbh,imp_dbh=imp_dbh,p3=p3,p4=p4,p5=p5,p6=p6,&PL_sv_undef)
#define dbd_take_imp_data(h, imp_xxh, p3) (h=h,imp_xxh=imp_xxh,&PL_sv_undef)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/dbd_xsh.h new/DBI-1.634/dbd_xsh.h
--- old/DBI-1.633/dbd_xsh.h 2013-04-05 00:17:19.000000000 +0200
+++ new/DBI-1.634/dbd_xsh.h 2015-07-22 17:13:50.000000000 +0200
@@ -27,7 +27,8 @@
/* Note: interface of dbd_db_do changed in v1.33 */
/* Old prototype: dbd_db_do _((SV *sv, char *statement)); */
/* dbd_db_do: optional: defined by a driver if the DBI default version is too slow */
-int dbd_db_do4 _((SV *dbh, imp_dbh_t *imp_dbh, char *statement, SV *params));
+int dbd_db_do4 _((SV *dbh, imp_dbh_t *imp_dbh, char *statement, SV *params));
+IV dbd_db_do4_iv _((SV *dbh, imp_dbh_t *imp_dbh, char *statement, SV *params));
int dbd_db_commit _((SV *dbh, imp_dbh_t *imp_dbh));
int dbd_db_rollback _((SV *dbh, imp_dbh_t *imp_dbh));
int dbd_db_disconnect _((SV *dbh, imp_dbh_t *imp_dbh));
@@ -40,7 +41,9 @@
int dbd_st_prepare _((SV *sth, imp_sth_t *imp_sth, char *statement, SV *attribs));
int dbd_st_prepare_sv _((SV *sth, imp_sth_t *imp_sth, SV *statement, SV *attribs));
int dbd_st_rows _((SV *sth, imp_sth_t *imp_sth));
-int dbd_st_execute _((SV *sth, imp_sth_t *imp_sth));
+IV dbd_st_rows_iv _((SV *sth, imp_sth_t *imp_sth));
+int dbd_st_execute _((SV *sth, imp_sth_t *imp_sth));
+IV dbd_st_execute_iv _((SV *sth, imp_sth_t *imp_sth));
AV *dbd_st_fetch _((SV *sth, imp_sth_t *imp_sth));
int dbd_st_finish3 _((SV *sth, imp_sth_t *imp_sth, int from_destroy));
int dbd_st_finish _((SV *sth, imp_sth_t *imp_sth)); /* deprecated */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/Bundle/DBI.pm new/DBI-1.634/lib/Bundle/DBI.pm
--- old/DBI-1.633/lib/Bundle/DBI.pm 2013-06-24 23:03:21.000000000 +0200
+++ new/DBI-1.634/lib/Bundle/DBI.pm 2015-05-26 17:26:53.000000000 +0200
@@ -2,6 +2,7 @@
package Bundle::DBI;
+use strict;
our $VERSION = "12.008696";
1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBD/ExampleP.pm new/DBI-1.634/lib/DBD/ExampleP.pm
--- old/DBI-1.633/lib/DBD/ExampleP.pm 2013-11-14 12:44:07.000000000 +0100
+++ new/DBI-1.634/lib/DBD/ExampleP.pm 2015-05-26 17:26:53.000000000 +0200
@@ -1,11 +1,15 @@
{
package DBD::ExampleP;
+ use strict;
use Symbol;
use DBI qw(:sql_types);
require File::Spec;
+
+ our (@EXPORT,$VERSION,@statnames,%statnames,@stattypes,%stattypes,
+ @statprec,%statprec,$drh,);
@EXPORT = qw(); # Do NOT @EXPORT anything.
$VERSION = "12.014311";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBD/File.pm new/DBI-1.634/lib/DBD/File.pm
--- old/DBI-1.633/lib/DBD/File.pm 2014-12-11 12:04:20.000000000 +0100
+++ new/DBI-1.634/lib/DBD/File.pm 2015-05-26 17:20:06.000000000 +0200
@@ -956,6 +956,8 @@
$meta->{lockfh} and $meta->{lockfh}->close ();
undef $meta->{fh};
undef $meta->{lockfh};
+
+ $self->SUPER::DESTROY();
} # DESTROY
1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBD/NullP.pm new/DBI-1.634/lib/DBD/NullP.pm
--- old/DBI-1.633/lib/DBD/NullP.pm 2013-11-14 12:44:07.000000000 +0100
+++ new/DBI-1.634/lib/DBD/NullP.pm 2015-07-22 17:15:00.000000000 +0200
@@ -1,11 +1,12 @@
+use strict;
{
package DBD::NullP;
require DBI;
require Carp;
- @EXPORT = qw(); # Do NOT @EXPORT anything.
- $VERSION = "12.014715";
+ our @EXPORT = qw(); # Do NOT @EXPORT anything.
+ our $VERSION = "12.014715";
# $Id: NullP.pm 14714 2011-02-22 17:27:07Z Tim $
#
@@ -14,7 +15,7 @@
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
- $drh = undef; # holds driver handle once initialised
+ our $drh = undef; # holds driver handle once initialised
sub driver{
return $drh if $drh;
@@ -35,7 +36,7 @@
{ package DBD::NullP::dr; # ====== DRIVER ======
- $imp_data_size = 0;
+ our $imp_data_size = 0;
use strict;
sub connect { # normally overridden, but a handy default
@@ -51,10 +52,46 @@
{ package DBD::NullP::db; # ====== DATABASE ======
- $imp_data_size = 0;
+ our $imp_data_size = 0;
use strict;
use Carp qw(croak);
+ # Added get_info to support tests in 10examp.t
+ sub get_info {
+ my ($dbh, $type) = @_;
+
+ if ($type == 29) { # identifier quote
+ return '"';
+ }
+ return;
+ }
+
+ # Added table_info to support tests in 10examp.t
+ sub table_info {
+ my ($dbh, $catalog, $schema, $table, $type) = @_;
+
+ my ($outer, $sth) = DBI::_new_sth($dbh, {
+ 'Statement' => 'tables',
+ });
+ if (defined($type) && $type eq '%' && # special case for tables('','','','%')
+ grep {defined($_) && $_ eq ''} ($catalog, $schema, $table)) {
+ $outer->{dbd_nullp_data} = [[undef, undef, undef, 'TABLE', undef],
+ [undef, undef, undef, 'VIEW', undef],
+ [undef, undef, undef, 'ALIAS', undef]];
+ } elsif (defined($catalog) && $catalog eq '%' && # special case for tables('%','','')
+ grep {defined($_) && $_ eq ''} ($schema, $table)) {
+ $outer->{dbd_nullp_data} = [['catalog1', undef, undef, undef, undef],
+ ['catalog2', undef, undef, undef, undef]];
+ } else {
+ $outer->{dbd_nullp_data} = [['catalog', 'schema', 'table1', 'TABLE']];
+ $outer->{dbd_nullp_data} = [['catalog', 'schema', 'table2', 'TABLE']];
+ $outer->{dbd_nullp_data} = [['catalog', 'schema', 'table3', 'TABLE']];
+ }
+ $outer->STORE(NUM_OF_FIELDS => 5);
+ $sth->STORE(Active => 1);
+ return $outer;
+ }
+
sub prepare {
my ($dbh, $statement)= @_;
@@ -99,7 +136,7 @@
{ package DBD::NullP::st; # ====== STATEMENT ======
- $imp_data_size = 0;
+ our $imp_data_size = 0;
use strict;
sub bind_param {
@@ -141,12 +178,12 @@
sub fetchrow_arrayref {
my $sth = shift;
- my $data = $sth->{dbd_nullp_data};
+ my $data = shift @{$sth->{dbd_nullp_data}};
if (!$data || !@$data) {
$sth->finish; # no more data so finish
return undef;
}
- return $sth->_set_fbav(shift @$data);
+ return $sth->_set_fbav($data);
}
*fetch = \&fetchrow_arrayref; # alias
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBD/Sponge.pm new/DBI-1.634/lib/DBD/Sponge.pm
--- old/DBI-1.633/lib/DBD/Sponge.pm 2013-06-24 23:03:21.000000000 +0200
+++ new/DBI-1.634/lib/DBD/Sponge.pm 2015-05-26 17:26:53.000000000 +0200
@@ -1,3 +1,4 @@
+use strict;
{
package DBD::Sponge;
@@ -14,7 +15,7 @@
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
- $drh = undef; # holds driver handle once initialised
+ our $drh = undef; # holds driver handle once initialised
my $methods_already_installed;
sub driver{
@@ -40,13 +41,13 @@
{ package DBD::Sponge::dr; # ====== DRIVER ======
- $imp_data_size = 0;
+ our $imp_data_size = 0;
# we use default (dummy) connect method
}
{ package DBD::Sponge::db; # ====== DATABASE ======
- $imp_data_size = 0;
+ our $imp_data_size = 0;
use strict;
sub prepare {
@@ -156,7 +157,7 @@
{ package DBD::Sponge::st; # ====== STATEMENT ======
- $imp_data_size = 0;
+ our $imp_data_size = 0;
use strict;
sub execute {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/Const/GetInfo/ANSI.pm new/DBI-1.634/lib/DBI/Const/GetInfo/ANSI.pm
--- old/DBI-1.633/lib/DBI/Const/GetInfo/ANSI.pm 2013-06-24 23:03:21.000000000 +0200
+++ new/DBI-1.634/lib/DBI/Const/GetInfo/ANSI.pm 2015-05-26 17:26:53.000000000 +0200
@@ -7,9 +7,12 @@
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
+use strict;
package DBI::Const::GetInfo::ANSI;
+our (%InfoTypes,%ReturnTypes,%ReturnValues,);
+
=head1 NAME
DBI::Const::GetInfo::ANSI - ISO/IEC SQL/CLI Constants for GetInfo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/Const/GetInfo/ODBC.pm new/DBI-1.634/lib/DBI/Const/GetInfo/ODBC.pm
--- old/DBI-1.633/lib/DBI/Const/GetInfo/ODBC.pm 2013-06-24 23:03:21.000000000 +0200
+++ new/DBI-1.634/lib/DBI/Const/GetInfo/ODBC.pm 2015-05-26 17:26:53.000000000 +0200
@@ -7,9 +7,10 @@
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
-
+use strict;
package DBI::Const::GetInfo::ODBC;
+our (%InfoTypes,%ReturnTypes,%ReturnValues,);
=head1 NAME
DBI::Const::GetInfo::ODBC - ODBC Constants for GetInfo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/DBD/Metadata.pm new/DBI-1.634/lib/DBI/DBD/Metadata.pm
--- old/DBI-1.633/lib/DBI/DBD/Metadata.pm 2013-06-24 23:03:21.000000000 +0200
+++ new/DBI-1.634/lib/DBI/DBD/Metadata.pm 2015-05-26 17:29:17.000000000 +0200
@@ -8,19 +8,19 @@
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the Perl README file.
+use strict;
+
use Exporter ();
use Carp;
use DBI;
use DBI::Const::GetInfoType qw(%GetInfoType);
-# Perl 5.005_03 does not recognize 'our'
-@ISA = qw(Exporter);
-@EXPORT = qw(write_getinfo_pm write_typeinfo_pm);
+our @ISA = qw(Exporter);
+our @EXPORT = qw(write_getinfo_pm write_typeinfo_pm);
-$VERSION = "2.014214";
+our $VERSION = "2.014214";
-use strict;
=head1 NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/DBD/SqlEngine/HowTo.pod new/DBI-1.634/lib/DBI/DBD/SqlEngine/HowTo.pod
--- old/DBI-1.633/lib/DBI/DBD/SqlEngine/HowTo.pod 2014-03-09 20:51:54.000000000 +0100
+++ new/DBI-1.634/lib/DBI/DBD/SqlEngine/HowTo.pod 2015-05-26 17:20:06.000000000 +0200
@@ -194,10 +194,10 @@
modifications are still allowed.
Primarily DBI::DBD::SqlEngine provides access via the setters
-C<get_sql_engine_meta>, C<get_single_table_meta>, C<set_single_table_meta>,
-C<set_sql_engine_meta> and C<clear_sql_engine_meta>. Those methods are
-easily accessible by the users via the C<< $dbh->func () >> interface
-provided by DBI. Well, many users don't feel comfortize when calling
+C<new_sql_engine_meta>, C<get_sql_engine_meta>, C<get_single_table_meta>,
+C<set_single_table_meta>, C<set_sql_engine_meta> and C<clear_sql_engine_meta>.
+Those methods are easily accessible by the users via the C<< $dbh->func () >>
+interface provided by DBI. Well, many users don't feel comfortize when calling
# don't require extension for tables cars
$dbh->func ("cars", "f_ext", ".csv", "set_sql_engine_meta");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/DBD/SqlEngine.pm new/DBI-1.634/lib/DBI/DBD/SqlEngine.pm
--- old/DBI-1.633/lib/DBI/DBD/SqlEngine.pm 2014-03-09 20:51:54.000000000 +0100
+++ new/DBI-1.634/lib/DBI/DBD/SqlEngine.pm 2015-05-26 17:20:06.000000000 +0200
@@ -41,6 +41,7 @@
my %accessors = (
versions => "get_driver_versions",
+ new_meta => "new_sql_engine_meta",
get_meta => "get_sql_engine_meta",
set_meta => "set_sql_engine_meta",
clear_meta => "clear_sql_engine_meta",
@@ -392,6 +393,7 @@
sql_init_phase => 1, # Only during initialization
sql_meta => 1, # meta data for tables
sql_meta_map => 1, # mapping table for identifier case
+ sql_data_source => 1, # reasonable datasource class
};
$dbh->{sql_readonly_attrs} = {
sql_engine_version => 1, # DBI::DBD::SqlEngine version
@@ -771,7 +773,7 @@
and $table = [ grep { $_ =~ $table } keys %{ $dbh->{sql_meta} } ];
ref $table || ref $attr
- or return &$gstm( $dbh, $table, $attr );
+ or return $gstm->( $dbh, $table, $attr );
ref $table or $table = [$table];
ref $attr or $attr = [$attr];
@@ -789,7 +791,7 @@
my %tattrs;
foreach my $aname ( @{$attr} )
{
- $tattrs{$aname} = &$gstm( $dbh, $tname, $aname );
+ $tattrs{$aname} = $gstm->( $dbh, $tname, $aname );
}
$results{$tname} = \%tattrs;
}
@@ -797,6 +799,31 @@
return \%results;
} # get_sql_engine_meta
+sub new_sql_engine_meta
+{
+ my ( $dbh, $table, $values ) = @_;
+ my $respect_case = 0;
+
+ "HASH" eq ref $values
+ or croak "Invalid argument for \$values - SCALAR or HASH expected but got " . ref $values;
+
+ $table =~ s/^\"// and $respect_case = 1; # handle quoted identifiers
+ $table =~ s/\"$//;
+
+ unless ($respect_case)
+ {
+ defined $dbh->{sql_meta_map}{$table} and $table = $dbh->{sql_meta_map}{$table};
+ }
+
+ $dbh->{sql_meta}{$table} = { %{$values} };
+ my $class;
+ defined $values->{sql_table_class} and $class = $values->{sql_table_class};
+ defined $class or ( $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
+ # XXX we should never hit DBD::File::Table::get_table_meta here ...
+ my ( undef, $meta ) = $class->get_table_meta( $dbh, $table, $respect_case );
+ 1;
+} # new_sql_engine_meta
+
sub set_single_table_meta
{
my ( $dbh, $table, $attr, $value ) = @_;
@@ -806,7 +833,7 @@
and return $dbh->STORE( $attr, $value );
( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/;
- ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 );
+ ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); # 1 means: respect case
$meta or croak "No such table '$table'";
$class->set_table_meta_attr( $meta, $attr, $value );
@@ -827,7 +854,7 @@
and $table = [ grep { $_ =~ $table } keys %{ $dbh->{sql_meta} } ];
ref $table || ref $attr
- or return &$sstm( $dbh, $table, $attr, $value );
+ or return $sstm->( $dbh, $table, $attr, $value );
ref $table or $table = [$table];
ref $attr or $attr = { $attr => $value };
@@ -839,10 +866,9 @@
foreach my $tname ( @{$table} )
{
- my %tattrs;
while ( my ( $aname, $aval ) = each %$attr )
{
- &$sstm( $dbh, $tname, $aname, $aval );
+ $sstm->( $dbh, $tname, $aname, $aval );
}
}
@@ -1432,6 +1458,11 @@
};
$self->{command} eq "DROP" and $flags->{dropMode} = 1;
+ my ( $tblnm, $table_meta ) = $class->get_table_meta( $data->{Database}, $table, 1 )
+ or croak "Cannot find appropriate meta for table '$table'";
+
+ defined $table_meta->{sql_table_class} and $class = $table_meta->{sql_table_class};
+
# because column name mapping is initialized in constructor ...
# and therefore specific opening operations might be done before
# reaching DBI::DBD::SqlEngine::Table->new(), we need to intercept
@@ -1439,8 +1470,6 @@
my $write_op = $createMode || $lockMode || $flags->{dropMode};
if ($write_op)
{
- my ( $tblnm, $table_meta ) = $class->get_table_meta( $data->{Database}, $table, 1 )
- or croak "Cannot find appropriate file for table '$table'";
$table_meta->{readonly}
and croak "Table '$table' is marked readonly - "
. $self->{command}
@@ -1625,6 +1654,14 @@
return $className->SUPER::new($tbl);
} # new
+sub DESTROY
+{
+ my $self = shift;
+ my $meta = $self->{meta};
+ $self->{row} and undef $self->{row};
+ ()
+}
+
1;
=pod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/DBD.pm new/DBI-1.634/lib/DBI/DBD.pm
--- old/DBI-1.633/lib/DBI/DBD.pm 2014-11-08 13:48:20.000000000 +0100
+++ new/DBI-1.634/lib/DBI/DBD.pm 2015-07-22 17:04:44.000000000 +0200
@@ -1,6 +1,6 @@
package DBI::DBD;
# vim:ts=8:sw=4
-
+use strict;
use vars qw($VERSION); # set $VERSION early so we don't confuse PAUSE/CPAN etc
# don't use Revision here because that's not in svn:keywords so that the
@@ -27,12 +27,14 @@
This document is I<still> a minimal draft which is in need of further work.
-The changes will occur both because the B<DBI> specification is changing
-and hence the requirements on B<DBD> drivers change, and because feedback
-from people reading this document will suggest improvements to it.
-
-Please read the B<DBI> documentation first and fully, including the B<DBI> FAQ.
-Then reread the B<DBI> specification again as you're reading this. It'll help.
+Please read the B<DBI> documentation first and fully. Then look at the
+implementation of some high-profile and regularly maintained drivers like
+DBD::Oracle, DBD::ODBC, DBD::Pg etc. (Those are no no particular order.)
+
+Then reread the B<DBI> specification and the code of those drivers again as
+you're reading this. It'll help. Where this document and the driver code
+differ it's likely that the driver code is more correct, especially if multiple
+drivers do the same thing.
This document is a patchwork of contributions from various authors.
More contributions (preferably as patches) are very welcome.
@@ -1795,6 +1797,12 @@
This header file has two jobs:
First it defines data structures for your private part of the handles.
+Note that the DBI provides many common fields for you. For example
+the statement handle (imp_sth) already has a row_count field with an IV type
+that accessed via the DBIc_ROW_COUNT(imp_sth) macro. Using this is strongly
+recommended as it's built in to some DBI internals so the DBI can 'just work'
+in more cases and you'll have less driver-specific code to write.
+Study DBIXS.h to see what's included with each type of handle.
Second it defines macros that rename the generic names like
C<dbd_db_login()> to database specific names like C<ora_db_login()>. This
@@ -1818,6 +1826,10 @@
login6 function to see if there are any Unicode characters in the
dbname.
+Similarly defining dbd_db_do4_iv is prefered over dbd_db_do4, dbd_st_rows_iv
+over dbd_st_rows, and dbd_st_execute_iv over dbd_st_execute. The *_iv forms are
+declared to return the IV type instead of an int.
+
People used to just pick Oracle's F<dbdimp.c> and use the same names,
structures and types. I strongly recommend against that. At first glance
this saves time, but your implementation will be less readable. It was
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/DBI/FAQ.pm new/DBI-1.634/lib/DBI/FAQ.pm
--- old/DBI-1.633/lib/DBI/FAQ.pm 2013-06-24 23:03:21.000000000 +0200
+++ new/DBI-1.634/lib/DBI/FAQ.pm 2015-05-26 17:26:53.000000000 +0200
@@ -18,6 +18,7 @@
### commercial products, such as books, magazine articles or CD-ROMs should be
### made to Alligator Descartes.
###
+use strict;
package DBI::FAQ;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/lib/Win32/DBIODBC.pm new/DBI-1.634/lib/Win32/DBIODBC.pm
--- old/DBI-1.633/lib/Win32/DBIODBC.pm 2013-05-23 12:56:50.000000000 +0200
+++ new/DBI-1.634/lib/Win32/DBIODBC.pm 2015-05-26 17:26:53.000000000 +0200
@@ -1,7 +1,7 @@
package # hide this package from CPAN indexer
Win32::ODBC;
-#use strict;
+use strict;
use DBI;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/t/10examp.t new/DBI-1.634/t/10examp.t
--- old/DBI-1.633/t/10examp.t 2014-01-08 10:29:56.000000000 +0100
+++ new/DBI-1.634/t/10examp.t 2015-07-22 17:15:00.000000000 +0200
@@ -14,7 +14,7 @@
require File::Spec;
require VMS::Filespec if $^O eq 'VMS';
-use Test::More tests => 229;
+use Test::More tests => 234;
do {
# provide some protection against growth in size of '.' during the test
@@ -41,7 +41,7 @@
# connect_cached
# ------------------------------------------
# This test checks that connect_cached works
- # and how it then relates to the CachedKids
+ # and how it then relates to the CachedKids
# attribute for the driver.
ok my $dbh_cached_1 = DBI->connect_cached('dbi:ExampleP:', '', '', { TraceLevel=>0, Executed => 0 });
@@ -51,7 +51,7 @@
is($dbh_cached_1, $dbh_cached_2, '... these 2 handles are cached, so they are the same');
ok my $dbh_cached_3 = DBI->connect_cached('dbi:ExampleP:', '', '', { examplep_foo => 1 });
-
+
isnt($dbh_cached_3, $dbh_cached_2, '... this handle was created with different parameters, so it is not the same');
# check that cached_connect applies attributes to handles returned from the cache
@@ -64,12 +64,12 @@
my $drh = $dbh->{Driver};
isa_ok($drh, "DBI::dr");
-
- my @cached_kids = values %{$drh->{CachedKids}};
+
+ my @cached_kids = values %{$drh->{CachedKids}};
ok(eq_set(\@cached_kids, [ $dbh_cached_1, $dbh_cached_3 ]), '... these are our cached kids');
- $drh->{CachedKids} = {};
- cmp_ok(scalar(keys %{$drh->{CachedKids}}), '==', 0, '... we have emptied out cache');
+ $drh->{CachedKids} = {};
+ cmp_ok(scalar(keys %{$drh->{CachedKids}}), '==', 0, '... we have emptied out cache');
}
check_connect_cached();
@@ -480,15 +480,15 @@
{
# dump_results;
my $sth = $dbh->prepare($std_sql);
-
+
isa_ok($sth, "DBI::st");
-
+
if (length(File::Spec->updir)) {
ok($sth->execute(File::Spec->updir));
} else {
ok($sth->execute('../'));
}
-
+
my $dump_file = "dumpcsr.tst.$$";
SKIP: {
skip "# dump_results test skipped: unable to open $dump_file: $!\n", 4
@@ -572,6 +572,35 @@
is(keys(%tables), 0);
}
+{
+ # some tests on special cases for the older tables call
+ # uses DBD::NullP and relies on 2 facts about DBD::NullP:
+ # 1) it has a get_info for for 29 - the quote chr
+ # 2) it has a table_info which returns some types and catalogs
+ my $dbhnp = DBI->connect('dbi:NullP:test');
+
+ # this special case should just return a list of table types
+ my @types = $dbhnp->tables('','','','%');
+ ok(scalar(@types), 'we got some table types');
+ my $defined = grep {defined($_)} @types;
+ is($defined, scalar(@types), 'all table types are defined');
+ SKIP: {
+ skip "some table types were not defined", 1 if ($defined != scalar(@types));
+ my $found_sep = grep {$_ =~ '\.'} @types;
+ is($found_sep, 0, 'no name separators in table types') or diag(Dumper(\@types));
+ };
+
+ # this special case should just return a list of catalogs
+ my @catalogs = $dbhnp->tables('%', '', '');
+ ok(scalar(@catalogs), 'we got some catalogs');
+ SKIP: {
+ skip "no catalogs found", 1 if !scalar(@catalogs);
+ my $found_sep = grep {$_ =~ '\.'} @catalogs;
+ is($found_sep, 0, 'no name separators in catalogs') or diag(Dumper(\@catalogs));
+ };
+ $dbhnp->disconnect;
+}
+
$dbh->disconnect;
ok(!$dbh->{Active});
ok(!$dbh->ping, "ping should return false after disconnect");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBI-1.633/t/49dbd_file.t new/DBI-1.634/t/49dbd_file.t
--- old/DBI-1.633/t/49dbd_file.t 2014-12-11 12:04:20.000000000 +0100
+++ new/DBI-1.634/t/49dbd_file.t 2015-05-26 17:20:06.000000000 +0200
@@ -130,11 +130,19 @@
is_deeply (\@tables, [ map { [ undef, undef, $_, 'TABLE', 'FILE' ] } sort "000_just_testing", $tbl ], "table_info gives test table");
SKIP: {
- $using_dbd_gofer and skip "modifying meta data doesn't work with Gofer-AutoProxy", 4;
+ $using_dbd_gofer and skip "modifying meta data doesn't work with Gofer-AutoProxy", 6;
ok ($dbh->f_set_meta ($tbl, "f_dir", $dir), "set single meta datum");
is ($tbl_file, $dbh->f_get_meta ($tbl, "f_fqfn"), "verify set single meta datum");
ok ($dbh->f_set_meta ($tbl, { f_dir => $dir }), "set multiple meta data");
is ($tbl_file, $dbh->f_get_meta ($tbl, "f_fqfn"), "verify set multiple meta attributes");
+
+ ok($dbh->f_new_meta("t_bsgdf_3544G2z", {
+ f_ext => undef,
+ f_dir => $dir,
+ }), "initialize new table (meta) with settings");
+
+ my $t_bsgdf_file = File::Spec->catfile (Cwd::abs_path ($dir), "t_bsgdf_3544G2z");
+ is($t_bsgdf_file, $dbh->f_get_meta ("t_bsgdf_3544G2z", "f_fqfn"), "verify create meta from scratch");
}
ok ($sth = $dbh->prepare ("select * from $tbl"), "Prepare select * from $tbl");
1
0