/** * Init slots in S4 class git_commit * * @param source a commit object * @param repo S4 class git_repository that contains the blob * @param dest S4 class git_commit to initialize * @return void */ void git2r_commit_init(git_commit *source, SEXP repo, SEXP dest) { const char *message; const char *summary; const git_signature *author; const git_signature *committer; char sha[GIT_OID_HEXSZ + 1]; git_oid_fmt(sha, git_commit_id(source)); sha[GIT_OID_HEXSZ] = '\0'; SET_SLOT(dest, Rf_install("sha"), mkString(sha)); author = git_commit_author(source); if (author) git2r_signature_init(author, GET_SLOT(dest, Rf_install("author"))); committer = git_commit_committer(source); if (committer) git2r_signature_init(committer, GET_SLOT(dest, Rf_install("committer"))); summary = git_commit_summary(source); if (summary) SET_SLOT(dest, Rf_install("summary"), mkString(summary)); message = git_commit_message(source); if (message) SET_SLOT(dest, Rf_install("message"), mkString(message)); SET_SLOT(dest, Rf_install("repo"), repo); }
/** * Init slots in S4 class git_reflog_entry * * @param source The source reflog entry * @param index The entry index * @param repo S4 class git_repository * @param ref Reference to read from * @param dest S4 class git_reflog_entry to initialize * @return void */ void git2r_reflog_entry_init( const git_reflog_entry *source, size_t index, SEXP repo, SEXP ref, SEXP dest) { SEXP i; const char *message; const git_signature *committer; char sha[GIT_OID_HEXSZ + 1]; git_oid_fmt(sha, git_reflog_entry_id_new(source)); sha[GIT_OID_HEXSZ] = '\0'; SET_SLOT(dest, Rf_install("sha"), mkString(sha)); SET_SLOT(dest, Rf_install("index"), i = allocVector(INTSXP, 1)); INTEGER(i)[0] = index; committer = git_reflog_entry_committer(source); if (committer) git2r_signature_init(committer, GET_SLOT(dest, Rf_install("committer"))); message = git_reflog_entry_message(source); if (message) SET_SLOT(dest, Rf_install("message"), mkString(message)); else SET_SLOT(dest, Rf_install("message"), ScalarString(NA_STRING)); SET_SLOT(dest, Rf_install("refname"), ref); SET_SLOT(dest, Rf_install("repo"), repo); }
/** * Init slots in S4 class git_tag * * @param source a tag * @param repo S4 class git_repository that contains the tag * @param dest S4 class git_tag to initialize * @return void */ void git2r_tag_init(git_tag *source, SEXP repo, SEXP dest) { const git_signature *tagger; const git_oid *oid; char sha[GIT_OID_HEXSZ + 1]; char target[GIT_OID_HEXSZ + 1]; oid = git_tag_id(source); git_oid_tostr(sha, sizeof(sha), oid); SET_SLOT(dest, Rf_install("sha"), mkString(sha)); SET_SLOT(dest, Rf_install("message"), mkString(git_tag_message(source))); SET_SLOT(dest, Rf_install("name"), mkString(git_tag_name(source))); tagger = git_tag_tagger(source); if (tagger) git2r_signature_init(tagger, GET_SLOT(dest, Rf_install("tagger"))); oid = git_tag_target_id(source); git_oid_tostr(target, sizeof(target), oid);; SET_SLOT(dest, Rf_install("target"), mkString(target)); SET_SLOT(dest, Rf_install("repo"), repo); }