|
Ninja
|
As build commands run they can output extra dependency information (e.g. More...
#include <deps_log.h>
Classes | |
| struct | Deps |
Public Member Functions | |
| void | Close () |
| const vector< Deps * > & | deps () const |
| DepsLog () | |
| Deps * | GetDeps (Node *node) |
| bool | Load (const string &path, State *state, string *err) |
| const vector< Node * > & | nodes () const |
| Used for tests. | |
| bool | OpenForWrite (const string &path, string *err) |
| bool | Recompact (const string &path, string *err) |
| Rewrite the known log entries, throwing away old data. | |
| bool | RecordDeps (Node *node, TimeStamp mtime, const vector< Node * > &nodes) |
| bool | RecordDeps (Node *node, TimeStamp mtime, int node_count, Node **nodes) |
| ~DepsLog () | |
Private Member Functions | |
| bool | RecordId (Node *node) |
| bool | UpdateDeps (int out_id, Deps *deps) |
Private Attributes | |
| vector< Deps * > | deps_ |
| Maps id -> deps of that id. | |
| FILE * | file_ |
| bool | needs_recompaction_ |
| vector< Node * > | nodes_ |
| Maps id -> Node. | |
Friends | |
| struct | DepsLogTest |
As build commands run they can output extra dependency information (e.g.
header dependencies for C source) dynamically. DepsLog collects that information at build time and uses it for subsequent builds.
The on-disk format is based on two primary design constraints:
Based on these stats, here's the current design. The file is structured as version header followed by a sequence of records. Each record is either a path string or a dependency list. Numbering the path strings in file order gives them dense integer ids. A dependency list maps an output id to a list of input ids.
Concretely, a record is: two bytes record length, high bit indicates record type (implies max record length 32k) path records contain just the string name of the path dependency records are an array of 4-byte integers [output path id, output path mtime, input path id, input path id...] (The mtime is compared against the on-disk output path mtime to verify the stored data is up-to-date.) If two records reference the same output the latter one in the file wins, allowing updates to just be appended to the file. A separate repacking step can run occasionally to remove dead records.
Definition at line 63 of file deps_log.h.
| DepsLog::DepsLog | ( | ) | [inline] |
Definition at line 64 of file deps_log.h.
Definition at line 35 of file deps_log.cc.
References Close().
| void DepsLog::Close | ( | ) |
Definition at line 137 of file deps_log.cc.
References file_.
Referenced by OpenForWrite(), TEST_F(), and ~DepsLog().
| const vector<Deps*>& DepsLog::deps | ( | ) | const [inline] |
Definition at line 90 of file deps_log.h.
Referenced by Load(), Recompact(), RecordDeps(), and UpdateDeps().
| DepsLog::Deps * DepsLog::GetDeps | ( | Node * | node | ) |
Definition at line 248 of file deps_log.cc.
References deps_, and Node::id().
Referenced by ImplicitDepLoader::LoadDepsFromLog(), and RecordDeps().
| bool DepsLog::Load | ( | const string & | path, |
| State * | state, | ||
| string * | err | ||
| ) |
Definition at line 143 of file deps_log.cc.
References deps(), State::GetNode(), Node::id(), kCurrentVersion, kFileSignature, METRIC_RECORD, needs_recompaction_, DepsLog::Deps::nodes, nodes_, Node::set_id(), Truncate(), and UpdateDeps().
Referenced by TEST_F().
| const vector<Node*>& DepsLog::nodes | ( | ) | const [inline] |
Used for tests.
Definition at line 89 of file deps_log.h.
| bool DepsLog::OpenForWrite | ( | const string & | path, |
| string * | err | ||
| ) |
Definition at line 39 of file deps_log.cc.
References Close(), file_, kCurrentVersion, kFileSignature, needs_recompaction_, Recompact(), and SetCloseOnExec().
Referenced by TEST_F().
| bool DepsLog::Recompact | ( | const string & | path, |
| string * | err | ||
| ) |
Rewrite the known log entries, throwing away old data.
Definition at line 256 of file deps_log.cc.
References deps(), deps_, METRIC_RECORD, DepsLog::Deps::mtime, DepsLog::Deps::node_count, DepsLog::Deps::nodes, and nodes_.
Referenced by OpenForWrite().
| bool DepsLog::RecordDeps | ( | Node * | node, |
| TimeStamp | mtime, | ||
| const vector< Node * > & | nodes | ||
| ) |
Definition at line 71 of file deps_log.cc.
Referenced by Builder::FinishCommand().
| bool DepsLog::RecordDeps | ( | Node * | node, |
| TimeStamp | mtime, | ||
| int | node_count, | ||
| Node ** | nodes | ||
| ) |
Definition at line 77 of file deps_log.cc.
References deps(), file_, GetDeps(), Node::id(), DepsLog::Deps::mtime, DepsLog::Deps::node_count, DepsLog::Deps::nodes, RecordId(), and UpdateDeps().
| bool DepsLog::RecordId | ( | Node * | node | ) | [private] |
Definition at line 317 of file deps_log.cc.
References file_, nodes_, Node::path(), and Node::set_id().
Referenced by RecordDeps().
| bool DepsLog::UpdateDeps | ( | int | out_id, |
| Deps * | deps | ||
| ) | [private] |
Definition at line 306 of file deps_log.cc.
Referenced by Load(), and RecordDeps().
friend struct DepsLogTest [friend] |
Definition at line 107 of file deps_log.h.
vector<Deps*> DepsLog::deps_ [private] |
Maps id -> deps of that id.
Definition at line 105 of file deps_log.h.
Referenced by GetDeps(), Recompact(), and UpdateDeps().
FILE* DepsLog::file_ [private] |
Definition at line 100 of file deps_log.h.
Referenced by Close(), OpenForWrite(), RecordDeps(), and RecordId().
bool DepsLog::needs_recompaction_ [private] |
Definition at line 99 of file deps_log.h.
Referenced by Load(), and OpenForWrite().
vector<Node*> DepsLog::nodes_ [private] |
Maps id -> Node.
Definition at line 103 of file deps_log.h.
Referenced by Load(), Recompact(), and RecordId().
1.7.6.1