* Licence details can be found in the file COPYING.
*
* \author Lars Gullik Bjønnes
+ * \author Pavel Sanda
*
* Full author contact details are available in file CREDITS.
*/
void RCS::revert()
{
- doVCCommand("co -f -u" + version() + " "
+ doVCCommand("co -f -u" + version_ + " "
+ quoteName(onlyFilename(owner_->absFileName())),
FileName(owner_->filePath()));
// We ignore changes and just reload!
void RCS::undoLast()
{
LYXERR(Debug::LYXVC, "LyXVC: undoLast");
- doVCCommand("rcs -o" + version() + " "
+ doVCCommand("rcs -o" + version_ + " "
+ quoteName(onlyFilename(owner_->absFileName())),
FileName(owner_->filePath()));
}
return false;
}
-// FIXME This could be implemented with cache from scanMaster
-string RCS::revisionInfo(LyXVC::RevisionInfo const)
+string RCS::revisionInfo(LyXVC::RevisionInfo const info)
{
+ if (info == LyXVC::File)
+ return version_;
return string();
}
}
-string CVS::revisionInfo(LyXVC::RevisionInfo const)
+string CVS::revisionInfo(LyXVC::RevisionInfo const info)
{
+ if (info == LyXVC::File)
+ return version_;
return string();
}
void SVN::scanMaster()
{
- locker_.clear();
// vcstatus code is somewhat superflous, until we want
// to implement read-only toggle for svn.
vcstatus = NOLOCKING;
if (checkLockMode()) {
if (isLocked()) {
- locker_ = "Locked";
vcstatus = LOCKED;
} else {
- locker_ = "Unlocked";
vcstatus = UNLOCKED;
}
}
}
doVCCommand("svn diff " + quoteName(owner_->filePath())
- + " > " + quoteName(tmpf.toFilesystemEncoding()),
- FileName(owner_->filePath()));
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
docstring res = tmpf.fileContents("UTF-8");
if (!res.empty()) {
LYXERR(Debug::LYXVC, "Diff detected:\n" << res);
string SVN::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_.empty())
- rev_file_cache_ = getFileRevisionInfo();
- if (rev_file_cache_.empty())
- rev_file_cache_ = "?";
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: ;
- case LyXVC::Tree:
- if (rev_tree_cache_.empty())
- rev_tree_cache_ = getTreeRevisionInfo();
- if (rev_tree_cache_.empty())
- rev_tree_cache_ = "?";
- if (rev_tree_cache_ == "?")
- return string();
-
- return rev_tree_cache_;
}
+
return string();
}
-std::string SVN::getFileRevisionInfo()
+bool SVN::getFileRevisionInfo()
{
FileName tmpf = FileName::tempName("lyxvcout");
+ if (tmpf.empty()) {
+ LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
+ return N_("Error: Could not generate logfile.");
+ }
doVCCommand("svn info --xml " + quoteName(onlyFilename(owner_->absFileName()))
+ " > " + quoteName(tmpf.toFilesystemEncoding()),
FileName(owner_->filePath()));
if (tmpf.empty())
- return string();
+ return false;
ifstream ifs(tmpf.toFilesystemEncoding().c_str());
string line;
string l1 = subst(line, "revision=\"", "");
string l2 = trim(subst(l1, "\">", ""));
if (isStrInt(l2))
- rev = l2;
+ rev_file_cache_ = rev = l2;
+ }
+ if (c && prefixIs(line, "<author>") && suffixIs(line, "</author>")) {
+ string l1 = subst(line, "<author>", "");
+ string l2 = subst(l1, "</author>", "");
+ rev_author_cache_ = l2;
+ }
+ if (c && prefixIs(line, "<date>") && suffixIs(line, "</date>")) {
+ string l1 = subst(line, "<date>", "");
+ string l2 = subst(l1, "</date>", "");
+ l2 = split(l2, l1, 'T');
+ rev_date_cache_ = l1;
+ l2 = split(l2, l1, '.');
+ rev_time_cache_ = l1;
}
}
+
ifs.close();
tmpf.erase();
- return rev;
+ return !rev.empty();
}
-std::string SVN::getTreeRevisionInfo()
+bool SVN::getTreeRevisionInfo()
{
FileName tmpf = FileName::tempName("lyxvcout");
+ if (tmpf.empty()) {
+ LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
+ return N_("Error: Could not generate logfile.");
+ }
doVCCommand("svnversion -n . > " + quoteName(tmpf.toFilesystemEncoding()),
FileName(owner_->filePath()));
if (tmpf.empty())
- return string();
+ return false;
// only first line in case something bad happens.
ifstream ifs(tmpf.toFilesystemEncoding().c_str());
getline(ifs, line);
ifs.close();
tmpf.erase();
- return line;
+
+ rev_tree_cache_ = line;
+ return !line.empty();
}