From d322c519e3d10ccc17841df50fb5c86628fb79ee Mon Sep 17 00:00:00 2001
From: Pavel Korshunov <pavel.korshunov@idiap.ch>
Date: Thu, 22 Mar 2018 15:04:58 +0100
Subject: [PATCH] added script to generate changelog since last release

---
 release/changelog_since_last_release.txt | 893 +++++++++++++++++++++++
 release/generate_changelog.py            | 159 ++++
 2 files changed, 1052 insertions(+)
 create mode 100644 release/changelog_since_last_release.txt
 create mode 100755 release/generate_changelog.py

diff --git a/release/changelog_since_last_release.txt b/release/changelog_since_last_release.txt
new file mode 100644
index 0000000..41e7a79
--- /dev/null
+++ b/release/changelog_since_last_release.txt
@@ -0,0 +1,893 @@
+* bob.buildout
+  * v2.1.3 (Sep 22, 2017 10:37)
+  * v2.1.4 (Sep 22, 2017 11:34)
+  * v2.1.5 (Sep 22, 2017 13:58)
+     * no changes
+  * v2.1.6 (Feb 27, 2018 16:29)
+     * Enables built-in conda packaging
+     * Provides user/development guides
+     * Provides an alternative for gdb (based on lldb) for MacOS
+     - [docs] remove latex stuff
+     - Test
+     - Test
+     - Test
+     - test
+     - Add after_script to the build stage
+     - Get the install script from the clean branch too
+     - Update CI
+     - Update conda recipe
+     - remove bob-devel since that depends on a stable version of this
+     - Implement C/C++ debugging with lldb
+     - Try a fix for issue 24
+     - Bump version to avoid using stable version during beta builds
+     - Add a ref to the package name
+     - Add missing whitespace
+     - Create proper documentation for this project (closes bob.buildout#25)
+     - Doc improvements
+  * patch
+* bob.extension
+  * patch
+* bob.blitz
+  * patch
+     - Migrate to conda based CI
+* bob.core
+  * patch
+     - Migrate to conda based CI
+     - Fix test values (closes bob.core#8)
+     - Use log modules from bob.extension
+     - improve tests
+* bob.io.base
+  * patch
+     - Migrate to conda based CI
+* bob.math
+  * patch
+     - Migrate to conda based CI
+     - Add blas features
+     - trust numpy in finding blas/lapack. Fixes bob.math#14
+* bob.measure
+  * patch
+     - Fixed curve to show values between [0,1]
+     - Fixed issue with FAR and FRR values being exactly 1 or 0, respectively
+     - Update apply_threshold.py
+     - Provide a test case for negative thresholds
+     - remove extra import
+     - Added a warning before returning NaN
+     - Changed test case for different corner cases
+     - Add some obvious test cases
+     - Correct the threshold calculation implementation in far_threshold and…
+     - rename check_index to index
+     - Add more tests
+     - implement the tests correctly
+     - Never return NaNs for {far,frr}_threshold functions anymore
+     - Change the version too
+     - Compute roc using roc_for_far internally
+     - Iterate only once in the sorted negatives to keep the implementation in O(N)
+     - Use epsilon (2^-52) instead of 1e-12
+     - use nexttoward instead of epsilon since epsilon is too small sometimes
+     - use C nexttoward
+     - Migrate to conda based CI
+     - use std::nextafter instead of nexttoward
+     - Add an option to capture the output in a log file
+     - Add the expected output file for tests
+     - remove left-over docs
+     - recompute far values in roc_for_far
+     - Fix the test values
+* bob.io.image
+  * patch
+     - Quick fix for the issue bob.io.image#29. I still don't know why this artefact is not visible.
+     - Migrate to conda based CI
+     - Add tests to detect the problem reported on this issue
+     - Allow garbage at the end of PNM iaimages not affect readout (closes bob.io.image#30)
+* bob.db.base
+  * patch
+* bob.io.video
+  * patch
+     - Migrate to conda based CI
+     - adjust test values to openh264
+     - increase acceptable noise
+     - adjust test values
+     - Revamped code for ffmpeg-3.1+ baseline
+     - Fixed readout; No more warnings
+     - Fixes bob.io.video#10
+* bob.io.matlab
+  * patch
+     - Migrate to conda based CI
+* bob.io.audio
+  * patch
+     - Migrate to conda based CI
+* bob.sp
+  * patch
+     - Migrate to conda based CI
+* bob.ap
+  * patch
+     - Migrate to conda based CI
+* bob.ip.base
+  * patch
+     - Improved compatibility for non-C++-11 compilers
+     - Migrate to conda based CI
+     - [setup] Fix matplotlib requirement
+* bob.ip.color
+  * patch
+     - Migrate to conda based CI
+* bob.ip.draw
+  * patch
+     - Migrate to conda based CI
+* bob.ip.gabor
+  * patch
+     - Migrate to conda based CI
+* bob.learn.activation
+  * patch
+     - Migrate to conda based CI
+* bob.learn.libsvm
+  * patch
+     - Migrate to conda based CI
+     - increase tolerance
+     - Makes sure we can load/save files with arbitrary extensions
+* bob.learn.linear
+  * patch
+     - Migrate to conda based CI
+* bob.learn.mlp
+  * patch
+     - Migrate to conda based CI
+* bob.learn.boosting
+  * patch
+     - Migrate to conda based CI
+* bob.db.iris
+  * patch
+     - Migrate to conda based CI
+     - remove unnecessary command
+* bob.learn.em
+  * patch
+     - Migrate to conda based CI
+     - Add test time dependencies
+     - temporary remove unused ref 5. please see bob.learn.em#27
+     - remove unused references
+     - remove unused references
+     - Added reference [Bishop1999] issue bob.learn.em#27
+     - remove ununsed references
+     - Revert "remove unused references"
+     - Revert "Added reference [Bishop1999] issue bob.learn.em#27"
+* bob.db.wine
+  * patch
+     - Migrate to conda based CI
+* bob.db.mnist
+  * patch
+     - Migrate to conda based CI
+     - Download metadata during build
+* bob.db.atnt
+  * patch
+     - Migrate to conda based CI
+     - remove --missing option
+* bob.ip.facedetect
+  * patch
+     - Migrate to conda based CI
+* bob.ip.optflow.hornschunck
+  * patch
+     - Migrate to conda based CI
+* bob.ip.optflow.liu
+  * patch
+* bob.ip.flandmark
+  * patch
+     - Migrate to conda based CI
+* bob
+  * patch
+     - Initial commit
+* gridtk
+  * v1.5.0 (Nov 20, 2017 09:07)
+     * Implemented the option `--repeat <n>` in jman submit. Now we can submit the same job `n` times in a serial manner -- Merge gridtk!10
+     * Appended the idiap gpu short queue in our queue list
+     * Improved python 3 compatibility (Merge gridtk!7)
+     * Created the `jgen` tool (https://www.idiap.ch/software/bob/docs/bob/gridtk/master/generate.html) -- Merge gridtk!8
+     - Add sgpu to the list of the queues
+     - Submit extactly the same job several times
+     - Removed overwriting job ID when stopping jobs
+  * patch
+     - Add an option to make the aggregate output unique
+     - keep the whitespace
+     - Add tests for jgen --unique-aggregate
+     - make sure log_dir is directory is a directory
+     - improve the error message
+     - Migrate to conda based CI
+     - SGE scripts cannot be tested on the CI
+     - Fix sort errors that happen in Python 3
+     - Add a test for when groupby is used in templates
+     - Make the tests less relaxed
+* bob.ip.qualitymeasure
+  * patch
+     - added ci config file
+     - added conda yaml config
+     - updated README
+     - removed ref to bootstrapbuildout
+     - updated doc conf
+     - removed docopt requirement
+     - small fixes
+     - Added an optional reference image to Galbally IQM
+* bob.ip.skincolorfilter
+  * patch
+     - Migrate to conda based CI
+* bob.ip.facelandmarks
+  * patch
+     - Migrate to conda based CI
+* bob.ip.dlib
+  * v1.0.2 (Oct 19, 2017 10:18)
+     * Fixed issue with possible negative coordinates
+     - Fix for the empty image issue - when image is an array of zeros
+     - Fixed possible negative coordinates in face bbx retirned by FaceDetector
+     - Added the unit test for negative coordinates case
+  * patch
+     - Worked in the documentation
+     - [conda] Added conda recipe
+     - [conda] Trying to fix dlib dependency
+     - [conda] Added opencv as dependency
+     - update tests to dlib 19.7
+     - adding develop config
+     - fixing documentation to dlib 19.7
+     - [conda] Removed Bob deps from requirements/run and added Jinja variables for opencv and dlib
+     - Fix conda recipe
+     - Bump into beta version (closes bob.ip.dlib#4)
+     - Fixed the index.rst to match joint docs requirements
+     - Removed some spaces in index.rst
+     - [conda] Downgrading to the version 1.0.3b0 in order to fix conda issue.
+* bob.db.arface
+  * v2.1.4 (Sep 22, 2017 14:17)
+  * patch
+     - Migrate to conda based CI
+* bob.db.asvspoof
+  * v1.0.3 (Sep 22, 2017 14:20)
+  * patch
+     - added conda recipe and removed redundant debug_asvspoof2017 script
+* bob.db.asvspoof2017
+  * v1.0.3 (Sep 22, 2017 14:20)
+  * patch
+     - added conda recipe and removed redundant debug_asvspoof2017 script
+* bob.db.atvskeystroke
+  * v2.1.5 (Sep 22, 2017 14:21)
+  * patch
+     - Port to new CI
+     - Fix build deps
+     - Add a ref to the package name
+     - Add missing whitespace
+* bob.db.avspoof
+  * patch
+* bob.db.banca
+  * v2.1.5 (Sep 22, 2017 14:22)
+  * patch
+     - Migrate to conda based CI
+* bob.db.biosecure
+  * v2.1.5 (Sep 22, 2017 14:22)
+  * patch
+     - Migrate to conda based CI
+* bob.db.biosecurid.face
+  * v2.1.8 (Sep 22, 2017 14:22)
+  * patch
+     - Migrate to conda based CI
+     - Update index.rst
+* bob.db.casme2
+  * v2.1.5 (Sep 22, 2017 14:23)
+  * patch
+     - Migrate to conda based CI
+* bob.db.caspeal
+  * v2.1.5 (Sep 22, 2017 14:23)
+  * patch
+     - Migrate to conda based CI
+* bob.db.cohface
+  * v1.0.4 (Sep 22, 2017 14:24)
+  * patch
+     - Migrate to conda based CI
+     - Add a ref to the package name
+     - Add missing whitespace
+* bob.db.frgc
+  * v2.1.3 (Sep 22, 2017 14:24)
+  * patch
+     - Migrate to conda based CI
+     - [conda] This package has no download command
+* bob.db.gbu
+  * v2.1.4 (Sep 22, 2017 14:24)
+  * patch
+     - Migrate to conda based CI
+* bob.db.hci_tagging
+  * v1.0.4 (Sep 22, 2017 14:28)
+  * patch
+     - Migrate to conda based CI
+     - Add a ref to the package name
+     - Add missing whitespace
+* bob.db.ijba
+  * v2.0.3 (Sep 22, 2017 14:28)
+  * patch
+     - Added missing dependency to bob.io.image (from bob.db.base)
+     - Migrate to conda based CI
+     - Added bob.measure as requirement
+     - This functionality was moved to bob.bio.face
+     - [conda] Removed bob.measure from the test requirements
+* bob.db.kboc16
+  * v2.0.11 (Sep 22, 2017 14:28)
+  * patch
+     - Migrate to conda based CI
+     - Add a ref to the package name
+     - Add missing whitespace
+* bob.db.lfw
+  * v2.1.5 (Sep 22, 2017 14:28)
+  * patch
+     - Migrate to conda based CI
+* bob.db.livdet2013
+  * v2.0.6 (Sep 22, 2017 14:29)
+  * patch
+     - Migrate to conda based CI
+     - This package does not download metadata (closes bob.db.livdet2013#1)
+     - Add a ref to the package name
+     - Add missing whitespace
+* bob.db.mobio
+  * v2.1.5 (Sep 22, 2017 14:29)
+  * patch
+     - Update README.rst
+     - Migrate to conda based CI
+     - [conda] Fixing dependency with six
+* bob.db.msu_mfsd_mod
+  * v2.2.3 (Sep 22, 2017 14:29)
+  * patch
+     - Migrate to conda based CI
+* bob.db.multipie
+  * v2.1.4 (Sep 22, 2017 14:29)
+  * patch
+     - Migrate to conda based CI
+* bob.db.nist_sre12
+  * v3.0.3 (Sep 22, 2017 14:30)
+  * patch
+     - Migrate to conda based CI
+     - fixing recipe
+     - fixing recipe
+     - Fix recipe
+     - remove dependency on six
+* bob.db.putvein
+  * v1.2.1 (Sep 22, 2017 14:30)
+  * patch
+     - Fix packaging warnings
+     - Migrate to conda based CI
+     - This package does not download metadata (closes bob.db.putvein#2)
+* bob.db.replay
+  * v3.0.3 (Sep 22, 2017 14:31)
+  * patch
+     - Migrate to conda based CI
+* bob.db.replaymobile
+  * v1.1.3 (Sep 22, 2017 14:31)
+  * patch
+     - Migrate to conda based CI
+* bob.db.scface
+  * v2.1.5 (Sep 22, 2017 14:31)
+  * patch
+     - Migrate to conda based CI
+* bob.db.utfvp
+  * v2.4.1 (Sep 22, 2017 14:32)
+  * patch
+* bob.db.verafinger
+  * v1.0.0 (Oct 11, 2017 14:24)
+     - Upload all metadata to our server
+     - Fix pkg_resources import
+     - Delete metadata (ship with db files)
+     - Update badges
+     - Reset initial version
+     - Reset authorship of package [ci skip]
+  * patch
+     - Update ignore file
+* bob.db.fv3d
+  * v1.0.0 (Oct 11, 2017 15:42)
+     - Update badges
+     - Remove extra import
+     - Distribute metadata from webserver
+  * patch
+* bob.db.hkpu
+  * patch
+     - Initial commit
+     - Incorporate model-id on File class
+     - Remove unique finger name attribute as that does not match model-id
+     - Fix tests
+     - Remove tests for finger-name (removed)
+     - Add explanation for returning just one single plane from original image
+     - Fix comment
+     - Set private URLs for docs [ci skip]
+     - Fix docs
+     - Add functions to detect and load RoI annotations
+     - Change protocol A to have multiple models instead of multiple samples per model
+     - Update filelist
+     - Update HKPU filelist with new annotations
+     - Add test for annotations
+     - Fix function comment
+     - Add information on the annotations
+     - Fix typo in guide
+     - Port to new CI (closes bob.db.hkpu#1)
+     - Fix build deps
+* bob.db.thufvdt
+  * patch
+     - Initial commit
+     - Add protocol files
+     - Set protocol p3 to match paper descriptions
+     - List protocol files
+     - Fix sql3 file creation
+     - Finalize tests
+     - Import correct module on docs
+     - Fix short descr
+     - Centralize links
+     - Add functions to detect and load RoI annotations
+     - Change db name to thufvdt (simpler)
+     - Updated ignore file
+     - Update metadata contents
+     - Add symlinks to metadata
+     - Add annotation check tests
+     - Add annotation section
+     - Fix typo in func doc
+     - Port to new CI (closes bob.db.thufvdt#1)
+     - Fix build deps
+     - Fix build deps
+     - Pin compatible pillow versions
+     - Fix use of pin_compatible
+* bob.db.mmcbnu6k
+  * patch
+     - Initial commit
+     - Add protocols; Fix creation
+     - Fix tests
+     - Implement roi-based protocol; improve testing
+     - Rectify score count analysis
+     - Avoid creation of unused Finger entries on SQL database
+     - Fix comment
+     - Use model name for scoring
+     - Fixes to model.id -> model.name as model identifier
+     - Return any finger name (all are the same) given the first found model
+     - Fix finger name look-up
+     - Fix function comment
+     - Add information on the annotations
+     - Update file listing to include annotations
+     - Add annotation tests
+     - Add warning about annotations
+     - Include annotations with metadata
+     - Test annotations
+     - Port to new CI (closes bob.db.mmcbnu6k#1)
+* bob.db.hmtvein
+  * patch
+     - Initial commit
+     - Correct database creation
+     - Fix test
+     - Fix references in documentation
+     - Use model name for scoring
+     - Fixes to model.id -> model.name as model identifier
+     - Return any finger name (all are the same) given the first found model
+     - Fix finger name look-up
+     - Add annotations
+     - Add information on the annotations
+     - Fix function comment
+     - Port to new CI (closes bob.db.hmtvein#1)
+* bob.db.voicepa
+  * v1.0.2 (Sep 22, 2017 14:34)
+  * patch
+     - Migrate to conda based CI
+     - removed redundant debug_voicepa.py, fixing issue bob.db.voicepa#1
+* bob.db.xm2vts
+  * v2.1.4 (Sep 22, 2017 14:36)
+  * patch
+     - Migrate to conda based CI
+* bob.db.youtube
+  * v2.1.4 (Sep 22, 2017 14:37)
+  * patch
+     - Migrate to conda based CI
+* bob.db.pericrosseye
+  * patch
+     - Migrate to conda based CI
+     - [conda] Added bob.io.base as requirement
+* bob.db.cuhk_cufs
+  * patch
+     - Created methods modality_separator and modalities
+     - Included test case for objects.modality
+* bob.bio.base
+  * v3.2.0 (Sep 22, 2017 10:55)
+  * v3.2.1 (Sep 26, 2017 15:04)
+     - Switched to 'pdf' backend instead of 'agg'
+  * patch
+     - Update experiments.rst to fix the link to gridtk
+     - execute_only flag is now evaluated from the config file
+     - Testing single config file
+* bob.bio.gmm
+  * v3.1.0 (Sep 22, 2017 14:05)
+     - Adeded an author for the package
+  * patch
+* bob.bio.face
+  * patch
+     - First commit
+     - Added ignore
+     - Added ignore
+     - IJBA
+     - Updated experiments
+     - Updated environment
+     - [ci] Added the project in the ci
+     - Updated some baselines
+     - Updated some tables
+     - UPdate results
+     - Updated baselines
+     - Updated some baselines
+     - Updated baselines
+     - Updated baselines
+     - Reformulated the package
+     - Reformulated the package
+     - Updated baseline script
+     - Updated baselines
+     - Updated baselines
+     - Updated baselines
+     - Updated some paths
+     - Tensorflow hack
+     - Fixed issues with baseline script
+     - Added IJBB
+     - Cleaning up
+     - fixed IJBB
+     - Cleaning up the module
+     - [sphinx] Updated docs
+     - Merging
+     - [sphinx] Updates in the documentation
+     - Appended more baselines
+     - Appended more baselines
+     - New baselines
+     - Update MSCELEB baseline
+     - Updated baselines
+     - Updated baselines
+     - Updated CASIA
+     - Updated CASIA
+     - Updated baselines
+     - Updated MSCeleb
+     - Updated MSCeleb
+     - Updated MSCeleb
+     - Updated MSCeleb
+     - Added inceptionv1
+     - Added inceptionv1
+     - Updated baselines
+     - Inception v1
+     - Inception v1
+     - Inception v1
+     - Inception v1
+     - Inception v1
+     - Updated baselines
+     - Updated baselines
+     - updated batchnorm
+     - Added new baseline
+     - BAselines
+     - New center loss
+     - Update
+     - Update
+     - New baseline mechanism
+     - [ci] Removed mac builds
+     - [ci] Update conda
+* bob.bio.spear
+  * v3.1.1 (Sep 22, 2017 14:48)
+     - reverted patch version
+  * patch
+* bob.bio.video
+  * v3.3.0 (Sep 22, 2017 13:41)
+     * bob.bio.video!20 Docs url fix
+     * bob.bio.video!19 Python36 & docs fixes
+     * bob.bio.video!18 Removed`Algorithm.read_probe`
+  * patch
+     - Add as_array to frame containers
+     - Fixed tuple indexing bug in youtube db load function
+     - Added unit test for the load method of youtube database
+     - Updated manifest to use jpg files for tests
+     - Fixed the unit test connecting it with low level db interface]
+     - Fixed the unit test of youtube load method
+     - Make the original_directory and annotation_directory a property
+     - move the _db initialization before calling super
+     - pass kwargs in the base file class
+     - Migrate to conda based CI
+     - [conda] Added test requirements
+     - Fixed the index.rst to match joint docs requirements
+     - Added quality_assessment_function to preprocessor Wrapper
+     - Fixed the typo
+     - Addressing missing frame annotations
+     - Fixed dict.has_key issue for Python 3
+     - Reverted quality assessment function
+     - Changed missing annotations conditional check + unit tests
+     - Moved condition to one line, removed empty dictionary check
+     - Fixes bob.bio.video#11
+     - Returning none insted of empty FrCont in preproc Wrapper
+     - Make missing annotations None instead of empty dict
+     - Add a failsafevideo wrapper
+     - use ordered dict
+     - Add a video annotator
+     - Finalize video annotators and add docs and tests
+     - Fix import order
+     - use six to check for string types
+     - Account for empty frame containers too
+     - Account for failed extractor
+     - remove unused import thanks to my linter and the way I imported it
+     - mention min_face_size_validator for a possible input
+     - Validators should handle empty annotations too
+     - Fix sphinx warning
+* bob.bio.vein
+  * v1.0.0 (Oct 20, 2017 13:29)
+     * Initial release
+     - Add bob.db.fv3d requirement
+     - Minor fix to logging setup
+     - Implement no-cropping option
+     - Improve sample viewing script
+     - Add blame script
+     - Implement empty annotations() method to satisfy bob.bio.base
+     - Add support for 3D Fingervein Database
+     - Re-estructured Preprocessor to simplify experimentation and configuration
+     - Add matlab reference generation and readme
+     - Remove trailing spaces
+     - Improve comments
+     - Add test for 3D fingervein database
+     - More preprocessor changes
+     - Use scipy directly where possible
+     - Fixes to Maximum Curvature implementation; Improved references & documentation
+     - Update manifest
+     - Speeds-up the evaluation of vein probabilities
+     - Missing import
+     - Avoid warnings
+     - Ensures input image has dtype==float64 before anything else
+     - Fix loading of fv3d fingers
+     - Use 'crop' instead of 'cropper'
+     - Improve inheritance; Fix FixedMask implementation
+     - If sample does not have roi, then returns only image
+     - Add grid resources and explanation on how to run
+     - Implement optional pre-cropping stage on preprocessor
+     - Test cropping with annotated images
+     - Use cropped images on next stages
+     - More tests for preprocessor specific stages
+     - Reflected changes from copper->crop renaming
+     - Don't need to do poly_to_mask() anymore
+     - Improve comments on TomesLeeMask
+     - Use padder by default on stock configurations
+     - Fix missing transposition on port
+     - Implemented normalized-cross-correlation algorithm
+     - Remove ipdb break point
+     - Fix doc error
+     - Add mlp trainer for watershed masker
+     - Add mlp trainer for watershed masker
+     - Add watershed mask detector
+     - Remove useless mask(); Update comments
+     - Fix score splitting
+     - Fix indentation
+     - Allow to view sample using a database name
+     - Fixes to marker detector
+     - Add ON's miura-match with rotation support
+     - Load only what is annotated (allow flexibility)
+     - Support view mode w/o extracted veins
+     - Add watershed preprocessing debug-aid script
+     - Printout metrics as they are evaluated
+     - Allow separate thresholds for foreground and background markers; Allow external…
+     - Use simpler validation
+     - Add script to help debugging watershedding
+     - Fix spelling
+     - Add watershedding link
+     - Simplify baseline, Add watershed NN training
+     - Fix link
+     - Update comment
+     - Set better defaults and use them on stock configuration
+     - Added the HLDI for the putvein database
+     - Added the HLDI for the putvein database
+     - Update documentation to include 3D-fingervein pointers
+     - Fix installation directives
+     - Remove database interfaces from runtime
+     - Added the HLDI for the putvein database
+     - Added the doc and tests and config for the putvein database
+     - Fixed the HLDI of the putvein db - conversion of group names
+     - Added bob.ip.color to requirements.txt
+     - Fix loading of binarised images
+     - Option to save figures discretely
+     - Include databases on bulidout configurations
+     - Fix Hamming Distance module
+     - Make HammingDistance class plus add test
+     - Improve documentation in HammingDistance class
+     - Update baseline results for rlt, mc, and wld
+     - Remove Oleg's implementation of rotation-invariant matching (before release,…
+     - Update README links [ci skip]
+     - Complete design and doc of HammingDistance
+     - Add missing dev packages
+     - Reset preliminary version to 1.0.0a0
+     - update the table for verafinger/nom.
+     - Minor typo fix [ci skip]
+  * v1.0.1 (Oct 20, 2017 16:04)
+     * Update `MANIFEST.in` to include necessary package files
+     - Update MANIFEST to include essential files
+  * patch
+     - updated the whole table. The numbers are very different for the new algorithms.
+     - Port to new CI (closes bob.bio.vein#16)
+     - Try a fix for the scikit image dep
+     - Try another fix for the scikit image dep
+     - Update utfvp interface
+     - Remove uncited ref
+     - Remove uncited ref
+     - Removes more uncited references
+     - Enable compilation of docs w/o latex
+     - Adds bob.bio.vein sphinx ref
+     - Fixed the index.rst to match joint docs requirements
+     - Adaptations to allow vulnerability analysis
+     - Catch-up with changes to verafinger
+* bob.db.voxforge
+  * v2.2.0 (Sep 24, 2017 11:39)
+  * patch
+* bob.pad.base
+  * patch
+     - allow missing files projector
+     - allow missing files projector
+     - allow missing files scoring
+     - allow missing files scoring
+     - allow missing files scoring
+     - Don't rebuild bob.bio.base documentation here. Point to it instead
+     - Do not use pretty prininting with kwargs
+     - Use super
+     - inherit from object
+     - Add an option to return a flat list
+     - Add tests for flat=True
+     - Fix the sphinx warnings
+     - Fix sphinx warnings
+     - filelist-based db for bio and pad exper. Added docs
+     - Migrate to conda based CI
+     - Add padfile to label. Useful for deeplearning
+     - moved SVM algorithm from bob.pad.face
+     - moved SVM algorithm from bob.pad.face
+     - make tests passing
+     - Moved one class GMM from bob.pad.face
+     - Moved LR algo from bob.pad.face
+     - wrong name for scikit-learn package
+     - small correction of imports
+     - Moved SVM Cascade from bob.pad.face
+     - adding missing bob.learn.linear
+     - fixing builds
+     - Fixed the index.rst to match joint docs requirements
+     - Removed some spaces in index.rst
+     - Replace the old pad iso metrics class with a script
+     - improve logging message of projection training
+     - Added missing indirect dependencies
+     - improve requirements.txt and develop.cfg
+     - Update meta.yaml
+     - Update meta.yaml
+     - Update requirements.txt
+     - score computation is not a parallel job
+     - Allow for missing files in the projection step
+     - raise runtimeerror exception instead
+     - [helper] corrected one of the convert frames ...  function to work with numpy arrays
+     - [SVM] made return score working for 1d
+     - [test] added test for helper functions converting array to FrameContainer and vice versa
+     - [test] corrected the np vs numpy in the test from frame container to array
+     - [test] another correction to test if array is numpy.array
+     - [test] yet another correction (previous one was sloppy) to test if array is numpy.array
+     - [test] test if array is numpy.ndarray and not numpy.array ...
+     - [utils] corrected an indentation error causing troubles during conversion…
+     - [doc] fixed some references
+     - added clients option to filelistdb driver
+     - Avoids feature blow-up when std==0.
+     - Fixed convert_frame_cont_to_array addressing missing annotations
+     - Add a predictions algorithm useful for deeplearning
+* bob.pad.face
+  * patch
+     - Added MIFS database
+     - bugfix: array indices fixed
+     - Added face bounding boxes to tree and cleaned database path
+     - Updated documentation
+     - documentation fix
+     - documentation fix
+     - Fixed documentation
+     - bugfix: array indices fixed
+     - documentation fix
+     - documentation fix
+     - Updated documentation
+     - Added face bounding boxes to tree and cleaned database path
+     - Fixed documentation
+     - Cleaning
+     - Merge
+     - Fixed merge errors
+     - Updated documentation
+     - Updated documentation
+     - Updated the MANIFEST.in to make annotations available for MIFS db
+     - Added entry point for VideoSparseCoding preprocessor amd initial version of…
+     - Addded conversion of sparse codes to Frame Container
+     - Added sparse encoding part to VideoSparseCoding preprocessor
+     - Added a part of VideoSparseCoding preprocessor
+     - Moved histogram extraction to preprocessor VideoSparseCoding
+     - Added entry points for VideoHistOfSparseCodes extractor
+     - Fixed an indentation issue in the doc of VideoSparseCoding
+     - Updated the main doc on anomaly detection PAD for Aggregated Db, some doc for…
+     - Optimized the VideoSparseCoding for memory useage
+     - Added the reconstruction error option to VideoSparseCoding preprocessor
+     - Removed temp stuff from setup.py, cleaning of sporse coding algorithms
+     - Fixed the path bug in the video_sparse_coding config file
+     - Added a local face detection option to the VideoFaceCrop class
+     - Updated requirements.txt with dlib facedetector
+     - Added unit tests for classes used in the IQM-GMM pad algorithm
+     - Fixed the None case in face detection utils
+     - Fixed no face detected issue in VideoFaceCrop
+     - Modified the grid config requesting less memory
+     - Added optional face detectors, also empty files will not be saved in the preprocessor
+     - Fixes unit tests after update of bob.ip.dlib
+     - Fixed the unit test to match the latets updates in bob.ip.dlib
+     - Removed a dependency from bob.ip.mtcnn in face detection utils
+     - Added facelandmark detection in utilsbob.pad.face!
+     - unit tests
+     - test
+     - Added mtcnn along with dlib.
+     - Added mtcnn/dlib detectors
+     - Changed function name + some minor modifications
+     - adapt  svm algorithm to other modalities, like voice
+     - adapt one class gmm to other modalities
+     - Added a grandtest-train-eval protocol to the aggregated db
+     - Added grandtest-mobio protocol to the aggregated db
+     - Minor typo fix in the doc of Aggregated db
+     - pep8 formatting done by yapf -ri .
+     - Accept frame_selector in load methods
+     - remove bootstrap-buildout.py
+     - Add a base pad file for all face pad databases
+     - Use all frames. Improve docs
+     - The inital version of grandtest-train-eval-<num_train_samples> protocol for Aggregated db
+     - Fixed the None issue in grandtest-train-eval-<num_train_samples> protocol
+     - Add frame processing functionality
+     - MethodType in Python 3 takes 2 arguments only
+     - Make the original_directory and annotation_directory a property
+     - db not _db
+     - Implement frame by frame loading in replay and replay-mobile
+     - use bob.extension.rc instead of None
+     - Migrate to conda based CI
+     - Moved algos to bob.pad.base and renamed them
+     - updating conda recipe
+     - removing console scripts entry point, since there are no scripts
+     - removing console scripts entry point, since there are no scripts
+     - updating conda recipe
+     - updating conda recipe
+     - fixing test_video_face_crop and conda recipe
+     - Changes in conda recipe according to Anirs comments
+     - Added mobio db to conda recipe, fixed unit tests
+     - Print the assertion value
+     - Fixed the nose tests for VideoFaceCrop
+     - Fixed the pointer to Algos documentation, now in bob.pad.base
+     - Changed host/run requirements
+     - Fixed the index.rst to match joint docs requirements
+     - Removed duplicating db configs, issue bob.pad.face#18
+     - Removed VideoQualityMeasure, replaced with Wraper
+     - removed VideoLBPHistogram, replaced with Wrapper
+     - Removed unused class VideoDataLoader, closes bob.pad.face#20
+     - Added alignment option to normalize_image_size_in_grayscale in ImageFaceCrop
+     - Changed hard-coded constants into face size relative in FaceEyesNorm call
+     - Moved some class methods to functions, WIP
+     - Minor modifications in ImageFaceCrop, WIP
+     - Added initial version of FaceCropAlign, which is refactor of ImageFaceCrop
+     - Fixed the bug in min_face_size check
+     - Removed VideFaceCrop and ImageFaceCrop, replaced with FaceCropAlign+Wrapper
+     - Removed face_detection_utils, updated unit tests
+     - Added underscore to preproc configs to resolve warning when running baselines
+     - Removed deleted utils from docs
+     - Added a FrameSelector to the load() in Aggregated Db HLDI
+     - Changed the default FrameSelector in preproc configs to select all frames
+     - Add a low-intensive grid option named small
+     - Use our common right eye and left eye names instead
+     - Fix the tests too
+* bob.db.oulunpu
+  * patch
+     - Initial commit
+     - Implement frames
+     - add ci
+     - update license
+     - Improve readme
+     - Add a config file
+     - Correct frame size in docs
+     - include list files in the package as well
+     - Make sure all_files is working
+     - models depends on protocol
+     - Add frame_size methods
+     - Adopt to the new database
+     - Use bob.pad instead of bob.dap
+     - fixes
+     - fixes
+     - Fix entry point
+     - Use bob.extension.rc
+     - Add bob.bio.config entry point
+     - Fix the config file
+     - Add conda packaging
+     - Updates CI file
+     - Add annotation support and reorganize frame reading
+     - fix sphinx warnings
+* bob.db.uvad
+  * patch
+     - Initial commit
+     - Fix entry point
+     - Use bob.extension.rc
+     - Adopt the tests as well
+     - improve tests
+     - Fix cropping
+     - Add bob.bio.config entry point
+     - Add conda packaging
+     - Updates CI file
diff --git a/release/generate_changelog.py b/release/generate_changelog.py
new file mode 100755
index 0000000..3ef1ec0
--- /dev/null
+++ b/release/generate_changelog.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+
+"""
+Generate changelog file for all packages before release. This script uses python-gitlab package for access to Gitlab's API.
+
+Usage:
+  {0} <private_token>
+  {0} -h | --help
+  {0} --version
+
+Arguments:
+  <private_token>  Private token used to access GitLab.
+  
+Options:
+  -h --help                    Show this screen.
+  --version                    Show version.
+
+"""
+
+import os
+import sys
+from docopt import docopt
+import gitlab
+import distutils.version
+import datetime
+
+
+def get_packages_list(gl):
+    nightlies = gl.projects.list(search='bob.nightlies')[0]
+    nightlies_order = nightlies.files.get(file_path='order.txt', ref='master')
+    pkg_list_ordered = nightlies_order.decode().decode().split('\n')
+    pkg_list_ordered = [line for line in pkg_list_ordered if (line.strip() and not line.startswith('#'))]
+    return pkg_list_ordered
+
+
+# release date of last Bob release + 1 day
+def bob_last_release(gl):
+    bobpkg = gl.projects.get(id=1535)  # 1535 is id of 'bob' meta-package
+    last_bob_tag = bobpkg.tags.list()[0]  # get the last tag
+    return last_bob_tag.commit['committed_date']
+
+
+def get_datetime_from_gitdate(gitdate):
+    #    import ipdb; ipdb.set_trace()
+    return datetime.datetime.strptime(gitdate[:-6], '%Y-%m-%dT%H:%M:%S.%f')
+
+
+def sort_commits(commits):
+    return sorted(commits, key=lambda x: get_datetime_from_gitdate(x.committed_date))
+
+
+def sort_tags(tags):
+    return sorted(tags, key=lambda x: get_datetime_from_gitdate(x.commit['committed_date']))
+
+
+def get_tag_changelog(tag):
+    try:
+        return tag.release['description']
+    except Exception:
+        return ''
+
+
+def print_tags(pkg_name, gitpkg, since='2017-01-01T00:00:00Z'):
+    since = get_datetime_from_gitdate(since)
+    tags = gitpkg.tags.list()
+    # sort tags by date
+    tags = filter(lambda x: get_datetime_from_gitdate(x.commit['committed_date']) >= since, tags)
+    tags = sort_tags(tags)
+    print('* ' + pkg_name)
+    for tag in tags:
+        print_one_tag(pkg_name, tag)
+
+
+def print_one_tag(pkg_name, tag):
+    print('  * ' + tag.name + ' (' + get_datetime_from_gitdate(tag.commit['committed_date']).strftime(
+        '%b %d, %Y %H:%M') + ')')
+    for line in get_tag_changelog(tag).split('\r\n'):
+        line = line.strip()
+        if line.startswith('* ') or line.startswith('- '):
+            line = line[2:]
+        line = line.replace('!', pkg_name + '!')
+        line = line.replace('#', pkg_name + '#')
+        if not line:
+            continue
+        print(' ' * 5 + '* ' + line)
+
+
+def print_commits(pkg_name, gitpkg, since='2017-01-01T00:00:00Z'):
+    #    import ipdb; ipdb.set_trace()
+    commits = gitpkg.commits.list(since=since, all=True)
+    # sort commits by date
+    commits = sort_commits(commits)
+    print('* ' + pkg_name)
+    print_commits_range(pkg_name, commits)
+
+
+def print_commits_range(pkg_name, commits):
+    for commit in commits:
+        commit_title = commit.title
+        # skip commits that do not carry much useful information
+        if '[skip ci]' in commit_title or \
+                        'Merge branch' in commit_title or \
+                        'Increased stable' in commit_title:
+            continue
+        commit_title = commit_title.strip()
+        commit_title = commit_title.replace('!', pkg_name + '!')
+        commit_title = commit_title.replace('#', pkg_name + '#')
+        # print('  - ' + get_datetime_from_gitdate(x.committed_date).strftime('%Y-%m-%d %H:%M:%S') + ":" + commit_title)
+        print(' ' * 5 + '- ' + commit_title)
+
+
+def print_tags_with_commits(pkg_name, gitpkg, since='2017-01-01T00:00:00Z'):
+    # get tags since release and sort them
+    datetime_since = get_datetime_from_gitdate(since)
+    tags = gitpkg.tags.list()
+    # sort tags by date
+    tags = filter(lambda x: get_datetime_from_gitdate(x.commit['committed_date']) >= datetime_since, tags)
+    tags = sort_tags(tags)
+    # get commits since release date and sort them too
+    commits = gitpkg.commits.list(since=since, all=True)
+    # sort commits by date
+    commits = sort_commits(commits)
+    print('* ' + pkg_name)
+    # go through tags and print each with its message and corresponding commits
+    start_date = datetime_since
+    for tag in tags:
+        # print tag name and its text
+        print_one_tag(pkg_name, tag)
+        # print commits from the previous tag up to this one
+        end_date = get_datetime_from_gitdate(tag.commit['committed_date'])
+        commits4tag = filter(lambda x: (
+            get_datetime_from_gitdate(x.committed_date) > start_date and get_datetime_from_gitdate(
+                x.committed_date) <= end_date), commits)
+        print_commits_range(pkg_name, commits4tag)
+        start_date = end_date
+    # print the tentative patch version bump for the future tag
+    print('  * patch')
+    # print leftover commits that were not tagged yet
+    leftover_commits = filter(lambda x: get_datetime_from_gitdate(x.committed_date) > start_date, commits)
+    print_commits_range(pkg_name, leftover_commits)
+
+
+def main(private_token):
+    gl = gitlab.Gitlab('https://gitlab.idiap.ch', private_token=private_token, api_version=4)
+    pkg_list_ordered = get_packages_list(gl)
+    #    print(pkg_list_ordered)
+    last_release_date = bob_last_release(gl)
+    #    print(last_release_date)
+    # print name of the package, its version and tags
+    for pkg_name in pkg_list_ordered:
+        gitpkg = gl.projects.list(search=pkg_name)[0]
+        #        print_tags(pkg_name, gitpkg, since=last_release_date))
+        #        print_commits(pkg_name, gitpkg, since=last_release_date)
+        print_tags_with_commits(pkg_name, gitpkg, since=last_release_date)
+
+
+if __name__ == '__main__':
+    arguments = docopt(__doc__.format(sys.argv[0]), version='Changelog 0.0.1')
+    main(arguments['<private_token>'])
-- 
GitLab