mirror of
https://github.com/status-im/sourcecred.git
synced 2025-02-04 08:44:00 +00:00
55950f5354
Summary: This completes the minimum viable public API for the `Mirror` class. As described on the docstring, the typical workflow for a client is: - Invoke the constructor to acquire a `Mirror` instance. - Invoke `registerObject` to register a root object of interest. - Invoke `update` to update all transitive dependencies. - Invoke `extract` to retrieve the data in structured form. It is the third step that is added in this commit. In this commit, we also include a command-line demo of the Mirror module, which exercises exactly the workflow above with a hard-coded GitHub schema. This can be used to test the module’s behavior with real-world data. I plan to remove this entry point once we integrate this module into SourceCred. This commit makes progress toward #622. Test Plan: Unit tests included for the core functionality. The imperative shell does not have automated tests. You can test it as follows. First, run `yarn backend` to build `bin/mirror.js`. Then, run: ```shell $ node bin/mirror.js /tmp/mirror-demo.db \ > Repository MDEwOlJlcG9zaXRvcnkxMjMyNTUwMDY= \ > 60 ``` Here, the big base64 string is the ID for the sourcecred/example-github repository. (This is listed in `graphql/demo.js`, alongside the ID for the SourceCred repository itself.) The value 60 is a TTL in seconds. The database filename is arbitrary. This will print out a ton of output to stderr (all intermediate queries and responses, for debugging purposes), and then the full contents of the example repository to stdout. Run the command again, and it should finish instantly. On my machine, the main function runs faster than the Node startup time (50ms vs 60ms). Then, re-run the command, changing the TTL from `60` to `1`. Note that it sends off some queries and then prints the same repository. It is safe to kill the program at any time, either while waiting for a response from GitHub or while processing the results, because the mirror module takes advantage of SQLite’s transaction-safety. Intermediate updates will be persisted, so you’ll lose just a few seconds of progress. You can also of course dive into the generated database yourself to explore the data. It’s good fun. wchargin-branch: mirror-e2e-update