mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 05:25:26 +00:00
Implement revision info for git
This commit is contained in:
parent
5a62a1ccb8
commit
22b7ad2b0a
@ -2112,12 +2112,99 @@ bool GIT::undoLastEnabled()
|
||||
}
|
||||
|
||||
|
||||
string GIT::revisionInfo(LyXVC::RevisionInfo const /*info*/)
|
||||
string GIT::revisionInfo(LyXVC::RevisionInfo const info)
|
||||
{
|
||||
if (info == LyXVC::Tree) {
|
||||
if (rev_tree_cache_.empty())
|
||||
if (!getTreeRevisionInfo())
|
||||
rev_tree_cache_ = "?";
|
||||
if (rev_tree_cache_ == "?")
|
||||
return string();
|
||||
|
||||
return rev_tree_cache_;
|
||||
}
|
||||
|
||||
// fill the rest of the attributes for a single file
|
||||
if (rev_file_cache_.empty())
|
||||
if (!getFileRevisionInfo())
|
||||
rev_file_cache_ = "?";
|
||||
|
||||
switch (info) {
|
||||
case LyXVC::File:
|
||||
if (rev_file_cache_ == "?")
|
||||
return string();
|
||||
return rev_file_cache_;
|
||||
case LyXVC::Author:
|
||||
return rev_author_cache_;
|
||||
case LyXVC::Date:
|
||||
return rev_date_cache_;
|
||||
case LyXVC::Time:
|
||||
return rev_time_cache_;
|
||||
default: ;
|
||||
|
||||
}
|
||||
|
||||
return string();
|
||||
}
|
||||
|
||||
|
||||
bool GIT::getFileRevisionInfo()
|
||||
{
|
||||
FileName tmpf = FileName::tempName("lyxvcout");
|
||||
if (tmpf.empty()) {
|
||||
LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
|
||||
return false;
|
||||
}
|
||||
|
||||
doVCCommand("git log -n 1 --pretty=format:%H%n%an%n%ai " + quoteName(onlyFileName(owner_->absFileName()))
|
||||
+ " > " + quoteName(tmpf.toFilesystemEncoding()),
|
||||
FileName(owner_->filePath()));
|
||||
|
||||
if (tmpf.empty())
|
||||
return false;
|
||||
|
||||
ifstream ifs(tmpf.toFilesystemEncoding().c_str());
|
||||
|
||||
if (ifs)
|
||||
getline(ifs, rev_file_cache_);
|
||||
if (ifs)
|
||||
getline(ifs, rev_author_cache_);
|
||||
if (ifs) {
|
||||
string line;
|
||||
getline(ifs, line);
|
||||
rev_time_cache_ = split(line, rev_date_cache_, ' ');
|
||||
}
|
||||
|
||||
ifs.close();
|
||||
tmpf.removeFile();
|
||||
return !rev_file_cache_.empty();
|
||||
}
|
||||
|
||||
|
||||
bool GIT::getTreeRevisionInfo()
|
||||
{
|
||||
FileName tmpf = FileName::tempName("lyxvcout");
|
||||
if (tmpf.empty()) {
|
||||
LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
|
||||
return false;
|
||||
}
|
||||
|
||||
doVCCommand("git log -n 1 --pretty=format:%H . > " + quoteName(tmpf.toFilesystemEncoding()),
|
||||
FileName(owner_->filePath()));
|
||||
|
||||
if (tmpf.empty())
|
||||
return false;
|
||||
|
||||
// only first line in case something bad happens.
|
||||
ifstream ifs(tmpf.toFilesystemEncoding().c_str());
|
||||
getline(ifs, rev_tree_cache_);
|
||||
ifs.close();
|
||||
tmpf.removeFile();
|
||||
|
||||
return !rev_tree_cache_.empty();
|
||||
}
|
||||
|
||||
|
||||
void GIT::getLog(FileName const & tmpf)
|
||||
{
|
||||
doVCCommand("git log " + quoteName(onlyFileName(owner_->absFileName()))
|
||||
|
@ -542,6 +542,27 @@ protected:
|
||||
/// Check in files \p f with log \p msg
|
||||
LyXVC::CommandResult checkIn(std::vector<support::FileName> const & f,
|
||||
std::string const & msg, std::string & log);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Real code for obtaining file revision info. Fills all file-related caches
|
||||
* and returns true if successfull.
|
||||
* "?" is stored in rev_file_cache_ as a signal if request for obtaining info
|
||||
* was already unsuccessful.
|
||||
*/
|
||||
bool getFileRevisionInfo();
|
||||
/// cache for file revision number, "?" if already unsuccessful, isNumber==true
|
||||
std::string rev_file_cache_;
|
||||
/// cache for author of last commit
|
||||
std::string rev_author_cache_;
|
||||
/// cache for date of last commit
|
||||
std::string rev_date_cache_;
|
||||
/// cache for time of last commit
|
||||
std::string rev_time_cache_;
|
||||
/// fills rev_tree_cache_, returns true if successfull.
|
||||
bool getTreeRevisionInfo();
|
||||
/// cache for tree revision number, "?" if already unsuccessful
|
||||
std::string rev_tree_cache_;
|
||||
};
|
||||
|
||||
} // namespace lyx
|
||||
|
Loading…
Reference in New Issue
Block a user