Commit 16e10ec7 authored by intrigeri's avatar intrigeri
Browse files

Merge branch 'stable' into bugfix/11037-icedove-spellchecker

parents 5ff03a72 74bbfdad
......@@ -89,7 +89,7 @@ hw_arch="`dpkg --print-architecture`"
if [ "$hw_arch" = i386 -o "$hw_arch" = amd64 ]; then
$RUN_LB_CONFIG \
--architecture i386 \
--linux-flavours "686" \
--linux-flavours "686-unsigned" \
${@}
# build powerpc images on powerpc64 as well, include only powerpc kernel
elif [ "$hw_arch" = powerpc -o "$hw_arch" = powerpc64 ]; then
......
......@@ -22,7 +22,7 @@ AMNESIA_ISOHYBRID_OPTS="-h 255 -s 63"
REQUIRED_SYSLINUX_UTILS_UPSTREAM_VERSION="6.03~pre20"
# Kernel version
KERNEL_VERSION='4.6.0-0.bpo.1'
KERNEL_VERSION='4.7.0-0.bpo.1'
KERNEL_SOURCE_VERSION=$(
echo "$KERNEL_VERSION" \
| perl -p -E 's{\A (\d+ [.] \d+) [.] .*}{$1}xms'
......
......@@ -6,7 +6,7 @@ set -e
. "${LB_BASE:-/usr/share/live/build}"/scripts/build.sh
# Setting static variables
DESCRIPTION="$(Echo 'renaming amd64 kernel')"
DESCRIPTION="$(Echo 'renaming kernels')"
HELP=""
USAGE="${PROGRAM}"
......@@ -14,7 +14,9 @@ USAGE="${PROGRAM}"
Read_conffiles config/all config/common config/binary
Set_defaults
Echo_message "Renaming amd64 kernel"
Echo_message "Renaming kernels"
mv binary/live/vmlinuz-*-686 binary/live/vmlinuz
mv binary/live/initrd.img-*-686 binary/live/initrd.img
mv binary/live/vmlinuz-*-amd64 binary/live/vmlinuz2
mv binary/live/initrd.img-*-amd64 binary/live/initrd2.img
......@@ -77,24 +77,24 @@ Package: linux-base
Pin: release o=Debian,n=sid
Pin-Priority: 999
Package: linux-compiler-gcc-4.9-x86
Pin: version 4.6.4-1~bpo8+1
Package: linux-compiler-gcc-*
Pin: origin deb.tails.boum.org
Pin-Priority: 999
Package: linux-compiler-gcc-4.9-x86:amd64
Pin: version 4.6.4-1~bpo8+1
Package: linux-compiler-gcc-*:amd64
Pin: origin deb.tails.boum.org
Pin-Priority: 999
Package: linux-headers-* linux-headers-*:amd64
Pin: release o=Debian,n=jessie-backports
Pin: origin deb.tails.boum.org
Pin-Priority: 999
Package: linux-image-* linux-image-*:amd64
Pin: release o=Debian,n=jessie-backports
Package: linux-image-*-unsigned linux-image-*-unsigned:amd64
Pin: origin deb.tails.boum.org
Pin-Priority: 999
Package: linux-kbuild-* linux-source-*
Pin: release o=Debian,n=jessie-backports
Pin: origin deb.tails.boum.org
Pin-Priority: 999
Package: monkeysphere
......@@ -117,6 +117,11 @@ Package: pinentry-gtk2
Pin: release o=Debian,n=jessie-backports
Pin-Priority: 999
Explanation: We need Dogtail >=0.9.1 (https://bugzilla.redhat.com/show_bug.cgi?id=972257)
Package: python-dogtail
Pin: release o=Debian,n=stretch
Pin-Priority: 999
Package: python-electrum
Pin: release o=Debian,n=stretch
Pin-Priority: 999
......
......@@ -4,4 +4,6 @@ set -e
echo "Installing amd64 Linux kernel"
apt-get --yes install linux-image-amd64:amd64
. /usr/share/amnesia/build/variables
apt-get --yes install "linux-image-${KERNEL_VERSION}-amd64-unsigned:amd64"
......@@ -9,17 +9,17 @@ Date: Mon Apr 4 18:04:52 2016 +0200
application (e.g. clicking something that isn't there won't
work). Most importantly, this greatly simplifies situations where the
'shown' element we are looking for is hard to exactly pinpoint since
it lacks properties to distinguish it from some not 'shown' element.
it lacks properties to distinguish it from some not 'shown' elements,
which is quite common when nodes lack names.
Therefore we add a `showingOnly` boolean flag to all search methods
where it makes sense (e.g. it doesn't make sense for Application:s
since they seem to always be considered not 'showing'). The default
will be to not do this, for backwards-compatibility, but the default
is configurable via a new `searchShowingOnly` config option.
Therefore we add a `showingOnly` boolean flag to all Node search
methods. The default will be to not do this, for backwards
compatibility, but the default is configurable via a new
`searchShowingOnly` config option.
--- a/usr/share/pyshared/dogtail/config.py
+++ b/usr/share/pyshared/dogtail/config.py
@@ -58,6 +58,9 @@ class _Config(object):
--- a/usr/lib/python2.7/dist-packages/dogtail/config.py
+++ b/usr/lib/python2.7/dist-packages/dogtail/config.py
@@ -60,6 +60,9 @@
searchCutoffCount (int):
Number of times to retry when a search fails.
......@@ -29,7 +29,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
defaultDelay (float):
Default time in seconds to sleep when delaying.
@@ -134,6 +137,7 @@ class _Config(object):
@@ -136,6 +139,7 @@
'searchBackoffDuration': 0.5,
'searchWarningThreshold': 3,
'searchCutoffCount': 20,
......@@ -37,9 +37,9 @@ Date: Mon Apr 4 18:04:52 2016 +0200
'defaultDelay': 0.5,
'childrenLimit': 100,
--- a/usr/share/pyshared/dogtail/tree.py
+++ b/usr/share/pyshared/dogtail/tree.py
@@ -819,12 +819,18 @@ class Node(object):
--- a/usr/lib/python2.7/dist-packages/dogtail/tree.py
+++ b/usr/lib/python2.7/dist-packages/dogtail/tree.py
@@ -855,12 +855,18 @@
else:
return False
......@@ -59,16 +59,16 @@ Date: Mon Apr 4 18:04:52 2016 +0200
if not recursive:
cIter = iter(self)
while True:
@@ -839,7 +845,7 @@ class Node(object):
@@ -873,7 +879,7 @@
else:
return pyatspi.utils.findDescendant(self, pred)
def findChild(self, pred, recursive=True, debugName=None,
- retry=True, requireResult=True):
+ retry=True, requireResult=True, showingOnly=None):
- def findChild(self, pred, recursive=True, debugName=None, retry=True, requireResult=True):
+ def findChild(self, pred, recursive=True, debugName=None, retry=True, requireResult=True, showingOnly=None):
"""
Search for a node satisyfing the predicate, returning a Node.
@@ -871,7 +877,7 @@ class Node(object):
@@ -905,7 +911,7 @@
logger.log("searching for %s (attempt %i)" %
(describeSearch(self, pred, recursive, debugName), numAttempts))
......@@ -77,7 +77,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
if result:
assert isinstance(result, Node)
if debugName:
@@ -891,12 +897,12 @@ class Node(object):
@@ -924,7 +930,7 @@
raise SearchError(describeSearch(self, pred, recursive, debugName))
# The canonical "search for multiple" method:
......@@ -85,28 +85,22 @@ Date: Mon Apr 4 18:04:52 2016 +0200
+ def findChildren(self, pred, recursive=True, isLambda=False, showingOnly=None):
"""
Find all children/descendents satisfying the predicate.
"""
if isLambda is True:
- nodes = self.findChildren(predicate.GenericPredicate(), recursive=recursive)
+ nodes = self.findChildren(predicate.GenericPredicate(), recursive=recursive, showingOnly=showingOnly)
result = []
for node in nodes:
try:
@@ -907,6 +913,12 @@ class Node(object):
return result
if isinstance(pred, predicate.Predicate):
pred = pred.satisfiedByNode
You can also use lambdas in place of pred that will enable search also against
@@ -938,6 +944,12 @@
else:
assert isinstance(pred, predicate.Predicate)
compare_func = pred.satisfiedByNode
+ if showingOnly == None:
+ showingOnly = config.searchShowingOnly
+ if showingOnly:
+ orig_pred = pred
+ pred = lambda n: orig_pred(n) and \
+ n.getState().contains(pyatspi.STATE_SHOWING)
if not recursive:
cIter = iter(self)
result = []
@@ -929,7 +941,7 @@ class Node(object):
return descendants
+ orig_compare_func = compare_func
+ compare_func = lambda n: orig_compare_func(n) and \
+ n.getState().contains(pyatspi.STATE_SHOWING)
results = []
numAttempts = 0
@@ -960,7 +972,7 @@
return results
# The canonical "search above this node" method:
- def findAncestor(self, pred):
......@@ -114,7 +108,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search up the ancestry of this node, returning the first Node
satisfying the predicate, or None.
@@ -945,7 +957,7 @@ class Node(object):
@@ -976,7 +988,7 @@
return None
# Various wrapper/helper search methods:
......@@ -123,19 +117,19 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Finds a child satisying the given criteria.
@@ -953,9 +965,9 @@ class Node(object):
if no such child is found, and will eventually raise an exception. It
@@ -985,9 +997,9 @@
also logs the search.
"""
- return self.findChild(predicate.GenericPredicate(name=name, roleName=roleName, description=description, label=label), recursive=recursive, retry=retry, debugName=debugName)
+ return self.findChild(predicate.GenericPredicate(name=name, roleName=roleName, description=description, label=label), recursive=recursive, retry=retry, debugName=debugName, showingOnly=showingOnly)
return self.findChild(predicate.GenericPredicate(name=name, roleName=roleName, description=description,
- label=label), recursive=recursive, retry=retry, debugName=debugName)
+ label=label), recursive=recursive, retry=retry, debugName=debugName, showingOnly=showingOnly)
- def isChild(self, name='', roleName='', description='', label='', recursive=True, retry=False, debugName=None):
+ def isChild(self, name='', roleName='', description='', label='', recursive=True, retry=False, debugName=None, showingOnly=None):
"""
Determines whether a child satisying the given criteria exists.
@@ -970,12 +982,12 @@ class Node(object):
@@ -1002,12 +1014,12 @@
self.findChild(
predicate.GenericPredicate(
name=name, roleName=roleName, description=description, label=label),
......@@ -150,7 +144,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a menu with the given name.
@@ -983,9 +995,9 @@ class Node(object):
@@ -1015,9 +1027,9 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -162,7 +156,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a menu item with the given name.
@@ -993,9 +1005,9 @@ class Node(object):
@@ -1025,9 +1037,9 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -174,7 +168,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a text entry with the given name.
@@ -1003,9 +1015,9 @@ class Node(object):
@@ -1035,9 +1047,9 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -186,7 +180,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a button with the given name.
@@ -1013,9 +1025,9 @@ class Node(object):
@@ -1045,9 +1057,9 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -198,7 +192,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a child labelled with the given text.
@@ -1023,9 +1035,9 @@ class Node(object):
@@ -1055,9 +1067,9 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -210,7 +204,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a child with the given name.
@@ -1033,9 +1045,9 @@ class Node(object):
@@ -1065,9 +1077,9 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -222,7 +216,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a tab with the given name.
@@ -1043,7 +1055,7 @@ class Node(object):
@@ -1075,7 +1087,7 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -231,16 +225,16 @@ Date: Mon Apr 4 18:04:52 2016 +0200
def getUserVisibleStrings(self):
"""
@@ -1109,7 +1121,7 @@ class Root (Node):
@@ -1138,7 +1150,7 @@
"""
Get all applications.
"""
return root.findChildren(predicate.GenericPredicate(
- roleName="application"), recursive=False)
+ roleName="application"), recursive=False, showingOnly=False)
- return root.findChildren(predicate.GenericPredicate(roleName="application"), recursive=False)
+ return root.findChildren(predicate.GenericPredicate(roleName="application"), recursive=False, showingOnly=False)
def application(self, appName, retry=True):
"""
@@ -1120,12 +1132,12 @@ class Root (Node):
@@ -1149,11 +1161,11 @@
if no such child is found, and will eventually raise an exception. It
also logs the search.
"""
......@@ -249,13 +243,12 @@ Date: Mon Apr 4 18:04:52 2016 +0200
class Application (Node):
- def dialog(self, dialogName, recursive=False):
+ def dialog(self, dialogName, recursive=False, showingOnly=None):
"""
Search below this node for a dialog with the given name,
returning a Window instance.
@@ -1136,9 +1148,9 @@ class Application (Node):
@@ -1164,9 +1176,9 @@
FIXME: should this method activate the dialog?
"""
......@@ -267,12 +260,12 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Search below this node for a window with the given name,
returning a Window instance.
@@ -1152,13 +1164,13 @@ class Application (Node):
@@ -1179,13 +1191,13 @@
The window will be automatically activated (raised and focused
by the window manager) if wnck bindings are available.
"""
result = self.findChild(
- predicate.IsAWindowNamed(windowName=windowName), recursive)
+ predicate.IsAWindowNamed(windowName=windowName), recursive, showingOnly=showingOnly)
- result = self.findChild(predicate.IsAWindowNamed(windowName=windowName), recursive)
+ result = self.findChild(predicate.IsAWindowNamed(windowName=windowName), recursive, showingOnly=showingOnly)
# FIXME: activate the WnckWindow ?
# if gotWnck:
# result.activate()
......@@ -283,7 +276,7 @@ Date: Mon Apr 4 18:04:52 2016 +0200
"""
Get the wnck.Application instance for this application, or None
@@ -1169,7 +1181,7 @@ class Application (Node):
@@ -1196,7 +1208,7 @@
FIXME: untested
"""
......@@ -292,3 +285,5 @@ Date: Mon Apr 4 18:04:52 2016 +0200
if window:
wnckWindow = window.getWnckWindow()
return wnckWindow.get_application()
--
2.10.1
......@@ -2,6 +2,8 @@ tails (2.7) UNRELEASED; urgency=medium
* Major new features and changes
- Install Tor 0.2.8.8. (Closes: #11832)
- Upgrade Icedove to 1:45.4.0-1~deb8u1+tails1. (Closes: #11854,
#11860)
* Minor improvements
- Ship Let's encrypt intermediate certificate to prepare the
......@@ -13,11 +15,18 @@ tails (2.7) UNRELEASED; urgency=medium
- Fix multiarch support in Synaptic. (Closes: #11820)
* Test suite
- Test incremental upgrades. (Closes: #6309)
- Add test for incremental upgrades. (Closes: #6309)
- Add tests for Icedove. (Closes: #6304)
- Decrease timeout to Tails Greeter to speed up testing of branches
where it is broken. (Closes: #11449)
- Add a ID field to the remote shell responses to filter out
unrelated ones. (Closes: #11846)
- Reliabily wait for the Greeter PostLogin script. (Closes: #5666)
- Reliabily type the kernel command line in the prompt at the boot
menu to ensure the remote shell is started. (Closes: #10777)
- Remove DVDROM device when not used, to workaround QEMU/Libvirt
compatibility issue. (Closes: #11874)
-- Tails developers <tails@boum.org> Mon, 03 Oct 2016 23:06:51 +0200
......
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='sata'/>
<readonly/>
</disk>
......@@ -18,12 +18,6 @@
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file=''/>
<target dev='hdc' bus='sata'/>
<readonly/>
</disk>
<controller type='usb' index='0' model='nec-xhci'/>
<controller type='sata' index='0'/>
<controller type='virtio-serial' index='0'/>
......
#11465
@product @check_tor_leaks @fragile
@product @check_tor_leaks
Feature: Icedove email client
As a Tails user
I may want to use an email client
Background:
Given I have started Tails from DVD and logged in and the network is connected
When I start "Icedove" via the GNOME "Internet" applications menu
And Icedove has started
And I have not configured an email account
When I start Icedove
Then I am prompted to setup an email account
Scenario: Adblock is not enabled within Icedove
Scenario: Only the expected addons are installed
Given I cancel setting up an email account
When I open Icedove's Add-ons Manager
And I click the extensions tab
Then I see that Adblock is not installed in Icedove
Then I see that only the amnesia branding, Enigmail and TorBirdy addons are enabled in Icedove
Scenario: Enigmail is configured to use the correct keyserver
Given I cancel setting up an email account
And I go into Enigmail's preferences
When I click Enigmail's keyserver tab
And I enable Enigmail's expert settings
When I click Enigmail's Keyserver tab
Then I see that Enigmail is configured to use the correct keyserver
When I click Enigmail's advanced tab
When I click Enigmail's Advanced tab
Then I see that Enigmail is configured to use the correct SOCKS proxy
Scenario: Torbirdy is configured to use Tor
Given I cancel setting up an email account
And I open Torbirdy's preferences
Then I see that Torbirdy is configured to use Tor
Scenario: Icedove's autoconfiguration wizard defaults to IMAP and secure protocols
When I enter my email credentials into the autoconfiguration wizard
Then the autoconfiguration wizard's choice for the incoming server is secure IMAP
Then the autoconfiguration wizard's choice for the outgoing server is secure SMTP
Scenario: Icedove can send emails, and receive emails over IMAP
When I enter my email credentials into the autoconfiguration wizard
Then the autoconfiguration wizard's choice for the incoming server is secure IMAP
When I accept the autoconfiguration wizard's configuration
And I send an email to myself
And I fetch my email
Then I can find the email I sent to myself in my inbox
Scenario: Icedove can send emails, and receive emails over POP3
When I enter my email credentials into the autoconfiguration wizard
Then the autoconfiguration wizard's choice for the incoming server is secure IMAP
When I select the autoconfiguration wizard's POP3 choice
Then the autoconfiguration wizard's choice for the incoming server is secure POP3
When I accept the autoconfiguration wizard's configuration
And I send an email to myself
And I fetch my email
Then I can find the email I sent to myself in my inbox
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment