diff options
| -rw-r--r-- | client/changes/bug_open-db-in-autocommit-mode | 2 | ||||
| -rw-r--r-- | client/src/leap/soledad/client/sqlcipher.py | 12 | ||||
| -rw-r--r-- | docs/debian-repackaging.rst | 41 | 
3 files changed, 55 insertions, 0 deletions
| diff --git a/client/changes/bug_open-db-in-autocommit-mode b/client/changes/bug_open-db-in-autocommit-mode new file mode 100644 index 00000000..26edd5a9 --- /dev/null +++ b/client/changes/bug_open-db-in-autocommit-mode @@ -0,0 +1,2 @@ +  o Open db in autocommit mode, to avoid nested transactions problems. +    Closes: #4400 diff --git a/client/src/leap/soledad/client/sqlcipher.py b/client/src/leap/soledad/client/sqlcipher.py index 3e01a4fb..894c6f97 100644 --- a/client/src/leap/soledad/client/sqlcipher.py +++ b/client/src/leap/soledad/client/sqlcipher.py @@ -70,6 +70,14 @@ sqlite_backend.dbapi2 = dbapi2  SQLITE_CHECK_SAME_THREAD = False +# We set isolation_level to None to setup autocommit mode. +# See: http://docs.python.org/2/library/sqlite3.html#controlling-transactions +# This avoids problems with sequential operations using the same soledad object +# trying to open new transactions +# (The error was: +# OperationalError:cannot start a transaction within a transaction.) +SQLITE_ISOLATION_LEVEL = None +  def open(path, password, create=True, document_factory=None, crypto=None,           raw_key=False, cipher='aes-256-cbc', kdf_iter=4000, @@ -172,6 +180,7 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase):          with self.k_lock:              self._db_handle = dbapi2.connect(                  sqlcipher_file, +                isolation_level=SQLITE_ISOLATION_LEVEL,                  check_same_thread=SQLITE_CHECK_SAME_THREAD)              # set SQLCipher cryptographic parameters              self._set_crypto_pragmas( @@ -436,6 +445,7 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase):              with cls.k_lock:                  db_handle = dbapi2.connect(                      sqlcipher_file, +                    isolation_level=SQLITE_ISOLATION_LEVEL,                      check_same_thread=SQLITE_CHECK_SAME_THREAD)                  cls._set_crypto_pragmas(                      db_handle, key, raw_key, cipher, @@ -645,6 +655,7 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase):              passphrase that should be hashed to obtain the encyrption key.          :type raw_key: bool          """ +        # XXX change key param!          if raw_key:              cls._pragma_rekey_raw(db_handle, key)          else: @@ -683,6 +694,7 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase):          """          if not all(c in string.hexdigits for c in key):              raise NotAnHexString(key) +        # XXX change passphrase param!          db_handle.cursor().execute('PRAGMA rekey = "x\'%s"' % passphrase)      def __del__(self): diff --git a/docs/debian-repackaging.rst b/docs/debian-repackaging.rst new file mode 100644 index 00000000..a7488a84 --- /dev/null +++ b/docs/debian-repackaging.rst @@ -0,0 +1,41 @@ +repackaging howto +================= + +How to repackage latest code +---------------------------- + +Enter debian branch:: + + git checkout debian + +Merge your latest and greatest:: + + git merge develop + +Bump the changelog:: + + vim debian/changelog + +dch should also get you there, adding a new entry. + +Edit the changelog so you get a new version (this is the version +that apt will report). For example, change:: + +  soledad-common (0.3.4) unstable; urgency=low + +to:: + +  soledad-common (0.3.4-1~testing_frobnication) unstable; urgency=low + + +Last, but not least, freeze the debian version:: + + python setup.py freeze_debianver + +It might be a good idea to edit by hand the version string +under _version too, so it's clear that you're packaging some bleeding +edge not to be confused with latest stable packages. + +And now you can happily repackage for your own deploys:: + +  debuild -us -uc | 
