diff --git a/0001-Do-not-traceback-when-calling-setlocale-875354.patch b/0001-Do-not-traceback-when-calling-setlocale-875354.patch new file mode 100644 index 0000000..6f8123f --- /dev/null +++ b/0001-Do-not-traceback-when-calling-setlocale-875354.patch @@ -0,0 +1,42 @@ +From a43c9ca4e0fb600d425f50d11287f7c4fddee5f3 Mon Sep 17 00:00:00 2001 +From: Chris Lumens +Date: Fri, 14 Dec 2012 13:06:43 -0500 +Subject: [PATCH 01/03] Do not traceback when calling setlocale (#875354). + +This is just a debugging luxury. It's not worth additional tracebacks. +--- + src/parted/decorators.py | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/src/parted/decorators.py b/src/parted/decorators.py +index 2b583ad..737f72c 100644 +--- a/src/parted/decorators.py ++++ b/src/parted/decorators.py +@@ -24,13 +24,22 @@ import locale + import functools + + def localeC(fn): ++ # setlocale is not thread-safe, and anaconda (at least) may call this from ++ # another thread. This is just a luxury to have untranslated tracebacks, ++ # so it's not worth tracebacking itself. ++ def _setlocale(l): ++ try: ++ locale.setlocale(locale.LC_MESSAGES, l) ++ except: ++ pass ++ + @functools.wraps(fn) + def new(*args, **kwds): + oldlocale = locale.getlocale(locale.LC_MESSAGES) +- locale.setlocale(locale.LC_MESSAGES, 'C') ++ _setlocale('C') + try: + ret = fn(*args, **kwds) + finally: +- locale.setlocale(locale.LC_MESSAGES, oldlocale) ++ _setlocale(oldlocale) + return ret + return new +-- +1.8.1.2 + diff --git a/0002-Convert-Constraint-to-__ped.Constraint-in-partition..patch b/0002-Convert-Constraint-to-__ped.Constraint-in-partition..patch new file mode 100644 index 0000000..07b658e --- /dev/null +++ b/0002-Convert-Constraint-to-__ped.Constraint-in-partition..patch @@ -0,0 +1,26 @@ +From 760a3b7c39a59c2e0f131b40e0a48bdf8240f637 Mon Sep 17 00:00:00 2001 +From: Chris Tyler +Date: Fri, 11 Jan 2013 13:42:29 -0500 +Subject: [PATCH 02/03] Convert Constraint to __ped.Constraint in + partition.getMaxGeometry() + +--- + src/parted/partition.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/parted/partition.py b/src/parted/partition.py +index 20b6f41..ee3e2d0 100644 +--- a/src/parted/partition.py ++++ b/src/parted/partition.py +@@ -166,7 +166,7 @@ class Partition(object): + def getMaxGeometry(self, constraint): + """Given a constraint, return the maximum Geometry that self can be + grown to. Raises Partitionexception on error.""" +- return parted.Geometry(PedGeometry=self.disk.getPedDisk().get_max_partition_geometry(self.__partition, constraint)) ++ return parted.Geometry(PedGeometry=self.disk.getPedDisk().get_max_partition_geometry(self.__partition, constraint.getPedConstraint())) + + @localeC + def isFlagAvailable(self, flag): +-- +1.8.1.2 + diff --git a/0003-Subject-PATCH-pyparted-export-ped_disk_new-functiona.patch b/0003-Subject-PATCH-pyparted-export-ped_disk_new-functiona.patch new file mode 100644 index 0000000..39665f4 --- /dev/null +++ b/0003-Subject-PATCH-pyparted-export-ped_disk_new-functiona.patch @@ -0,0 +1,131 @@ +From 36384816c56d666bbf3492ddcc531bf4c4a38674 Mon Sep 17 00:00:00 2001 +From: Nageswara R Sastry +Date: Thu, 23 May 2013 09:14:10 -0400 +Subject: [PATCH 03/03] Subject: [PATCH] pyparted: export ped_disk_new + functionality + +Fixed Block Access (FBA) DASDs are mainframe-specific disk devices +which are layed out as a sequence of 512-byte sectors. In contrast +to ECKD DASDs, these disks do not require formatting and resemble +the LBA layout of non-mainframe disks. Despite this resemblance, +the Linux kernel applies special handling during partition detection +for FBA DASDs, resulting in a single, immutable partition being +reported. + +While actual FBA DASD hardware is no longer available, the z/VM +hypervisor can simulate FBA DASD disks, backed by either ECKD or +SCSI devices. + +This patch adds support for FBA DASD partitions and successful +installation by Anaconda. + +Signed-off-by: Nageswara R Sastry +--- + include/pydisk.h | 1 + + src/_pedmodule.c | 7 +++++++ + src/parted/__init__.py | 9 +++++++++ + src/pydisk.c | 32 ++++++++++++++++++++++++++++++++ + 4 files changed, 49 insertions(+) + +diff --git a/include/pydisk.h b/include/pydisk.h +index c0bf92e..a2bcc4f 100644 +--- a/include/pydisk.h ++++ b/include/pydisk.h +@@ -152,6 +152,7 @@ PyObject *py_ped_disk_get_partition(PyObject *, PyObject *); + PyObject *py_ped_disk_get_partition_by_sector(PyObject *, PyObject *); + PyObject *py_ped_disk_extended_partition(PyObject *, PyObject *); + PyObject *py_ped_disk_new_fresh(PyObject *, PyObject *); ++PyObject *py_ped_disk_new(PyObject *, PyObject *); + + #endif /* PYDISK_H_INCLUDED */ + +diff --git a/src/_pedmodule.c b/src/_pedmodule.c +index add0e8c..efdf831 100644 +--- a/src/_pedmodule.c ++++ b/src/_pedmodule.c +@@ -162,6 +162,11 @@ PyDoc_STRVAR(disk_new_fresh_doc, + "will have to use the commit_to_dev() method to write the new label to\n" + "the disk."); + ++PyDoc_STRVAR(disk_new_doc, ++"disk_new(Device) -> Disk\n\n" ++"Given the Device, create a new Disk object. And probe, read the details of\n" ++"the disk."); ++ + PyDoc_STRVAR(disk_flag_get_name_doc, + "disk_flag_get_name(integer) -> string\n\n" + "Return a name for a disk flag constant. If an invalid flag is provided,\n" +@@ -252,6 +257,8 @@ static struct PyMethodDef PyPedModuleMethods[] = { + METH_VARARGS, partition_flag_next_doc}, + {"disk_new_fresh", (PyCFunction) py_ped_disk_new_fresh, + METH_VARARGS, disk_new_fresh_doc}, ++ {"disk_new", (PyCFunction) py_ped_disk_new, ++ METH_VARARGS, disk_new_doc}, + {"disk_flag_get_name", (PyCFunction) py_ped_disk_flag_get_name, + METH_VARARGS, disk_flag_get_name_doc}, + {"disk_flag_get_by_name", (PyCFunction) py_ped_disk_flag_get_by_name, +diff --git a/src/parted/__init__.py b/src/parted/__init__.py +index 01f9575..0eb23d2 100644 +--- a/src/parted/__init__.py ++++ b/src/parted/__init__.py +@@ -418,6 +418,15 @@ def freshDisk(device, ty): + return Disk(PedDisk=peddisk) + + @localeC ++def newDisk(device): ++ """Return a Disk object for this Device. Read the partition table off ++ a device (if one is found).""" ++ from _ped import disk_new ++ ++ peddisk = disk_new(device.getPedDevice()) ++ return Disk(PedDisk=peddisk) ++ ++@localeC + def version(): + """Return a dict containing the pyparted and libparted versions.""" + from _ped import libparted_version +diff --git a/src/pydisk.c b/src/pydisk.c +index f58eeef..4e70f55 100644 +--- a/src/pydisk.c ++++ b/src/pydisk.c +@@ -2004,5 +2004,37 @@ PyObject *py_ped_disk_new_fresh(PyObject *s, PyObject *args) { + return (PyObject *) ret; + } + ++PyObject *py_ped_disk_new(PyObject *s, PyObject *args) { ++ _ped_Device *in_device = NULL; ++ PedDevice *device = NULL; ++ PedDisk *disk = NULL; ++ _ped_Disk *ret = NULL; ++ ++ if (!PyArg_ParseTuple(args, "O!", &_ped_Device_Type_obj, &in_device)) { ++ return NULL; ++ } ++ ++ if ((device = _ped_Device2PedDevice((PyObject *) in_device)) == NULL) { ++ return NULL; ++ } ++ ++ if ((disk = ped_disk_new(device)) == NULL) { ++ if (partedExnRaised) { ++ partedExnRaised = 0; ++ ++ if (!PyErr_ExceptionMatches(PartedException) && ++ !PyErr_ExceptionMatches(PyExc_NotImplementedError)) ++ PyErr_SetString(DiskException, partedExnMessage); ++ } else { ++ PyErr_Format(DiskException, "Could not create new disk label on %s", disk->dev->path); ++ } ++ ++ return NULL; ++ } ++ ++ ret = PedDisk2_ped_Disk(disk); ++ return (PyObject *) ret; ++} ++ + /* vim:tw=78:ts=4:et:sw=4 + */ +-- +1.8.1.2 + diff --git a/pyparted.spec b/pyparted.spec index c5f60d4..7b16fc6 100644 --- a/pyparted.spec +++ b/pyparted.spec @@ -1,12 +1,16 @@ Summary: Python module for GNU parted Name: pyparted -Version: 3.10 -Release: 2%{?dist} +Epoch: 1 +Version: 3.9 +Release: 3%{?dist} License: GPLv2+ Group: System Environment/Libraries URL: http://fedorahosted.org/pyparted Source0: http://fedorahosted.org/releases/p/y/%{name}/%{name}-%{version}.tar.gz +Patch1: 0001-Do-not-traceback-when-calling-setlocale-875354.patch +Patch2: 0002-Convert-Constraint-to-__ped.Constraint-in-partition..patch +Patch3: 0003-Subject-PATCH-pyparted-export-ped_disk_new-functiona.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n) BuildRequires: python-devel @@ -19,6 +23,9 @@ partition tables. %prep %setup -q +%patch1 -p 1 +%patch2 -p 1 +%patch3 -p 1 %build make %{?_smp_mflags} @@ -33,11 +40,16 @@ rm -rf %{buildroot} %files %defattr(-,root,root,-) %doc AUTHORS BUGS COPYING ChangeLog NEWS README TODO -%{python_sitearch}/_ped.so +%{python_sitearch}/_pedmodule.so %{python_sitearch}/parted %{python_sitearch}/%{name}-%{version}-*.egg-info %changelog +* Wed Jul 08 2013 David Cantrell - 3.9-3 +- Revert to pyparted-3.9 plus critical patches due to issues with the 3.10 + release which are actively being worked on. The 3.10 release does not + work with the installer right now. + * Thu May 23 2013 David Cantrell - 3.10-2 - Fix build errors. diff --git a/sources b/sources index c63267a..35c66c2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -d494440b34bc9ea0afea45c4a4ac3274 pyparted-3.10.tar.gz +f16c7ef7f5fa4a43fcb2a4654b487e39 pyparted-3.9.tar.gz