sapling/infinitepush
Stanislau Hlebik 2faa6709ca infinitepush: change backup state file format
Summary:
Previously we saved bookmark hash and revision number as state of
the last backup. Storing last backed up revision is error-prone. I saw
a few corrupted backups where bookmarks pointed to non-backed up
nodes. Also this approach puts more pressure on mysql bundle index.
On every backup it first deletes all existing backup bookmarks and then it
writes new bookmarks. Even if user changed one head or one bookmark
(and that is the usual case) current approach still deletes bookmarks first
and then rewrites them.

Instead let's store all backed up heads and bookmarks locally in json format.
Json was chosen because it's simple and human-readable. Then during backup
let's compare last backed up state to the current state of the repo, and send
to the server only the difference.

Test Plan: arc unit

Reviewers: #mercurial, durham

Reviewed By: durham

Subscribers: durham, mjpieters, #sourcecontrol

Differential Revision: https://phabricator.intern.facebook.com/D4700930

Tasks: 15389402

Signature: t1:4700930:1489613249:a34369bf53e0718c22258304493dfa27b578857f
2017-03-16 02:22:39 -07:00
..
integrationtests infinitepush: move integration test to the rool level directory 2016-08-31 01:44:59 -07:00
tests infinitepush: fix pyflakes 2016-10-24 06:08:56 -07:00
__init__.py infinitepush: reuse bundlerepo 2017-03-06 00:40:49 -08:00
backupcommands.py infinitepush: change backup state file format 2017-03-16 02:22:39 -07:00
bundleparts.py fb-hgext: make compatible to upstream changes 2017-02-23 04:08:18 -08:00
common.py infinitepush: refactoring 2017-01-06 04:15:16 -08:00
fileindexapi.py infinitepush: addmanybookmarks indexapi method 2016-12-01 08:41:23 -08:00
indexapi.py infinitepush: addmanybookmarks indexapi method 2016-12-01 08:41:23 -08:00
README infinitepush: sample implementation 2016-08-26 06:09:01 -07:00
sqlindexapi.py infinitepush: add locktimeout 2017-01-24 10:32:44 -08:00
store.py infinitepush: fix string formatting 2017-02-03 07:10:53 -08:00

## What is it?

This extension adds ability to save certain pushes to a remote blob store
as bundles and to serve commits from remote blob store.
The revisions are stored on disk or in everstore.
The metadata are stored in sql or on disk.

## Config options

infinitepush.branchpattern: pattern to detect a scratchbranch, example
                            're:scratch/.+'

infinitepush.indextype: disk or sql for the metadata
infinitepush.reponame: only relevant for sql metadata backend, reponame to put in
                       sql

infinitepush.indexpath: only relevant for ondisk metadata backend, the path to
                        store the index on disk. If not set will be under .hg
                        in a folder named filebundlestore

infinitepush.storepath: only relevant for ondisk metadata backend, the path to
                        store the bundles. If not set, it will be
                        .hg/filebundlestore