|RCE| 4.18.0 |RNS|
------------------

Release Date
^^^^^^^^^^^^

- 2020-01-05


New Features
^^^^^^^^^^^^

- Artifacts: are no longer in BETA. New info page is available for uploaded artifacts
  which exposes some useful information like sha256, various access urls etc, and also
  allows deletion of artifacts, and updating their description.
- Artifacts: support new download url based on access to artifacts using new auth-token types.
- Artifacts: added ability to store artifacts using API, and internal cli upload.
  This allows uploading of artifacts that can have 100s of GBs in size efficiently.
- Artifacts: added metadata logic to store various extra custom data for artifacts.
- Comments: added support for adding comment attachments using the artifacts logic.
  Logged in users can now pick or drag and drop attachments into comment forms.
- Comments: enable linkification of certain patterns on comments in repo/pull request scopes.
  This will render now active links to commits, pull-requests mentioned in comments body.
- Jira: new update integration plugin.
  Plugin now fetches possible transitions from tickets and show them to users in the interface.
  Allow sending extra attributes during a transition like `resolution` message.
- Navigation: Added new consistent and contextual way of creating new objects
  likes gists, repositories, and repository groups using dedicated action (with a `+` sign)
  available in the top navigation.
- Hovercards: added new tooltips and hovercards to expose certain information for objects shown in UI.
  RhodeCode usernames, issues, pull-requests will have active hovercard logic that will
  load extra information about them and exposing them to users.
- Files: all readme files found in repository file browser will be now rendered, allowing having readme per directory.
- Search: expose line counts in search files information.
- Audit-logs: expose download user audit logs as JSON file.
- Users: added description field for users.
  Allows users to write a short BIO, or description of their role in the organization.
- Users: allow super-admins to change bound authentication type for users.
  E.g internal rhodecode accounts can be changed to ldap easily from user settings page.
- Pull requests: simplified the UI for display view, hide less important information and expose the most important ones.
- Pull requests: add merge check that detects WIP marker in title.
  Usually WIP in title means unfinished task that needs still some work, such marker will prevent accidental merges.
- Pull requests: TODO comments have now a dedicated box below reviewers to keep track
  of important TODOs that still need attention before review process is finalized.
- Pull requests: participants of pull request will receive an email about update of a
  pull requests with a small summary of changes made.
- Pull requests: change the naming from #NUM into !NUM.
  !NUM format is now parsed and linkified in comments and commit messages.
- Pull requests: pull requests which state is changing can now be viewed with a limited view.
- Pull requests: re-organize merge/close buttons and merge checks according to the new UI.
- Pull requests: update commits button allows a force-refresh update now using dropdown option.
- Pull requests: added quick filter to grid view to filter/search pull requests in a repository.
- Pull requests: closing a pull-request without a merge requires additional confirmation now.
- Pull requests: merge checks will now show which files caused conflicts and are blocking the merge.
- Emails: updated all generated emails design and cleanup the data fields they expose.
  a) More consistent UI for all types of emails. b) Improved formatting of plaintext emails
  c) Added reply link to comment type emails for quicker response action.


General
^^^^^^^

- Artifacts: don't show hidden artifacts, allow showing them via a GET ?hidden=1 flag.
  Hidden artifacts are for example comment attachments.
- UI: new commits page, according to the new design, which started on 4.17.X release lines
- UI: use explicit named actions like "create user" instead of generic "save" which is bad UX.
- UI: fixed problems with generating last change in repository groups.
  There's now a new logic that checks all objects inside group for latest update time.
- API: add artifact `get_info`, and `store_metadata` methods.
- API: allowed to specify extra recipients for pr/commit comments api methods.
- Vcsserver: set file based cache as default for vcsserver which can be shared
  across multiple workers saving memory usage.
- Vcsserver: added redis as possible cache backend for even greater performance.
- Dependencies: bumped GIT version to 2.23.0
- Dependencies: bumped SVN version to 1.12.2
- Dependencies: bumped Mercurial version to 5.1.1 and hg-evolve to 9.1.0
- Search: added logic for sorting ElasticSearch6 backend search results.
- User bookmarks: make it easier to re-organize existing entries.
- Data grids: hide pagination for single pages in grids.
- Gists: UX, removed private/public gist buttons and replaced them with radio group.
- Gunicorn: moved all configuration of gunicorn workers to .ini files.
- Gunicorn: added worker memory management allowing setting maximum per-worker memory usage.
- Automation: moved update groups task into celery task
- Cache commits: add option to refresh caches manually from advanced pages.
- Pull requests: add indication of state change in list of pull-requests and actually show them in the list.
- Cache keys: register and self cleanup cache keys used for invalidation to prevent leaking lot of them into DB on worker recycle
- Repo groups: removed locking inheritance flag from repo-groups. We'll deprecate this soon and this only brings in confusion
- System snapshot: improved formatting for better readability
- System info: expose data about vcsserver.
- Packages: updated celery to 4.3.0 and switch default backend to redis instead of RabbitMQ.
  Redis is stable enough and easier to install. Having Redis simplifies the stack as it's used in other parts of RhodeCode.
- Dependencies: bumped alembic to 1.2.1
- Dependencies: bumped amqp==2.5.2 and kombu==4.6.6
- Dependencies: bumped atomicwrites==1.3.0
- Dependencies: bumped cffi==1.12.3
- Dependencies: bumped configparser==4.0.2
- Dependencies: bumped deform==2.0.8
- Dependencies: bumped dogpile.cache==0.9.0
- Dependencies: bumped hupper==1.8.1
- Dependencies: bumped mako to 1.1.0
- Dependencies: bumped markupsafe to 1.1.1
- Dependencies: bumped packaging==19.2
- Dependencies: bumped paste==3.2.1
- Dependencies: bumped pastescript==3.2.0
- Dependencies: bumped pathlib2 to 2.3.4
- Dependencies: bumped pluggy==0.13.0
- Dependencies: bumped psutil to 5.6.3
- Dependencies: bumped psutil==5.6.5
- Dependencies: bumped psycopg2==2.8.4
- Dependencies: bumped pycurl to 7.43.0.3
- Dependencies: bumped pyotp==2.3.0
- Dependencies: bumped pyparsing to 2.4.2
- Dependencies: bumped pyramid-debugtoolbar==4.5.1
- Dependencies: bumped pyramid-mako to 1.1.0
- Dependencies: bumped redis to 3.3.8
- Dependencies: bumped sqlalchemy to 1.3.8
- Dependencies: bumped sqlalchemy==1.3.11
- Dependencies: bumped test libraries.
- Dependencies: freeze alembic==1.3.1
- Dependencies: freeze python-dateutil
- Dependencies: freeze redis==3.3.11
- Dependencies: freeze supervisor==4.1.0


Security
^^^^^^^^

- Security: fixed issues with exposing wrong http status (403) indicating repository with
  given name exists and we don't have permissions to it. This was exposed in the redirection
  logic of the global pull-request page. In case of redirection we also exposed
  repository name in the URL.


Performance
^^^^^^^^^^^

- Core: many various small improvements and optimizations to make rhodecode faster then before.
- VCSServer: new cache implementation for remote functions.
  Single worker shared caches that can use redis/file-cache.
  This greatly improves performance on larger instances, and doesn't trigger cache
  re-calculation on worker restarts.
- GIT: switched internal git operations from Dulwich to libgit2 in order to obtain better performance and scalability.
- SSH: skip loading unneeded application parts for SSH to make execution of ssh commands faster.
- Main page: main page will now load repositories and repositories groups using partial DB calls instead of big JSON files.
  In case of many repositories in root this could lead to very slow page rendering.
- Admin pages: made all grids use same DB based partial loading logic. We'll no longer fetch
  all objects into JSON for display purposes. This significantly improves speed of those pages in case
  of many objects shown in them.
- Summary page: use non-memory cache for readme, and cleanup cache for repo stats.
  This change won't re-cache after worker restarts and can be shared across all workers
- Files: only check for git_lfs/hg_largefiles if they are enabled.
  This speeds up fetching of files if they are not LF and very big.
- Vcsserver: added support for streaming data from the remote methods. This allows
  to stream very large files without taking up memory, mostly for usage in SVN when
  downloading large binaries from vcs system.
- Files: added streaming remote attributes for vcsserver.
  This change enables streaming raw content or raw downloads of large files without
  transferring them over to enterprise for pack & repack using msgpack.
  Msgpack has a limit of 2gb and generally pack+repack for ~2gb is very slow.
- Files: ensure over size limit files never do any content fetching when viewing such files.
- VCSServer: skip host verification to speed up pycurl calls.
- User-bookmarks: cache fetching of bookmarks since this is quite expensive query to
  make with joinedload on repos/repo groups.
- Goto-switcher: reduce query data to only required attributes for speedups.
- My account: owner/watched repos are now loaded only using DB queries.


Fixes
^^^^^

- Mercurial: move imports from top-level to prevent from loading mercurial code on hook execution for svn/git.
- GIT: limit sync-fetch logic to only retrieve tags/ and heads/ with default execution arguments.
- GIT: fixed issue with git submodules detection.
- SVN: fix checkout url for ssh+svn backend not having special prefix resulting in incorrect command shown.
- SVN: fixed problem with showing empty directories.
- OAuth: use a vendored version of `authomatic` library, and switch Bitbucket authentication to use oauth2.
- Diffs: handle paths with quotes in diffs.
- Diffs: fixed outdated files in pull-requests re-using the filediff raw_id for anchor generation. Fixes #5567
- Diffs: toggle race condition on sticky vs wide-diff-mode that caused some display problems on larger diffs.
- Pull requests: handle exceptions in state change and improve logging.
- Pull requests: fixed title/description generation for single commits which are numbers.
- Pull requests: changed the source of changes to be using shadow repos if it exists.
  In case of `git push -f` and rebase we lost commits in the repo resulting in
  problems of displaying versions of pull-requests.
- Pull requests: handle case when removing existing files from a repository in compare versions diff.
- Files: don't expose copy content helper in case of binary files.
- Registration: properly expose first_name/last_name into email on user registration.
- Markup renderers: fixed broken code highlight for rst files.
- Ui: make super admin be named consistently across ui.
- Audit logs: fixed search cases with special chars such as `-`.


Upgrade notes
^^^^^^^^^^^^^

- Major Celery Version upgrade. The 4.18.X release includes a major Celery version.
  It's recommended to run `rccontrol self-stop && rccontrol self-init` after the
  upgrade to ensure celery workers are restarted and updated.

- New Automation task. We've changed the logic for updating latest change inside repository group.
  New logic includes scanning for changes in all nested objects. Since this is a heavy task
  a new dedicated scheduler task has been created to update it automatically on a scheduled base.
  Please review in `admin > settings > automation` to enable this task.

- New safer encryption algorithm. Some setting values are encrypted before storing it inside the database.
  To keep full backward compatibility old AES algorithm is used.
  If you wish to enable a safer option set fernet encryption instead inside rhodecode.ini
  `rhodecode.encrypted_values.algorithm = fernet`

- Pull requests UI changes. We've simplified the UI on pull requests page.
  Please review the new UI to prevent surprises. All actions from old UI should be still possible with the new one.

- Redis is now a default recommended backend for Celery and replaces previous rabbitmq.
  Redis is generally easier to manage and install, and it's also very stable for usage
  in the scheduler/celery async tasks. Since we also recommend Redis for caches the application
  stack can be simplified by removing rabbitmq and replacing it with single Redis instance.

- Recommendation for using Redis as the new cache backend on vcsserver.
  Since Version 4.18.0 VCSServer has a new cache implementation for VCS data.
  By default, for simplicity the cache type is file based. We strongly recommend using
  Redis instead for better Performance and scalability
  Please review vcsserver.ini settings under:
  `rc_cache.repo_object.backend = dogpile.cache.rc.redis_msgpack`

- Gunicorn configuration now moved to .ini files.
  Upgrading to 4.18.X will overwrite the gunicorn_conf.py file. If there are any custom changes in that file
  they will be lost. Recommended way to configure gunicorn is now via the .ini files. Please check `rhodecode.template.ini` file
  for example gunicorn configuration.

- New memory monitoring for Gunicorn workers. Starting from 4.18 release a option was added
  to limit the maximum amount of memory used by a worker.
  Please review new settings in `[server:main]` section for memory management in both
  rhodecode.ini and vcsserver.ini::

    ; Maximum memory usage that each worker can use before it will receive a
    ; graceful restart signal 0 = memory monitoring is disabled
    ; Examples: 268435456 (256MB), 536870912 (512MB)
    ; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB)
    memory_max_usage = 0
