Hello community, here is the log from the commit of package offlineimap for openSUSE:Factory checked in at 2018-06-29 22:26:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/offlineimap (Old) and /work/SRC/openSUSE:Factory/.offlineimap.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "offlineimap" Fri Jun 29 22:26:53 2018 rev:45 rq:617014 version:7.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/offlineimap/offlineimap.changes 2018-01-30 15:45:12.256362417 +0100 +++ /work/SRC/openSUSE:Factory/.offlineimap.new/offlineimap.changes 2018-06-29 22:26:58.574457493 +0200 @@ -1,0 +2,8 @@ +Fri Jun 15 06:12:06 UTC 2018 - mimi...@gmail.com + +- update to 7.2.0 + * for kerberos/gssapi suggests python2-gssapi + * make UI output show local AND remote dirs involved. + * maxsyncaccounts: improve documentation + +------------------------------------------------------------------- Old: ---- offlineimap-7.1.5.tar.gz New: ---- offlineimap-7.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ offlineimap.spec ++++++ --- /var/tmp/diff_new_pack.cF22Oe/_old 2018-06-29 22:26:59.350456906 +0200 +++ /var/tmp/diff_new_pack.cF22Oe/_new 2018-06-29 22:26:59.354456903 +0200 @@ -17,12 +17,12 @@ Name: offlineimap -Version: 7.1.5 +Version: 7.2.0 Release: 0 Summary: IMAP/Maildir Synchronization Tool -License: GPL-2.0+ +License: GPL-2.0-or-later Group: Productivity/Networking/Email/Utilities -Url: http://offlineimap.org/ +URL: http://offlineimap.org/ Source0: https://github.com/OfflineIMAP/offlineimap/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz BuildRequires: asciidoc BuildRequires: docutils @@ -38,6 +38,7 @@ Requires: python2-curses Requires: python2-six Suggests: %{name}-htmldoc +Suggests: python2-gssapi BuildArch: noarch %description @@ -88,9 +89,9 @@ rm docs/html/doctrees/environment.pickle %files -f INSTALLED_FILES -%doc COPYING Changelog.md README.md examples -%{_mandir}/man1/%{name}.1* -%{_mandir}/man7/offlineimapui.7* +%license COPYING +%doc Changelog.md README.md examples +%{_mandir}/man?/%{name}*.?%{?ext_man} %dir %{_userunitdir} %{_userunitdir}/%{name}.service %{_userunitdir}/%{name}@.service ++++++ offlineimap-7.1.5.tar.gz -> offlineimap-7.2.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/.coveragerc new/offlineimap-7.2.0/.coveragerc --- old/offlineimap-7.1.5/.coveragerc 1970-01-01 01:00:00.000000000 +0100 +++ new/offlineimap-7.2.0/.coveragerc 2018-04-07 20:17:52.000000000 +0200 @@ -0,0 +1,14 @@ +[run] +branch = True +source = offlineimap + +[report] +exclude_lines = + if self.debug: + pragma: no cover + raise NotImplementedError + if __name__ == .__main__.: +ignore_errors = True +omit = + tests/* + test/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/.gitignore new/offlineimap-7.2.0/.gitignore --- old/offlineimap-7.1.5/.gitignore 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/.gitignore 2018-04-07 20:17:52.000000000 +0200 @@ -1,18 +1,19 @@ -# Editors/IDEs +# Backups. .*.swp .*.swo *~ -tags - # websites. /website/ /wiki/ - # Generated files. -/docs/dev-doc/ -/build/ *.html *.css +/docs/dev-doc/ +/build/ *.pyc offlineimap.1 offlineimapui.7 +# Editors/IDEs +tags +# Generated conf files for Travis-CI tests. +oli-travis.conf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/.travis.yml new/offlineimap-7.2.0/.travis.yml --- old/offlineimap-7.1.5/.travis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/offlineimap-7.2.0/.travis.yml 2018-04-07 20:17:52.000000000 +0200 @@ -0,0 +1,69 @@ +language: python +python: +- '2.7' +- '3.6' +notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/975e807e0314c9fa189c + on_success: always # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: never +os: +- linux +env: + global: + - secure: jehlvkFxQbkvr73A0z3HGNC/knZQPKcaXLf6nByGpNE0ZTQKF7Y5KkNfeTcw4st7L7KuRZ1S/1bFtpMXTaplE6G0OtIEC4//SM+z+Dnadn2OY6wHiaapwZmmqDC5qVvcXPdmz/wTRsdrJSGLb2l6kEb91vRGbCCfHHf6Z2cF71U= + - secure: kWdmWAFK4qrA73ONz1X8CJdHSER3bCBXjLfYHYEEMPCZep21bTITUXIfZBlSNN1888SQtYksuloRJmvj7xiY/hf/4lyWiqM3RgWQ+YptJMVOQX+Gara6vm4nGntKQwaXgZF2YHSh+NYwQm1VY6m0n1ye/vfOIJnYfgGTk5qAZYU= + - secure: MzytYRX6HxgBj6Q3efkACTtDed8ZYO+P6UJrDA9IDtvffi8fAFb+wkQtKJrdcvMXNOap6fPe4c0EVGjgL5hFxmgC8yAh5t2YK7OhstAtq0ptKFlOcU24/drrkqoq040sAM/4Lc0nQCvYpz7bH370jzZl69rpbQWttwQR0i1e3Gw= + - secure: RWvIOHSiv2kt6cfZR7MEueiAmC61bWMXAtgsC6gKq1u3BfENfqSBTA/heIy+nlu7AXK1b6hPMZDCHWK09Zz6Klkd9xZ1gkE/AARWseoo9UWgGjmfvqng1S6qpESeX2GnZGR9CuBXTPGhtbYLgtNlxAo+6uZLolz2utW2XNk3Z/Y= + - secure: spivQv+vSJhE+ttn/Z6tANaINqiMSaJSucRqtoXR7PtioVDTOTmmL01Ja6dXuo8Ua5iVFtpZPDzqVpntQLKtjcywSK2zWnC9qbZYDfENr1/yIvfbSRjGeseq0eoY+fFp67FGZV4mIasdC3LOB0lRGOyrsX787fNKVQ8ZH0CRz0o= + - secure: ZcY0TvTQnRCdoFkdbJPfDJJNx91tViwbpiOBkxNEa3u0RN48xkZkii35kNVBaEcVZHcT9C81ctHk4QX+plBkCsoj5GDf25scgcv1j9R9UoN/rIkmyTu1Znmc+3UQ2J+EnGLWVn5xJ7yT/l9NZeLfNbULQRjttwT4j2MBGxezgdM= + matrix: + - OUTLOOK_AUTH=PLAIN GMAIL_AUTH=XOAUTH2 + - OUTLOOK_AUTH=LOGIN GMAIL_AUTH=XOAUTH2 +matrix: + include: + - os: osx + language: generic + env: PYTHON=2.7.14 OUTLOOK_AUTH=PLAIN GMAIL_AUTH=XOAUTH2 + - os: osx + language: generic + env: PYTHON=2.7.14 OUTLOOK_AUTH=LOGIN GMAIL_AUTH=XOAUTH2 + - os: osx + language: generic + env: PYTHON=3.6.4 OUTLOOK_AUTH=PLAIN GMAIL_AUTH=XOAUTH2 + - os: osx + language: generic + env: PYTHON=3.6.4 OUTLOOK_AUTH=LOGIN GMAIL_AUTH=XOAUTH2 + allow_failures: + - os: osx +cache: pip +before_install: +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install openssl readline; + fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export OSX_BREW_SSLCACERTFILE="/usr/local/etc/openssl/cert.pem"; + fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew outdated pyenv || brew upgrade pyenv; + fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install pyenv-virtualenv; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pyenv install $PYTHON; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PYENV_VERSION="${PYTHON}"; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/Users/travis/.pyenv/shims:${PATH}"; + fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pyenv virtualenv $PYTHON myvenv; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pyenv versions; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then python --version; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pyenv version; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then python --version; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then python -m pip install -U pip; fi +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then python -m easy_install -U setuptools; + fi +install: +- pip install -r requirements.txt +- pip install -r tests/requirements.txt +- export PATH=$PATH:. +- python tests/create_conf_file.py +script: +- "./offlineimap.py -c ./oli-travis.conf" +- codecov diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/Changelog.md new/offlineimap-7.2.0/Changelog.md --- old/offlineimap-7.1.5/Changelog.md 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/Changelog.md 2018-04-07 20:17:52.000000000 +0200 @@ -15,6 +15,58 @@ * The following excerpt is only usefull when rendered in the website. {:toc} +### OfflineIMAP v7.2.0 (2018-04-07) + +#### Notes + +The biggest change with this release is the introduction of automated tests; +thanks to Chris from http://www.espacenetworks.com. + +Robbie Hardwood from RedHat switched the GSSAPI dependency from pykerberos to +python-gssapi because it's more active and has more pleasant interface. + +The shebang is fixed back to python2 to fix issues on some environments. + +The UI was improved to show both the local and remote foldernames (usefull when +nametrans is enabled). + +Thanks to all the contributors. + +This release was tested by: + +- Nicolas Sebrecht +- Remi Locherer + + +#### Authors + +- Nicolas Sebrecht (9) +- Musashi69 (1) +- Robbie Harwood (1) +- chris001 (1) + + +#### Features + +- Autmomated testing using Travis and CodeCov.io!. [chris001] +- README: travis: add badge for the next branch. [Nicolas Sebrecht] +- travis: add notification to gitter room OfflineIMAP/offlineimap. [Nicolas Sebrecht] + +#### Fixes + +- offlineimap.py: fix shebang to python2. [Nicolas Sebrecht] +- bin/offlineimap: fix shebang to env python2. [Nicolas Sebrecht] + +#### Changes + +- Port to python-gssapi from pykerberos. [Robbie Harwood] +- requirements: add gssapi as optional dependency. [Nicolas Sebrecht] +- make UI output show local AND remote dirs involved. [Musashi69] +- maxsyncaccounts: improve documentation. [Nicolas Sebrecht] + + + + ### OfflineIMAP v7.1.5 (2018-01-13) #### Notes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/README.md new/offlineimap-7.2.0/README.md --- old/offlineimap-7.1.5/README.md 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/README.md 2018-04-07 20:17:52.000000000 +0200 @@ -1,8 +1,22 @@ +Upstream status (`master` branch): +[![OfflineIMAP build status on Travis-CI.org](https://travis-ci.org/OfflineIMAP/offlineimap.svg?branch=master)](https://travis-ci.org/OfflineIMAP/offlineimap) +[![OfflineIMAP code coverage on Codecov.io](https://codecov.io/gh/OfflineIMAP/offlineimap/branch/master/graph/badge.svg)](https://codecov.io/gh/OfflineIMAP/offlineimap) +[![Gitter chat](https://badges.gitter.im/OfflineIMAP/offlineimap.png)](https://gitter.im/OfflineIMAP/offlineimap) + +Upstream status (`next` branch): +[![OfflineIMAP build status on Travis-CI.org](https://travis-ci.org/OfflineIMAP/offlineimap.svg?branch=next)](https://travis-ci.org/OfflineIMAP/offlineimap) + [offlineimap]: http://github.com/OfflineIMAP/offlineimap [website]: http://www.offlineimap.org [wiki]: http://github.com/OfflineIMAP/offlineimap/wiki [blog]: http://www.offlineimap.org/posts.html +Links: +* Official github code repository: [offlineimap] +* Website: [website] +* Wiki: [wiki] +* Blog: [blog] + # OfflineIMAP ***"Get the emails where you need them."*** @@ -90,6 +104,7 @@ * Python v3.4+ ***[STALLED] (experimental: [see known issues](https://github.com/OfflineIMAP/offlineimap/issues?q=is%3Aissue+is%3Aopen+label%3APy3))*** * six (required) * imaplib2 >= 2.57 (optional) +* gssapi (optional), for Kerberos authentication ## Documentation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/bin/offlineimap new/offlineimap-7.2.0/bin/offlineimap --- old/offlineimap-7.1.5/bin/offlineimap 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/bin/offlineimap 2018-04-07 20:17:52.000000000 +0200 @@ -1,7 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # Startup from system-wide installation -# Copyright (C) 2002 - 2009 John Goerzen -# <jgoer...@complete.org> +# Copyright (C) 2002-2018 John Goerzen & contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/offlineimap/__init__.py new/offlineimap-7.2.0/offlineimap/__init__.py --- old/offlineimap-7.1.5/offlineimap/__init__.py 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/offlineimap/__init__.py 2018-04-07 20:17:52.000000000 +0200 @@ -2,7 +2,7 @@ __productname__ = 'OfflineIMAP' # Expecting trailing "-rcN" or "" for stable releases. -__version__ = "7.1.5" +__version__ = "7.2.0" __copyright__ = "Copyright 2002-2018 John Goerzen & contributors" __author__ = "John Goerzen" __author_email__= "offlineimap-proj...@lists.alioth.debian.org" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/offlineimap/imapserver.py new/offlineimap-7.2.0/offlineimap/imapserver.py --- old/offlineimap-7.1.5/offlineimap/imapserver.py 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/offlineimap/imapserver.py 2018-04-07 20:17:52.000000000 +0200 @@ -17,7 +17,6 @@ import hmac import socket -import base64 import json import urllib import time @@ -36,13 +35,10 @@ try: - # do we have a recent pykerberos? - have_gss = False - import kerberos - if 'authGSSClientWrap' in dir(kerberos): - have_gss = True + import gssapi + have_gss = True except ImportError: - pass + have_gss = False class IMAPServer(object): @@ -55,9 +51,6 @@ delim The server's folder delimiter. Only valid after acquireconnection() """ - GSS_STATE_STEP = 0 - GSS_STATE_WRAP = 1 - def __init__(self, repos): """:repos: a IMAPRepository instance.""" @@ -127,7 +120,6 @@ self.connectionlock = Lock() self.reference = repos.getreference() self.idlefolders = repos.getidlefolders() - self.gss_step = self.GSS_STATE_STEP self.gss_vc = None self.gssapi = False @@ -267,33 +259,35 @@ self.ui.debug('imap', 'xoauth2handler: returning "%s"'% auth_string) return auth_string - def __gssauth(self, response): - data = base64.b64encode(response) + # Perform the next step handling a GSSAPI connection. + # Client sends first, so token will be ignored if there is no context. + def __gsshandler(self, token): + if token == "": + token = None try: - if self.gss_step == self.GSS_STATE_STEP: - if not self.gss_vc: - rc, self.gss_vc = kerberos.authGSSClientInit( - 'imap@' + self.hostname) - response = kerberos.authGSSClientResponse(self.gss_vc) - rc = kerberos.authGSSClientStep(self.gss_vc, data) - if rc != kerberos.AUTH_GSS_CONTINUE: - self.gss_step = self.GSS_STATE_WRAP - elif self.gss_step == self.GSS_STATE_WRAP: - rc = kerberos.authGSSClientUnwrap(self.gss_vc, data) - response = kerberos.authGSSClientResponse(self.gss_vc) - rc = kerberos.authGSSClientWrap( - self.gss_vc, response, self.username) - response = kerberos.authGSSClientResponse(self.gss_vc) - except kerberos.GSSError as err: - # Kerberos errored out on us, respond with None to cancel the + if not self.gss_vc: + name = gssapi.Name('imap@' + self.hostname, + gssapi.NameType.hostbased_service) + self.gss_vc = gssapi.SecurityContext(usage="initiate", + name=name) + + if not self.gss_vc.complete: + response = self.gss_vc.step(token) + return response if response else "" + + # Don't bother checking qop because we're over a TLS channel + # already. But hey, if some server started encrypting tomorrow, + # we'd be ready since krb5 always requests integrity and + # confidentiality support. + response = self.gss_vc.unwrap(token) + response = self.gss_vc.wrap(response.message, response.encrypted) + return response.message if response.message else "" + except gssapi.exceptions.GSSError as err: + # GSSAPI errored out on us; respond with None to cancel the # authentication - self.ui.debug('imap', '%s: %s'% (err[0][0], err[1][0])) + self.ui.debug('imap', err.gen_message()) return None - if not response: - response = '' - return base64.b64decode(response) - def __start_tls(self, imapobj): if 'STARTTLS' in imapobj.capabilities and not self.usessl: self.ui.debug('imap', 'Using STARTTLS connection') @@ -327,16 +321,14 @@ self.connectionlock.acquire() try: - imapobj.authenticate('GSSAPI', self.__gssauth) + imapobj.authenticate('GSSAPI', self.__gsshandler) return True except imapobj.error as e: self.gssapi = False raise else: self.gssapi = True - kerberos.authGSSClientClean(self.gss_vc) self.gss_vc = None - self.gss_step = self.GSS_STATE_STEP finally: self.connectionlock.release() @@ -680,8 +672,7 @@ self.assignedconnections = [] self.availableconnections = [] self.lastowner = {} - # reset kerberos state - self.gss_step = self.GSS_STATE_STEP + # reset GSSAPI state self.gss_vc = None self.gssapi = False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/offlineimap/ui/UIBase.py new/offlineimap-7.2.0/offlineimap/ui/UIBase.py --- old/offlineimap-7.1.5/offlineimap/ui/UIBase.py 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/offlineimap/ui/UIBase.py 2018-04-07 20:17:52.000000000 +0200 @@ -396,9 +396,9 @@ def copyingmessage(self, uid, num, num_to_copy, src, destfolder): """Output a log line stating which message we copy.""" - self.logger.info("Copy message UID %s (%d/%d) %s:%s -> %s"% ( + self.logger.info("Copy message UID %s (%d/%d) %s:%s -> %s:%s"% ( uid, num, num_to_copy, src.repository, src, - destfolder.repository)) + destfolder.repository, destfolder)) def deletingmessages(self, uidlist, destlist): ds = self.folderlist(destlist) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/offlineimap.conf new/offlineimap-7.2.0/offlineimap.conf --- old/offlineimap-7.1.5/offlineimap.conf 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/offlineimap.conf 2018-04-07 20:17:52.000000000 +0200 @@ -77,14 +77,16 @@ # This option stands in the [general] section. # -# Offlineimap can synchronize more than one account at a time. If you want to -# enable this feature, set the below value to something greater than 1. To -# force it to synchronize only one account at a time, set it to 1. -# -# NOTE: if you are using autorefresh and have more than one account, you must -# set this number to be >= to the number of accounts you have; since any given -# sync run never "finishes" due to a timer, you will never sync your additional -# accounts if this is 1. +# Offlineimap can synchronize more than one account at a time. There are two +# ways to sync accounts concurrently: +# +# 1. By running one offlineimap instance for each account (with the -a CLI +# option). This is the recommended way. In this case, keep the following option +# to 1. +# +# 2. By allowing offlineimap to sync more than one account for an instance (not +# recommended). In this case, set the maxsyncaccounts option to a value greater +# than 1. # #maxsyncaccounts = 1 @@ -273,8 +275,13 @@ # your mail periodically. If you want that, specify how frequently to do that # (in minutes) here. Fractional minutes (ie, 3.25) is allowed. # -# If you want more than one account concurrently synced in this mode, don't -# forget to set the maxsyncaccounts option accordingly. +# If you want more than one account concurrently synced in one instance of +# offlineimap (not recommended), don't forget to increase the maxsyncaccounts +# option accordingly. +# +# NOTE: If you run systemd it's recommended to not enable this option and use +# the systemd timer instead (see the ./contrib/systemd/ directory in the +# repository). # #autorefresh = 5 @@ -1364,7 +1371,7 @@ # This option stands in the [Repository RemoteExample] section. # -# If offlineiamp is having troubles to download some UIDS, it's possible to get +# If offlineimap is having troubles to download some UIDS, it's possible to get # them ignored in a list. This only ignore the download. # # The function must return the list of UIDs (integers), None otherwise. It is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/offlineimap.py new/offlineimap-7.2.0/offlineimap.py --- old/offlineimap-7.1.5/offlineimap.py 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/offlineimap.py 2018-04-07 20:17:52.000000000 +0200 @@ -1,7 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # Startup from single-user installation -# Copyright (C) 2002 - 2008 John Goerzen -# <jgoer...@complete.org> +# Copyright (C) 2002-2018 John Goerzen & contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/requirements.txt new/offlineimap-7.2.0/requirements.txt --- old/offlineimap-7.1.5/requirements.txt 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/requirements.txt 2018-04-07 20:17:52.000000000 +0200 @@ -1,2 +1,3 @@ # Requirements six +gssapi[kerberos] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/test/.gitignore new/offlineimap-7.2.0/test/.gitignore --- old/offlineimap-7.1.5/test/.gitignore 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/test/.gitignore 2018-04-07 20:17:52.000000000 +0200 @@ -1,2 +1,5 @@ credentials.conf -tmp_* \ No newline at end of file +tmp_* +*.pyc +OLItest/*.pyc +tests/*.pyc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/test/OLItest/TestRunner.py new/offlineimap-7.2.0/test/OLItest/TestRunner.py --- old/offlineimap-7.1.5/test/OLItest/TestRunner.py 2018-01-13 13:55:23.000000000 +0100 +++ new/offlineimap-7.2.0/test/OLItest/TestRunner.py 2018-04-07 20:17:52.000000000 +0200 @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import imaplib +import offlineimap.virtual_imaplib2 as imaplib import unittest import logging import os diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/tests/.gitignore new/offlineimap-7.2.0/tests/.gitignore --- old/offlineimap-7.1.5/tests/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/offlineimap-7.2.0/tests/.gitignore 2018-04-07 20:17:52.000000000 +0200 @@ -0,0 +1,2 @@ +*.pyc + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/tests/create_conf_file.py new/offlineimap-7.2.0/tests/create_conf_file.py --- old/offlineimap-7.1.5/tests/create_conf_file.py 1970-01-01 01:00:00.000000000 +0100 +++ new/offlineimap-7.2.0/tests/create_conf_file.py 2018-04-07 20:17:52.000000000 +0200 @@ -0,0 +1,82 @@ +#!/bin/env python +# Copyright 2018 Espace LLC/espacenetworks.com. Written by @chris001. +# This must be run from the main directory of the offlineimap project. +# Typically this script will be run by Travis to create the config files needed for running the automated tests. +# python ./tests/create_conf_file.py +# Input: Seven shell environment variables. +# Output: it writes the config settings to "filename" (./oli-travis.conf) and "additionalfilename" (./test/credentials.conf). +# "filename" is used by normal run of ./offlineimap -c ./oli-travis.conf , "additionalfilename" is used by "pytest". +# They are the same conf file, copie to two different locations for convenience. + +import os +import shutil +try: + import ConfigParser + Config = ConfigParser.ConfigParser() +except ImportError: + import configparser + Config = configparser.ConfigParser() + +filename = "./oli-travis.conf" +additionalfilename = "./test/credentials.conf" # for the 'pytest' which automatically finds and runs the unittests. + +#TODO: detect OS we running on now, and set sslcacertfile location accordingly. +sslcacertfile = "/etc/pki/tls/cert.pem" # CentOS 7 +sslcacertfile = "" # TODO: https://gist.github.com/1stvamp/2158128 Current Mac OSX now must download the cacertfile. +sslcacertfile = "/etc/ssl/certs/ca-certificates.crt" # Ubuntu Trusty 14.04 (Travis linux test container 2018.) +if os.environ["TRAVIS_OS_NAME"] == "osx": + sslcacertfile = os.environ["OSX_BREW_SSLCACERTFILE"] + +# lets create that config file. +cfgfile = open(filename,'w') + +# add the settings to the structure of the file, and lets write it out. +sect = 'general' +Config.add_section(sect) +Config.set(sect,'accounts','Test') +Config.set(sect,'maxsyncaccounts', '1') + +sect = 'Account Test' +Config.add_section(sect) +Config.set(sect,'localrepository','IMAP') # Outlook. +Config.set(sect,'remoterepository', 'Gmail') + +### "Repository IMAP" is hardcoded in test/OLItest/TestRunner.py it should dynamically get the Repository names but it doesn't. +sect = 'Repository IMAP' # Outlook. +Config.add_section(sect) +Config.set(sect,'type','IMAP') +Config.set(sect,'remotehost', 'imap-mail.outlook.com') +Config.set(sect,'remoteport', '993') +Config.set(sect,'auth_mechanisms', os.environ["OUTLOOK_AUTH"]) +Config.set(sect,'ssl', 'True') +#Config.set(sect,'tls_level', 'tls_compat') #Default is 'tls_compat'. +#Config.set(sect,'ssl_version', 'tls1_2') # Leave this unset. Will auto select between tls1_1 and tls1_2 for tls_secure. +Config.set(sect,'sslcacertfile', sslcacertfile) +Config.set(sect,'remoteuser', os.environ["secure_outlook_email_address"]) +Config.set(sect,'remotepass', os.environ["secure_outlook_email_pw"]) +Config.set(sect,'createfolders', 'True') +Config.set(sect,'folderfilter', 'lambda f: f not in ["Inbox", "[Gmail]/All Mail"]') #Capitalization of Inbox INBOX was causing runtime failure. +#Config.set(sect,'folderfilter', 'lambda f: f not in ["[Gmail]/All Mail"]') + + +### "Repository Gmail" is also hardcoded into test/OLItest/TestRunner.py +sect = 'Repository Gmail' +Config.add_section(sect) +Config.set(sect,'type', 'Gmail') +Config.set(sect,'remoteport', '993') +Config.set(sect,'auth_mechanisms', os.environ["GMAIL_AUTH"]) +Config.set(sect,'oauth2_client_id', os.environ["secure_gmail_oauth2_client_id"]) +Config.set(sect,'oauth2_client_secret', os.environ["secure_gmail_oauth2_client_secret"]) +Config.set(sect,'oauth2_refresh_token', os.environ["secure_gmail_oauth2_refresh_token"]) +Config.set(sect,'remoteuser', os.environ["secure_gmail_email_address"]) +Config.set(sect,'ssl', 'True') +#Config.set(sect,'tls_level', 'tls_compat') +#Config.set(sect,'ssl_version', 'tls1_2') +Config.set(sect,'sslcacertfile', sslcacertfile) +Config.set(sect,'createfolders', 'True') +Config.set(sect,'folderfilter', 'lambda f: f not in ["INBOX", "[Gmail]/All Mail"]') + +Config.write(cfgfile) +cfgfile.close() + +shutil.copy(filename, additionalfilename) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/offlineimap-7.1.5/tests/requirements.txt new/offlineimap-7.2.0/tests/requirements.txt --- old/offlineimap-7.1.5/tests/requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/offlineimap-7.2.0/tests/requirements.txt 2018-04-07 20:17:52.000000000 +0200 @@ -0,0 +1,4 @@ +pytest +pytest-cov +coverage +codecov