Hello community,
here is the log from the commit of package treeline for openSUSE:Factory checked in at 2016-02-25 22:05:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/treeline (Old)
and /work/SRC/openSUSE:Factory/.treeline.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "treeline"
Changes:
--------
--- /work/SRC/openSUSE:Factory/treeline/treeline.changes 2015-04-10 10:20:36.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.treeline.new/treeline.changes 2016-02-26 00:46:22.000000000 +0100
@@ -1,0 +2,31 @@
+Tue Feb 16 12:07:09 UTC 2016 - mkravec(a)suse.com
+
+- Update to version 2.0.2
+ * Bug Fixes:
+ - Fixed a major regression in 2.0.1 that broke data editors for
+ most specialized field types (number, math, boolean, choice, etc.)
+ - Reduce the amount of work that a single undo command removes
+ from editors in the data edit view.
+ - Fixed a bug that prevented setting the unique ID reference
+ field on a newly created data type.
+ - Preserve hard newlines in text fields when converting TreeLine
+ 1.4.x files to this version.
+ - Fix problems preserving expand/collapse node states when
+ indenting and unindenting nodes.
+ * Updates:
+ - Added methods to the plugin interface that allow general
+ program options to be queried and changed.
+ - Improve text table import error messages by including the line
+ number where the problem is found.
+ - Modified the Treepad file import to use SpacedText fields to more
+ closely match Treepad formatting.
+ - An optional plugin was written that can export files to the
+ Treepad text file format.
+ - The TreeLine icon was replaced with a new one. Thanks to
+ David Reimer for contributing the artwork.
+ - The German and Portuguese GUI translations were updated.
+ - Updated the long text sample file to include the SpacedText field
+ type, and added a conditional equation to the math sample file.
+ - Updated the Math Field section of the documentation.
+
+-------------------------------------------------------------------
Old:
----
treeline-1.9.7.tar.gz
New:
----
treeline-2.0.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ treeline.spec ++++++
--- /var/tmp/diff_new_pack.diyO4p/_old 2016-02-26 00:46:23.000000000 +0100
+++ /var/tmp/diff_new_pack.diyO4p/_new 2016-02-26 00:46:23.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package treeline
#
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,24 +17,24 @@
Name: treeline
+Version: 2.0.2
+Release: 0
Summary: Versatile Tree-Style Outliner for Defining Custom Data Schemas
License: GPL-2.0+
Group: Productivity/Office/Other
-Version: 1.9.7
-Release: 0
Url: http://treeline.bellz.org
-BuildRequires: perl
-BuildRequires: python3-devel
-BuildRequires: update-desktop-files
-BuildRequires: fdupes
-Requires: python3-qt4
Source0: http://sourceforge.net/projects/treeline/files/%{version}/treeline-%{versio…
-Source1: %name.desktop
-Source2: x-%name.desktop
-Source3: x-%name-gz.desktop
+Source1: %{name}.desktop
+Source2: x-%{name}.desktop
+Source3: x-%{name}-gz.desktop
Source4: x-treepad.desktop
Source5: treeline.png
Source99: treeline-rpmlintrc
+BuildRequires: fdupes
+BuildRequires: perl
+BuildRequires: python3-devel
+BuildRequires: update-desktop-files
+Requires: python3-qt4
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
@@ -58,16 +58,16 @@
toolkit, which makes it very portable.
%prep
-%setup -n TreeLine
+%setup -q -n TreeLine
for i in source/*.py; do
- sed -i "s|#!/usr/bin/env python|#!/usr/bin/python|g" "$i"
+ sed -i "s|#!%{_bindir}/env python|#!%{_bindir}/python|g" "$i"
done
find source/ -type f -name '*.py' | while read f; do
case $f in
*/treeline.py) continue;;
esac
- %__perl -i -n -e 'print unless m,^#!, and 1..1' "$f"
+ perl -i -n -e 'print unless m,^#!, and 1..1' "$f"
done
%build
@@ -76,18 +76,20 @@
python3 install.py -x \
-p "%{_prefix}" \
-d "%{_docdir}/%{name}" \
- -b "%{buildroot}"
+ -b %{buildroot}
-python3 -c "import compileall; compileall.compile_dir('%{buildroot}%{_prefix}/lib/treeline',2,ddir='%{_prefix}/lib/treeline')"
+pushd %{buildroot}%{python_sitearch}
+python3 -c "import compileall; compileall.compile_dir('%{buildroot}%{_libexecdir}/treeline',2,ddir='%{_libexecdir}/treeline')"
+popd
-%__install -d "%{buildroot}%{_datadir}/mimelnk/application"
-%__install -m0644 \
+install -d "%{buildroot}%{_datadir}/mimelnk/application"
+install -m0644 \
"%{SOURCE2}" \
"%{SOURCE3}" \
"%{SOURCE4}" \
"%{buildroot}%{_datadir}/mimelnk/application/"
-%__install -D -m0644 "%{SOURCE5}" "%{buildroot}%{_datadir}/pixmaps/treeline.png"
+install -D -m0644 "%{SOURCE5}" "%{buildroot}%{_datadir}/pixmaps/treeline.png"
%suse_update_desktop_file -i treeline Office ProjectManagement
++++++ treeline-1.9.7.tar.gz -> treeline-2.0.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/doc/documentation.trl new/TreeLine/doc/documentation.trl
--- old/TreeLine/doc/documentation.trl 2015-03-28 00:09:23.000000000 +0100
+++ new/TreeLine/doc/documentation.trl 2015-10-03 20:20:31.000000000 +0200
@@ -1,11 +1,11 @@
<?xml version='1.0' encoding='utf-8'?>
-<HEADINGS formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" tlversion="1.9.7" uniqueid="treeline_documentation">
+<HEADINGS formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" tlversion="2.0.2" uniqueid="treeline_documentation">
<Name idref="y" type="Text">TreeLine Documentation</Name>
<HEADINGS item="y" uniqueid="introduction_1">
<Name>Introduction</Name>
<PARAGRAPH icon="bullet_2" item="y" line0="{*Name*}" line1="{*Text*}" uniqueid="version">
<Name idref="y" type="Text">Version</Name>
-<Text lines="8" type="Text">This document covers TreeLine, Version 1.9.7, released March 29, 2015 by Doug Bell.</Text>
+<Text lines="8" type="Text">This document covers TreeLine, Version 2.0.2, released October 3, 2015 by Doug Bell.</Text>
</PARAGRAPH>
<PARAGRAPH item="y" uniqueid="why_treeline">
<Name>Why TreeLine?</Name>
@@ -192,6 +192,14 @@
<Name>Fonts</Name>
<Text>Fonts used for editing and output can be customized.</Text>
</BULLETS>
+<BULLETS item="y" uniqueid="languages">
+<Name>Languages</Name>
+<Text>The user interface is available in English, German and Portuguese.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="plugins">
+<Name>Plugins</Name>
+<Text>Plugin extension modules can be loaded to further customize TreeLine.</Text>
+</BULLETS>
</BULLET_HEADING>
</HEADINGS>
<HEADINGS item="y" uniqueid="system_requirements">
@@ -477,9 +485,9 @@
<br />
In equations, date fields are represented by the number of days since January 1, 1970, and time fields are the number of seconds since midnight. So date fields can be subtracted to give the number of days elapsed, and numbers of days can be added to or subtracted from dates to result in new dates. Time fields can be subtracted to give the number of seconds elapsed, and numbers of seconds can be added to or subtracted from times to result in new times.<br />
<br />
-The "if" comparison operator can be used to make the result depend on the value of another field. The expression is written as "&lt;true value&gt; if &lt;condition&gt; else &lt;false value&gt;".<br />
+The "if" comparison operator can be used to make the result depend on the value of another field. The expression is written as "true_value if condition else false_value". Of course, the "true_value", "condition" and "false_value" strings must be replaced with valid fields or expressions. If this operator is inserted from the operator list (under comparisons), it will include parenthesis as placeholders. These parenthesis are optional in the equations.<br />
<br />
-The "join" text function is used to combine text from several other fields (or from child nodes). The first argument to the function is a separator string that is placed between each piece of text. The remaining argument(s) are the text to be joined.<br />
+The "join" text function is used to combine text from several other fields (or from child nodes). The first argument to the function is a separator string that is placed between each piece of text. The remaining argument(s) are the text to be joined.<br />
<br />
By default, math fields are shown in the data edit view, but they are read-only. To hide them, uncheck the "Show math fields in the Data Edit View" box under "Tools &gt; General Options &gt; Features Available".<br />
<br />
@@ -750,6 +758,109 @@
</HEADINGS>
<HEADINGS item="y" uniqueid="revision_history">
<Name>Revision History</Name>
+<HEADINGS item="y" uniqueid="october_3_2015_-_release_202_new_stable">
+<Name>October 3, 2015 - Release 2.0.2 (new stable release)</Name>
+<BULLET_HEADING item="y" uniqueid="bug_fixes_8">
+<Name>Bug Fixes</Name>
+<BULLETS item="y" uniqueid="data_edit_regression">
+<Name>Data edit regression</Name>
+<Text>Fixed a major regression in 2.0.1 that broke data editors for most specialized field types (number, math, boolean, choice, etc.)</Text>
+</BULLETS>
+</BULLET_HEADING>
+<BULLET_HEADING item="y" uniqueid="compatibility_notes_2">
+<Name>Compatibility Notes</Name>
+<BULLETS item="y" uniqueid="file_format_2">
+<Name>File format</Name>
+<Text>There are some file format changes between TreeLine 1.4.x and this version of TreeLine.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_conversion_2">
+<Name>File conversion</Name>
+<Text>Older files opened in this version are automatically converted when saved.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_compatibility_2">
+<Name>File compatibility</Name>
+<Text>Files saved in this version may not be fully compatible with TreeLine 1.4.x.</Text>
+</BULLETS>
+</BULLET_HEADING>
+</HEADINGS>
+<HEADINGS item="y" uniqueid="september_26_2015_-_release_201_new_stable">
+<Name>September 26, 2015 - Release 2.0.1 (new stable release)</Name>
+<BULLET_HEADING item="y" uniqueid="updates_9">
+<Name>Updates</Name>
+<BULLETS item="y" uniqueid="plugin_options">
+<Name>Plugin options</Name>
+<Text>Added methods to the plugin interface that allow general program options to be queried and changed.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="table_import_errors">
+<Name>Table import errors</Name>
+<Text>Improve text table import error messages by including the line number where the problem is found.</Text>
+</BULLETS>
+</BULLET_HEADING>
+<BULLET_HEADING item="y" uniqueid="bug_fixes_7">
+<Name>Bug Fixes</Name>
+<BULLETS item="y" uniqueid="data_edit_undo">
+<Name>Data edit undo</Name>
+<Text>Reduce the amount of work that a single undo command removes from editors in the data edit view.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="configuration_changes">
+<Name>Configuration changes</Name>
+<Text>Fixed a bug that prevented setting the unique ID reference field on a newly created data type.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="legacy_newline_convert">
+<Name>Legacy newline convert</Name>
+<Text>Preserve hard newlines in text fields when converting TreeLine 1.4.x files to this version.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="indent_expand_status">
+<Name>Indent expand status</Name>
+<Text>Fix problems preserving expand/collapse node states when indenting and unindenting nodes.</Text>
+</BULLETS>
+</BULLET_HEADING>
+</HEADINGS>
+<HEADINGS item="y" uniqueid="may_17_2015_-_release_200_new_stable_release">
+<Name>May 17, 2015 - Release 2.0.0 (new stable release)</Name>
+<BULLET_HEADING item="y" uniqueid="updates_8">
+<Name>Updates</Name>
+<BULLETS item="y" uniqueid="treepad_import_update">
+<Name>Treepad import update</Name>
+<Text>Modified the Treepad file import to use SpacedText fields to more closely match Treepad formatting.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="treepad_export">
+<Name>Treepad export</Name>
+<Text>An optional plugin was written that can export files to the Treepad text file format.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="new_icon">
+<Name>New icon</Name>
+<Text>The TreeLine icon was replaced with a new one. Thanks to David Reimer for contributing the artwork.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="translation_updates">
+<Name>Translation updates</Name>
+<Text>The German and Portuguese GUI translations were updated.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="sample_file_updates">
+<Name>Sample file updates</Name>
+<Text>Updated the long text sample file to include the SpacedText field type, and added a conditional equation to the math sample file.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="documentation_update">
+<Name>Documentation update</Name>
+<Text>Updated the Math Field section of the documentation.</Text>
+</BULLETS>
+</BULLET_HEADING>
+<BULLET_HEADING item="y" uniqueid="compatibility_notes">
+<Name>Compatibility Notes</Name>
+<BULLETS item="y" uniqueid="file_format">
+<Name>File format</Name>
+<Text>There are some file format changes between TreeLine 1.4.x and this version of TreeLine.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_conversion">
+<Name>File conversion</Name>
+<Text>Older files opened in this version are automatically converted when saved.</Text>
+</BULLETS>
+<BULLETS item="y" uniqueid="file_compatibility_1">
+<Name>File compatibility</Name>
+<Text>Files saved in this version may not be fully compatible with TreeLine 1.4.x.</Text>
+</BULLETS>
+</BULLET_HEADING>
+</HEADINGS>
<HEADINGS item="y" uniqueid="march_29_2015_-_release_197_unstable">
<Name>March 29, 2015 - Release 1.9.7 (unstable development snapshot)</Name>
<BULLET_HEADING item="y" uniqueid="new_features_6">
@@ -789,21 +900,6 @@
<Text>Fixed a focus problem that made the pull-downs in choice and boolean field editors unusable on Linux.</Text>
</BULLETS>
</BULLET_HEADING>
-<BULLET_HEADING item="y" uniqueid="compatibility_notes_1">
-<Name>Compatibility Notes</Name>
-<BULLETS item="y" uniqueid="file_format_1">
-<Name>File format</Name>
-<Text>There are some file format changes between TreeLine 1.4.x and this version of TreeLine.</Text>
-</BULLETS>
-<BULLETS item="y" uniqueid="file_conversion_1">
-<Name>File conversion</Name>
-<Text>Older files opened in this version are automatically converted when saved.</Text>
-</BULLETS>
-<BULLETS item="y" uniqueid="file_compatibility">
-<Name>File compatibility</Name>
-<Text>Files saved in this version may not be fully compatible with TreeLine 1.4.x.</Text>
-</BULLETS>
-</BULLET_HEADING>
</HEADINGS>
<HEADINGS item="y" uniqueid="march_10_2015_-_release_196_unstable">
<Name>March 10, 2015 - Release 1.9.6 (unstable development snapshot)</Name>
Files old/TreeLine/icons/toolbar/32x32/helpabout.png and new/TreeLine/icons/toolbar/32x32/helpabout.png differ
Files old/TreeLine/icons/toolbar/32x32/treeline.png and new/TreeLine/icons/toolbar/32x32/treeline.png differ
Files old/TreeLine/icons/toolbar/32x32/treelogo.png and new/TreeLine/icons/toolbar/32x32/treelogo.png differ
Files old/TreeLine/icons/tree/treelogo.png and new/TreeLine/icons/tree/treelogo.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/samples/110en_sample_basic_longtext.trl new/TreeLine/samples/110en_sample_basic_longtext.trl
--- old/TreeLine/samples/110en_sample_basic_longtext.trl 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/samples/110en_sample_basic_longtext.trl 2015-05-10 20:31:10.000000000 +0200
@@ -1,21 +1,28 @@
<?xml version='1.0' encoding='utf-8'?>
-<ROOT childtype="PLAIN_TEXT" item="y" line0="{*Name*}" line1="{*Name*}" tlversion="1.9.0" uniqueid="Text_Fields">
+<ROOT item="y" line0="{*Name*}" line1="{*Name*}" tlversion="1.9.7" uniqueid="Text_Fields">
<Name idref="y" type="Text">Text Fields</Name>
<REGULAR_TEXT formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" line2="{*Text*}" uniqueid="Similar_to_Treepad">
<Name idref="y" type="Text">Similar to Treepad</Name>
-<Text lines="12" type="Text">This file provides a single long text field for each node.
-This is similar to how the Treepad program on windows is usually used.</Text>
+<Text lines="12" type="Text">This file provides a single long text field for each node. This is similar to how the Treepad program on windows is usually used.</Text>
</REGULAR_TEXT>
<REGULAR_TEXT item="y" uniqueid="Regular_text_field">
<Name>Regular text field</Name>
-<Text>The most commonly used field type is regular text. Formatting such as <b>bold</b>, <i>itallics</i>, <span style="font-size:x-large">font </span><span style="font-size:large">sizes</span> and <span style="color:#aa0000">font colors</span> can be used from the Edit menu.</Text>
+<Text>The most commonly used field type is regular text. Formatting such as <b>bold</b>, <i>italics</i>, font sizes and <span style="color:#aa0000">font colors</span> can be used from the Edit menu.<br />
+<br />
+It preserves carriage return spaces, but not multiple spaces within a line.</Text>
</REGULAR_TEXT>
-<HTML_TEXT formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" line2="{*Text*}" uniqueid="HTML_text_field">
+<HTML_TEXT formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>" line2="{*Text*}" uniqueid="html_text_field">
<Name idref="y" type="Text">HTML text field</Name>
-<Text lines="12" type="HtmlText">An HTML field allows tags such as <i>itallics</i> to be added manually.
+<Text lines="12" type="HtmlText">An HTML field allows tags such as <i>italics</i> to be added manually.
It does not preserve white space.
Characters like &lt;, &gt;, and &amp; must be escaped.</Text>
</HTML_TEXT>
+<SPACED_TEXT formathtml="y" item="y" line0="{*Name*}" line1="<b>{*Name*}</b>{*Text*}" uniqueid="spaced_text_field">
+<Name idref="y" type="Text">Spaced text field</Name>
+<Text lines="12" type="SpacedText">A spaced text field preserves all white space.
+
+It does not allow character formatting.</Text>
+</SPACED_TEXT>
</ROOT>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/samples/330en_sample_math_fields.trl new/TreeLine/samples/330en_sample_math_fields.trl
--- old/TreeLine/samples/330en_sample_math_fields.trl 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/samples/330en_sample_math_fields.trl 2015-05-10 20:32:44.000000000 +0200
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<TOP_ASSEMBLY childtype="ASSEMBLY" item="y" line0="{*PartNumber*} {*Name*}" line1="Part {*PartNumber*}" line2="{*Name*}" line3="Assembly Level: {*Level*}" line4="Cost: {*TotalCost*}" tlversion="1.9.5" uniqueid="widget_top_assembly">
+<TOP_ASSEMBLY childtype="ASSEMBLY" item="y" line0="{*PartNumber*} {*Name*}" line1="Part {*PartNumber*}" line2="{*Name*}" line3="Assembly Level: {*Level*}" line4="Cost: {*TotalCost*}" tlversion="1.9.8" uniqueid="widget_top_assembly">
<PartNumber type="Text">123456</PartNumber>
<Name idref="y" type="Text">Widget Top Assembly</Name>
<Level format="#" type="Number">1</Level>
@@ -13,12 +13,13 @@
<Cost eqn="sum({*&Cost*}) + {*LaborCost*}" format="0.00" prefix="$" type="Math">10.040000000000001</Cost>
<TotalCost eqn="{**TotalCost*}" format="0.00" prefix="$" type="Math">23.89</TotalCost>
<PercentCost eqn="{*Cost*} / {*TotalCost*} * 100" format="0" suffix="%" type="Math">42.02595228128925</PercentCost>
-<PART item="y" line0="{*PartNumber*} {*Name*}" line1="Part {*PartNumber*}" line2="{*Name*}" line3="Assembly Level: {*Level*}" line4="Cost: {*Cost*}" line5="Percent Cost: {*PercentCost*}" uniqueid="lever">
+<PART item="y" line0="{*PartNumber*} {*Name*}" line1="Part {*PartNumber*}" line2="{*Name*}" line3="Assembly Level: {*Level*}" line4="Cost: {*Cost*}" line5="Percent Cost: {*PercentCost*}" line6="Cost Level: {*CostLevel*}" uniqueid="lever">
<PartNumber type="Text">987654</PartNumber>
<Name idref="y" type="Text">Lever</Name>
<Level eqn="{**Level*} + 1" format="#" type="Math">3</Level>
<Cost format="0.00" prefix="$" type="Number">5.4</Cost>
<PercentCost eqn="{*Cost*} / {**TotalCost*} * 100" format="0" suffix="%" type="Math">22.60359983256593</PercentCost>
+<CostLevel eqn="('Low') if ({*PercentCost*} < 20) else ('High')" resulttype="text" type="Math">High</CostLevel>
</PART>
<PART item="y" uniqueid="lever_bolt">
<PartNumber>998877</PartNumber>
@@ -26,6 +27,7 @@
<Level>3</Level>
<Cost>2.89</Cost>
<PercentCost>12.097111762243616</PercentCost>
+<CostLevel>Low</CostLevel>
</PART>
</ASSEMBLY>
<ASSEMBLY item="y" uniqueid="bracket_assembly">
@@ -42,6 +44,7 @@
<Level>3</Level>
<Cost>6.2</Cost>
<PercentCost>25.952281289242364</PercentCost>
+<CostLevel>High</CostLevel>
</PART>
<PART item="y" uniqueid="bracket_pin">
<PartNumber>665544</PartNumber>
@@ -49,6 +52,7 @@
<Level>3</Level>
<Cost>1.9</Cost>
<PercentCost>7.95311845960653</PercentCost>
+<CostLevel>Low</CostLevel>
</PART>
</ASSEMBLY>
</TOP_ASSEMBLY>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/dataeditview.py new/TreeLine/source/dataeditview.py
--- old/TreeLine/source/dataeditview.py 2015-03-21 19:07:20.000000000 +0100
+++ new/TreeLine/source/dataeditview.py 2015-10-03 20:20:31.000000000 +0200
@@ -80,6 +80,7 @@
super().__init__(parent)
self.editorClickPos = None
self.lastEditor = None
+ self.prevNumLines = -1
def paint(self, painter, styleOption, modelIndex):
"""Paint the Data Edit Cells with support for rich text.
@@ -166,6 +167,14 @@
if hasattr(editor, 'setLinkFromNode'):
self.parent().internalLinkSelected.connect(editor.
setLinkFromNode)
+ # viewport filter required to catch mouse events for undo limits
+ try:
+ editor.viewport().installEventFilter(self)
+ except AttributeError:
+ try:
+ editor.lineEdit().installEventFilter(self)
+ except AttributeError:
+ pass
self.lastEditor = editor
return editor
return super().createEditor(parent, styleOption, modelIndex)
@@ -208,10 +217,14 @@
cell = self.parent().item(modelIndex.row(), modelIndex.column())
if isinstance(cell, DataEditCell):
if editor.modified:
- undo.DataUndo(cell.node.modelRef.undoList, cell.node, True,
- cell.field.name)
+ newText = editor.contents()
+ numLines = newText.count('\n')
+ skipUndoAvail = numLines == self.prevNumLines
+ self.prevNumLines = numLines
+ undo.DataUndo(cell.node.modelRef.undoList, cell.node,
+ skipUndoAvail, cell.field.name)
try:
- cell.node.setData(cell.field, editor.contents())
+ cell.node.setData(cell.field, newText)
except ValueError:
editor.setErrorFlag()
self.parent().nodeModified.emit(cell.node)
@@ -281,17 +294,20 @@
key = QtGui.QKeySequence(event.modifiers() | event.key())
view.shortcutEntered.emit(key)
return True
- if (event.type() == QtCore.QEvent.FocusOut and
- event.reason() in (QtCore.Qt.MouseFocusReason,
- QtCore.Qt.TabFocusReason,
- QtCore.Qt.BacktabFocusReason) and
- (not hasattr(editor, 'calendar') or
- not editor.calendar or not editor.calendar.isVisible()) and
- (not hasattr(editor, 'intLinkDialog') or
- not editor.intLinkDialog or
- not editor.intLinkDialog.isVisible())):
- self.parent().setCurrentCell(-1, -1)
- return True
+ if event.type() == QtCore.QEvent.MouseButtonPress:
+ self.prevNumLines = -1 # reset undo avail for mose cursor changes
+ if event.type() == QtCore.QEvent.FocusOut:
+ self.prevNumLines = -1 # reset undo avail for any focus loss
+ if (event.reason() in (QtCore.Qt.MouseFocusReason,
+ QtCore.Qt.TabFocusReason,
+ QtCore.Qt.BacktabFocusReason) and
+ (not hasattr(editor, 'calendar') or
+ not editor.calendar or not editor.calendar.isVisible()) and
+ (not hasattr(editor, 'intLinkDialog') or
+ not editor.intLinkDialog or
+ not editor.intLinkDialog.isVisible())):
+ self.parent().setCurrentCell(-1, -1)
+ return True
return super().eventFilter(editor, event)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/imports.py new/TreeLine/source/imports.py
--- old/TreeLine/source/imports.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/imports.py 2015-09-23 03:39:06.000000000 +0200
@@ -67,6 +67,7 @@
filePath -- the file to import from if give, otherwise prompt user
"""
self.filePath = filePath
+ self.errorMessage = ''
def interactiveImport(self, addWarning=False):
"""Prompt the user for import type & proceed with import.
@@ -98,6 +99,7 @@
defaultFilePath, filters)
if not self.filePath:
return None
+ self.errorMessage = ''
try:
QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
model = getattr(self, method)()
@@ -110,10 +112,12 @@
format(self.filePath))
return None
if not model:
+ message = _('Error - improper format in {0}').format(self.filePath)
+ if self.errorMessage:
+ message = '{0}\n{1}'.format(message, self.errorMessage)
+ self.errorMessage = ''
QtGui.QMessageBox.warning(QtGui.QApplication.activeWindow(),
- 'TreeLine',
- _('Error - improper format in {0}').
- format(self.filePath))
+ 'TreeLine', message)
return model
def importTabbedText(self):
@@ -156,7 +160,9 @@
headings = [self.correctFieldName(name) for name in
f.readline().split('\t')]
tableFormat.addFieldList(headings, True, True)
+ lineNum = 1
for line in f:
+ lineNum += 1
if line.strip():
entries = line.split('\t')
node = treenode.TreeNode(model.root, typeName, model)
@@ -167,6 +173,8 @@
except IndexError:
pass # fewer entries than headings is OK
if entries:
+ self.errorMessage = (_('Too many entries on Line {0}').
+ format(lineNum))
return None # abort if too few headings
node.setUniqueId(True)
return model
@@ -232,6 +240,7 @@
model = treemodel.TreeModel(True)
tpFormat = model.formats[treeformats.defaultTypeName]
tpFormat.addFieldList([textFieldName], False, True)
+ tpFormat.fieldDict[textFieldName].changeType('SpacedText')
with open(self.filePath, 'r',
encoding=globalref.localTextEncoding) as f:
textList = f.read().split('<end node> 5P9i0s8y19Z')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/plugininterface.py new/TreeLine/source/plugininterface.py
--- old/TreeLine/source/plugininterface.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/plugininterface.py 2015-09-18 02:45:24.000000000 +0200
@@ -1196,6 +1196,35 @@
#**************************************************************************
+ # General Options:
+ #**************************************************************************
+
+ def getOptionValue(self, name):
+ """Return the value of a general option item.
+
+ See the setGenOptionDefaults function in the optiondefaults.py file
+ for available name values.
+ Raises a KeyError if the name is incorrect.
+ Arguments:
+ name -- the key name for the option
+ """
+ return globalref.genOptions.getValue(name)
+
+ def changeOptionValue(self, name, value):
+ """Set the name of an existing option to the given value.
+
+ Returns True if changed, False if value is the same or not permitted.
+ See the setGenOptionDefaults function in the optiondefaults.py file
+ for available name values.
+ Raises a KeyError if the name is incorrect.
+ Arguments:
+ name -- the key name for the option
+ value -- a value or a string defining the value
+ """
+ return globalref.genOptions.changeValue(name, value)
+
+
+ #**************************************************************************
# Internal methods (not for plugin use):
#**************************************************************************
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/setup.py new/TreeLine/source/setup.py
--- old/TreeLine/source/setup.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/setup.py 2015-05-17 21:54:20.000000000 +0200
@@ -38,5 +38,5 @@
'excludes': ['*.pyc'],
'icon': '../win/treeline.ico',
'include_msvcr': True,
- 'build_exe': '../../TreeLine-1.9'}},
+ 'build_exe': '../../TreeLine-2.0'}},
executables = [Executable('treeline.py', base=base)])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treeline.py new/TreeLine/source/treeline.py
--- old/TreeLine/source/treeline.py 2015-03-21 17:31:08.000000000 +0100
+++ new/TreeLine/source/treeline.py 2015-10-03 20:20:31.000000000 +0200
@@ -13,7 +13,7 @@
#******************************************************************************
__progname__ = 'TreeLine'
-__version__ = '1.9.7'
+__version__ = '2.0.2'
__author__ = 'Doug Bell'
docPath = None # modified by install script if required
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treemaincontrol.py new/TreeLine/source/treemaincontrol.py
--- old/TreeLine/source/treemaincontrol.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/treemaincontrol.py 2015-05-15 03:59:30.000000000 +0200
@@ -124,7 +124,7 @@
for path in iconPathList],
['', '32x32', '16x16'])
globalref.toolIcons.loadAllIcons()
- windowIcon = globalref.toolIcons.getIcon('treeline')
+ windowIcon = globalref.toolIcons.getIcon('treelogo')
if windowIcon:
QtGui.QApplication.setWindowIcon(windowIcon)
globalref.treeIcons = icondict.IconDict(iconPathList, ['', 'tree'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treenode.py new/TreeLine/source/treenode.py
--- old/TreeLine/source/treenode.py 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/source/treenode.py 2015-09-20 03:11:26.000000000 +0200
@@ -224,6 +224,38 @@
"""
globalref.mainControl.currentTreeView().collapse(self.index())
+ def saveExpandViewStatus(self, statusDict=None):
+ """Recursively save the expand/collapse status of nodes in the branch.
+
+ Saves by unique ID, returns dictionary.
+ Arguments:
+ statusDict -- a dictionary to save in
+ """
+ if not statusDict:
+ statusDict = {}
+ statusDict[self.uniqueId] = self.isExpanded()
+ for node in self.childList:
+ statusDict = node.saveExpandViewStatus(statusDict)
+ return statusDict
+
+ def restoreExpandViewStatus(self, statusDict):
+ """Recursively restore expand/collapse status of nodes in the branch.
+
+ Arguments:
+ statusDict -- a dictionary with status by unique ID
+ """
+ try:
+ expanded = statusDict[self.uniqueId]
+ if expanded:
+ self.expandInView()
+ else:
+ self.collapseInView()
+ return
+ except KeyError:
+ pass
+ for node in self.childList:
+ node.restoreExpandViewStatus(statusDict)
+
def setUniqueId(self, validate=False):
"""Add this node's unique ID to the ref dict.
@@ -571,9 +603,12 @@
newParent = self.prevSibling()
if not newParent:
return
+ oldParent = self.parent
+ expandDict = oldParent.saveExpandViewStatus()
self.parent.childList.remove(self)
newParent.childList.append(self)
self.parent = newParent
+ oldParent.restoreExpandViewStatus(expandDict)
def unindent(self):
"""Make this node its parent's next sibling.
@@ -581,10 +616,12 @@
sibling = self.parent
if not sibling or not sibling.parent:
return
+ expandDict = sibling.parent.saveExpandViewStatus()
self.parent.childList.remove(self)
pos = sibling.parent.childList.index(sibling) + 1
sibling.parent.childList.insert(pos, self)
self.parent = sibling.parent
+ sibling.parent.restoreExpandViewStatus(expandDict)
def wordSearch(self, wordList, titleOnly=False):
"""Return True if all words in wordlist are found in this node's data.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/treeopener.py new/TreeLine/source/treeopener.py
--- old/TreeLine/source/treeopener.py 2015-02-01 21:14:57.000000000 +0100
+++ new/TreeLine/source/treeopener.py 2015-09-12 23:30:35.000000000 +0200
@@ -146,7 +146,10 @@
text = node.data.get(field.name, '')
if text:
if field.typeName == 'Text' and not field.oldHasHtml:
- node.data[field.name] = xml.sax.saxutils.escape(text)
+ text = text.strip()
+ text = xml.sax.saxutils.escape(text)
+ text = text.replace('\n', '<br />\n')
+ node.data[field.name] = text
elif (field.typeName == 'ExternalLink' and
field.oldTypeName):
dispName = node.data.get(field.oldLinkAltField, '')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/TreeLine/source/undo.py new/TreeLine/source/undo.py
--- old/TreeLine/source/undo.py 2015-03-09 00:31:57.000000000 +0100
+++ new/TreeLine/source/undo.py 2015-09-12 23:30:35.000000000 +0200
@@ -244,8 +244,12 @@
del self.treeFormats.fieldRenameDict[newName]
self.treeFormats.changedIdFieldTypes = set()
for typeObj in newTreeFormats.changedIdFieldTypes:
- self.treeFormats.changedIdFieldTypes.add(self.treeFormats[typeObj.
- name])
+ try:
+ self.treeFormats.changedIdFieldTypes.add(self.
+ treeFormats[typeObj.
+ name])
+ except KeyError: # not needed for new tree formats
+ pass
listRef.addUndoObj(self, clearRedo)
def undo(self, redoRef):
Files old/TreeLine/translations/treeline_de.qm and new/TreeLine/translations/treeline_de.qm differ
Files old/TreeLine/translations/treeline_pt.qm and new/TreeLine/translations/treeline_pt.qm differ
Hello community,
here is the log from the commit of package python-requests for openSUSE:Factory checked in at 2016-02-25 22:08:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-requests (Old)
and /work/SRC/openSUSE:Factory/.python-requests.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-requests"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-requests/python-requests.changes 2016-01-01 19:50:21.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-requests.new/python-requests.changes 2016-02-26 00:42:41.000000000 +0100
@@ -1,0 +2,40 @@
+Wed Feb 17 14:47:12 UTC 2016 - sor.alexei(a)meowr.ru
+
+- Update to 2.9.1 (changes since 2.8.1):
+ * The verify keyword argument now supports being passed a path to
+ a directory of CA certificates, not just a single-file bundle.
+ * Warnings are now emitted when sending files opened in text mode.
+ * Added the 511 Network Authentication Required status code to the
+ status code registry.
+ * For file-like objects that are not seeked to the very beginning,
+ we now send the content length for the number of bytes we will
+ actually read, rather than the total size of the file, allowing
+ partial file uploads.
+ * When uploading file-like objects, if they are empty or have no
+ obvious content length we set Transfer-Encoding: chunked rather
+ than Content-Length: 0.
+ * We correctly receive the response in buffered mode when
+ uploading chunked bodies.
+ * We now handle being passed a query string as a bytestring on
+ Python 3, by decoding it as UTF-8.
+ * Sessions are now closed in all cases (exceptional and not) when
+ using the functional API rather than leaking and waiting for
+ the garbage collector to clean them up.
+ * Correctly handle digest auth headers with a malformed qop
+ directive that contains no token, by treating it the same as if
+ no qop directive was provided at all.
+ * Minor performance improvements when removing specific cookies
+ by name.
+ * Fix errors when calculating cookie expiration dates in certain
+ locales.
+ * Update bundled urllib3 to 1.13.1.
+- Rebase no-default-cacert.patch.
+- Modify no-default-cacert.patch: output /etc/ssl/ca-bundle.pem
+ instead of neither NULL nor /etc/ssl/certs/ as a path to cacerts
+ bundle (boo#967128).
+- Don't apply no-default-cacert.patch on SLE.
+- Require ca-certificates package (but not on SLE).
+- Tests are being improperly started and actual ones require
+ network connection, so fix and comment out.
+
+-------------------------------------------------------------------
Old:
----
requests-2.8.1.tar.gz
New:
----
requests-2.9.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-requests.spec ++++++
--- /var/tmp/diff_new_pack.Qyev6w/_old 2016-02-26 00:42:41.000000000 +0100
+++ /var/tmp/diff_new_pack.Qyev6w/_new 2016-02-26 00:42:41.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-requests
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,30 +16,36 @@
#
+%if 0%{?suse_version} < 1120
+%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
+%endif
Name: python-requests
-Version: 2.8.1
+Version: 2.9.1
Release: 0
Summary: Awesome Python HTTP Library That's Actually Usable
License: Apache-2.0
Group: Development/Languages/Python
-Url: http://python-requests.org
+Url: http://python-requests.org/
Source: http://pypi.python.org/packages/source/r/requests/requests-%{version}.tar.gz
-# PATCH-FIX-OPENSUSE no-default-cacert.patch -- completely ignore the internal CA bundle
+# PATCH-FIX-OPENSUSE no-default-cacert.patch -- Completely ignore the internal CA bundle.
Patch0: no-default-cacert.patch
BuildRequires: python
BuildRequires: python-devel
BuildRequires: python-py
BuildRequires: python-setuptools
Requires: python
-# really needed?
+# Really needed?
#Requires: python-ndg-httpsclient
Requires: python-pyOpenSSL
Requires: python-pyasn1
-%if 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%else
+%if 0%{?suse_version} >= 1120 && !(0%{?suse_version} == 1315 && !0%{?is_opensuse})
+BuildRequires: ca-certificates
+Requires: ca-certificates
+%endif
+%if 0%{?suse_version} >= 1120
BuildArch: noarch
+%else
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
%endif
%description
@@ -67,10 +73,10 @@
%prep
%setup -q -n requests-%{version}
-# For rpmlint warning: remove shebang from python library:
-sed -i '/^#!/d' ./requests/certs.py
+%if 0%{?suse_version} >= 1120 && !(0%{?suse_version} == 1315 && !0%{?is_opensuse})
%patch0 -p1
-rm ./requests/cacert.pem
+rm -f requests/cacert.pem
+%endif
%build
python setup.py build
@@ -79,8 +85,9 @@
python setup.py install \
--root=%{buildroot} --prefix=%{_prefix}
-%check
-python setup.py test
+# Tests require network access.
+# %check
+# python test_requests.py
%files
%defattr(-,root,root)
++++++ no-default-cacert.patch ++++++
--- /var/tmp/diff_new_pack.Qyev6w/_old 2016-02-26 00:42:41.000000000 +0100
+++ /var/tmp/diff_new_pack.Qyev6w/_new 2016-02-26 00:42:41.000000000 +0100
@@ -5,7 +5,7 @@
+include README.rst LICENSE NOTICE HISTORY.rst test_requests.py requirements.txt
--- a/requests/adapters.py
+++ b/requests/adapters.py
-@@ -180,9 +180,6 @@ class HTTPAdapter(BaseAdapter):
+@@ -182,9 +182,6 @@ class HTTPAdapter(BaseAdapter):
if not cert_loc:
cert_loc = DEFAULT_CA_BUNDLE_PATH
@@ -13,8 +13,8 @@
- raise Exception("Could not find a suitable SSL CA certificate bundle.")
-
conn.cert_reqs = 'CERT_REQUIRED'
- conn.ca_certs = cert_loc
- else:
+
+ if not os.path.isdir(cert_loc):
--- a/requests/certs.py
+++ b/requests/certs.py
@@ -18,8 +18,9 @@ try:
@@ -23,9 +23,9 @@
"""Return the preferred certificate bundle."""
- # vendored bundle inside Requests
- return os.path.join(os.path.dirname(__file__), 'cacert.pem')
-+ # in openSUSE we rely on openssl's default instead of
-+ # hardcoding stuff elsewhere
-+ return None
++ # in openSUSE we rely on ca-certificates instead of
++ # having an another bundle
++ return '/etc/ssl/ca-bundle.pem'
if __name__ == '__main__':
print(where())
++++++ requests-2.8.1.tar.gz -> requests-2.9.1.tar.gz ++++++
++++ 2521 lines of diff (skipped)