| Wt examples
    3.3.0
    | 
Git utility class for browsing git archives. More...
#include <Git.h>
| Classes | |
| class | Exception | 
| Exception class.  More... | |
| struct | Object | 
| Git object.  More... | |
| class | ObjectId | 
| Git object Id.  More... | |
| Public Types | |
| enum | ObjectType { Tree, Commit, Blob } | 
| Git object type.  More... | |
| typedef std::list< std::pair < std::string, std::string > > | Cache | 
| Public Member Functions | |
| Git () | |
| Constructor. | |
| void | setRepositoryPath (const std::string &repository) | 
| Set the git repository path. | |
| ObjectId | getCommitTree (const std::string &revision) const | 
| Get the tree for a particular revision. | |
| ObjectId | getCommit (const std::string &revision) const | 
| Get the commit for a particular revision. | |
| ObjectId | getTreeFromCommit (const ObjectId &commit) const | 
| Get the tree for a particular commit. | |
| Object | treeGetObject (const ObjectId &tree, int index) const | 
| Get some info on a tree object. | |
| int | treeSize (const ObjectId &tree) const | 
| Return the number of objects inside a tree object. | |
| std::string | catFile (const ObjectId &id) const | 
| Return the raw contents of a git object. | |
| Private Member Functions | |
| void | checkRepository () const | 
| Checks the repository. | |
| bool | getCmdResult (const std::string &cmd, std::string &result, const std::string &tag) const | 
| Returns a line identified by a tag from the output of a git command. | |
| bool | getCmdResult (const std::string &cmd, std::string &result, int index) const | 
| Returns the ith line from the output of a git command. | |
| int | getCmdResultLineCount (const std::string &cmd) const | 
| Returns the number of lines in the output of a git command. | |
| Private Attributes | |
| std::string | repository_ | 
| The path to the repository. | |
| Cache | cache_ | 
| A small LRU cache that stores results of git commands. | |
Git utility class for browsing git archives.
Far from complete! Only browses git revisions.
| typedef std::list<std::pair<std::string, std::string> > Git::Cache | 
| enum Git::ObjectType | 
| Git::Git | ( | ) | 
| std::string Git::catFile | ( | const ObjectId & | id | ) | const | 
Return the raw contents of a git object.
| Exception | : in case of a git error. | 
Definition at line 194 of file Git.C.
{
  std::string result;
  if (!getCmdResult("cat-file -p " + id.toString(), result, -1))
    throw Exception("Git: could not cat '" + id.toString() + "'");
  return result;
}
| void Git::checkRepository | ( | ) | const  [private] | 
Checks the repository.
| Exception | : in case the repository is not a valid. | 
Definition at line 323 of file Git.C.
{
  POpenWrapper p("git --git-dir=" + repository_ + " branch", cache_);
  std::string r;
  if (p.exitStatus() != 0)
    throw Exception("Git error: " + p.readLine(r));
}
| bool Git::getCmdResult | ( | const std::string & | cmd, | 
| std::string & | result, | ||
| const std::string & | tag | ||
| ) | const  [private] | 
Returns a line identified by a tag from the output of a git command.
The line is filled in result. Returns whether a line starting with tag could be found.
| Exception | : in case the command failed | 
Definition at line 288 of file Git.C.
{
  POpenWrapper p("git --git-dir=" + repository_ + " " + gitCmd, cache_);
  if (p.exitStatus() != 0)
    throw Exception("Git error: " + p.readLine(result));
  while (!p.finished()) {
    p.readLine(result);
    if (boost::starts_with(result, tag))
      return true;
  }
  return false;
}
| bool Git::getCmdResult | ( | const std::string & | cmd, | 
| std::string & | result, | ||
| int | index | ||
| ) | const  [private] | 
Returns the ith line from the output of a git command.
The line is filled in result. Returns the whole git output if index = -1, otherwise the line with line number index.
| Exception | : in case the command failed | 
Definition at line 265 of file Git.C.
{
  POpenWrapper p("git --git-dir=" + repository_ + " " + gitCmd, cache_);
  if (p.exitStatus() != 0)
    throw Exception("Git error: " + p.readLine(result));
  if (index == -1) {
    result = p.contents();
    return true;
  } else
    p.readLine(result);
  for (int i = 0; i < index; ++i) {
    if (p.finished())
      return false;
    p.readLine(result);
  }
  return true;
}
| int Git::getCmdResultLineCount | ( | const std::string & | cmd | ) | const  [private] | 
Returns the number of lines in the output of a git command.
| Exception | : in case the command failed | 
Definition at line 305 of file Git.C.
{
  POpenWrapper p("git --git-dir=" + repository_ + " " + gitCmd, cache_);
  std::string r;
  if (p.exitStatus() != 0)
    throw Exception("Git error: " + p.readLine(r));
  int result = 0;
  while (!p.finished()) {
    p.readLine(r);
    ++result;
  }
  return result;
}
| Git::ObjectId Git::getCommit | ( | const std::string & | revision | ) | const | 
Get the commit for a particular revision.
| Exception | : in case of a git error. | 
Definition at line 204 of file Git.C.
{
  std::string sha1Commit;
  getCmdResult("rev-parse " + revision, sha1Commit, 0);
  return ObjectId(sha1Commit);
}
| Git::ObjectId Git::getCommitTree | ( | const std::string & | revision | ) | const | 
Get the tree for a particular revision.
| Exception | : in case of a git error. | 
Definition at line 188 of file Git.C.
{
  Git::ObjectId commit = getCommit(revision);
  return getTreeFromCommit(commit);
}
| Git::ObjectId Git::getTreeFromCommit | ( | const ObjectId & | commit | ) | const | 
Get the tree for a particular commit.
| Exception | : in case of a git error. | 
Definition at line 211 of file Git.C.
{
  std::string treeLine;
  if (!getCmdResult("cat-file -p " + commit.toString(), treeLine, "tree"))
    throw Exception("Git: could not parse tree from commit '" 
                    + commit.toString() + "'");
  std::vector<std::string> v;
  boost::split(v, treeLine, boost::is_any_of(" "));
  if (v.size() != 2)
    throw Exception("Git: could not parse tree from commit '"
                    + commit.toString() + "': '" + treeLine + "'");
  return ObjectId(v[1]);
}
| void Git::setRepositoryPath | ( | const std::string & | repository | ) | 
Set the git repository path.
| Exception | : if the path does not specify a valid repository. | 
Definition at line 182 of file Git.C.
{ 
  repository_ = repositoryPath;
  checkRepository();
}
| Git::Object Git::treeGetObject | ( | const ObjectId & | tree, | 
| int | index | ||
| ) | const | 
Get some info on a tree object.
The object is specified based on its index in the parent tree object.
| Exception | : in case of a git error. | 
Definition at line 226 of file Git.C.
{
  std::string objectLine;
  if (!getCmdResult("cat-file -p " + tree.toString(), objectLine, index))
    throw Exception("Git: could not read object %"
                    + boost::lexical_cast<std::string>(index)
                    + "  from tree " + tree.toString());
  else {
    std::vector<std::string> v1, v2;
    boost::split(v1, objectLine, boost::is_any_of("\t"));
    if (v1.size() != 2)
      throw Exception("Git: could not parse tree object line: '"
                      + objectLine + "'");
    boost::split(v2, v1[0], boost::is_any_of(" "));
    if (v2.size() != 3)
      throw Exception("Git: could not parse tree object line: '"
                      + objectLine + "'");
 
    const std::string& stype = v2[1];
    ObjectType type;
    if (stype == "tree")
      type = Tree;
    else if (stype == "blob")
      type = Blob;
    else
      throw Exception("Git: Unknown type: " + stype);
    Git::Object result(ObjectId(v2[2]), type);
    result.name = v1[1];
    return result;
  }
}
| int Git::treeSize | ( | const ObjectId & | tree | ) | const | 
Return the number of objects inside a tree object.
| Exception | : in case of a git error. | 
Definition at line 260 of file Git.C.
{
  return getCmdResultLineCount("cat-file -p " + tree.toString());
}
| Cache Git::cache_  [mutable, private] | 
| std::string Git::repository_  [private] | 
 1.7.5.1
 1.7.5.1