sapling/tests/test-sampling.t
Laurent Charignon 73a45df608 sampling: add event filtering
Summary:
Before this patch, all the events logged by the sampling extensions
were dumped to the log file. With this patch, one can specify the relevant
events to log as well as a value to be added for each event. This will be
useful to specify what logging table to use for each of the logged events.
More information added to the documentation accordingly.

Test Plan:
The test changes accordingly and we add events that gets stopped
by the filter to make sure that the filter works.

Reviewers: ttung, durham

Differential Revision: https://phabricator.intern.facebook.com/D3387446
2016-06-07 10:24:56 -07:00

61 lines
1.7 KiB
Perl

Setup
$ PYTHONPATH=$TESTDIR/..:$PYTHONPATH
$ export PYTHONPATH
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> echo "add $1" > msg
> echo "" >> msg
> hg ci -l msg
> }
Init the repo
$ hg init testrepo
$ cd testrepo
$ mkcommit a
Create an extension that logs every commit and also call repo.revs twice
Create an extension that logs the call to commit
$ cat > $TESTTMP/logcommit.py << EOF
> from mercurial import extensions, localrepo
> def cb(sample):
> return len(sample)
> def _commit(orig, repo, *args, **kwargs):
> repo.ui.log("commit", "match filter", k=1, a={"hi":"ho"})
> repo.ui.log("foo", "does not match filter", k=1, a={"hi":"ho"})
> return orig(repo, *args, **kwargs)
> def extsetup(ui):
> extensions.wrapfunction(localrepo.localrepository, 'commit', _commit)
> EOF
Set up the extension and set a log file
We whitelist only the 'commit' key, only the events with that key will be
logged
$ cat >> $HGRCPATH << EOF
> [sampling]
> key.commit=commit_table
> [extensions]
> sampling=
> EOF
$ LOGDIR=`pwd`/logs
$ mkdir $LOGDIR
$ echo "logcommit=$TESTTMP/logcommit.py" >> $HGRCPATH
$ echo "[sampling]" >> $HGRCPATH
$ echo "filepath = $LOGDIR/samplingpath.txt" >> $HGRCPATH
Do a couple of commits we expect to log two call to repo.revs for each commit
$ mkcommit b
$ mkcommit c
>>> import json
>>> with open("$LOGDIR/samplingpath.txt") as f:
... data = f.read()
>>> for record in data.strip("\0").split("\0"):
... parsedrecord = json.loads(record)
... print parsedrecord["data"]["msg"], parsedrecord["category"]
... assert len(parsedrecord["data"]) == 3
[u'match filter'] commit_table
[u'match filter'] commit_table