+{
+ if (locked_mode_)
+ return !isLocked();
+ else
+ return true;
+}
+
+
+string SVN::repoUpdate()
+{
+ 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 diff " + quoteName(owner_->filePath())
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
+ docstring res = tmpf.fileContents("UTF-8");
+ if (!res.empty()) {
+ LYXERR(Debug::LYXVC, "Diff detected:\n" << res);
+ docstring const file = from_utf8(owner_->filePath());
+ docstring text = bformat(_("There were detected changes "
+ "in the working directory:\n%1$s\n\n"
+ "In case of file conflict version of the local directory files "
+ "will be preferred."
+ "\n\nContinue?"), file);
+ int ret = frontend::Alert::prompt(_("Changes detected"),
+ text, 0, 1, _("&Yes"), _("&No"), _("View &Log ..."));
+ if (ret == 2 ) {
+ dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + tmpf.absFilename()));
+ ret = frontend::Alert::prompt(_("Changes detected"),
+ text, 0, 1, _("&Yes"), _("&No"));
+ hideDialogs("file", 0);
+ }
+ if (ret == 1 ) {
+ tmpf.erase();
+ return string();
+ }
+ }
+
+ // Reverting looks too harsh, see bug #6255.
+ // doVCCommand("svn revert -R " + quoteName(owner_->filePath())
+ // + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ // FileName(owner_->filePath()));
+ // res = "Revert log:\n" + tmpf.fileContents("UTF-8");
+ doVCCommand("svn update --accept mine-full " + quoteName(owner_->filePath())
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
+ res += "Update log:\n" + tmpf.fileContents("UTF-8");
+
+ LYXERR(Debug::LYXVC, res);
+ tmpf.erase();
+ return to_utf8(res);
+}
+
+
+bool SVN::repoUpdateEnabled()
+{
+ return true;
+}
+
+
+string SVN::lockingToggle()
+{
+ FileName tmpf = FileName::tempName("lyxvcout");
+ if (tmpf.empty()) {
+ LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
+ return N_("Error: Could not generate logfile.");
+ }
+
+ int ret = doVCCommand("svn proplist " + quoteName(onlyFilename(owner_->absFileName()))
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
+ if (ret)
+ return string();
+
+ string log;
+ string res = scanLogFile(tmpf, log);
+ bool locking = contains(res, "svn:needs-lock");
+ if (!locking)
+ ret = doVCCommand("svn propset svn:needs-lock ON "
+ + quoteName(onlyFilename(owner_->absFileName()))
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
+ else
+ ret = doVCCommand("svn propdel svn:needs-lock "
+ + quoteName(onlyFilename(owner_->absFileName()))
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
+ if (ret)
+ return string();
+
+ tmpf.erase();
+ frontend::Alert::warning(_("VCN File Locking"),
+ (locking ? _("Locking property unset.") : _("Locking property set.")) + "\n"
+ + _("Do not forget to commit the locking property into the repository."),
+ true);
+
+ return string("SVN: ") + N_("Locking property set.");
+}
+
+
+bool SVN::lockingToggleEnabled()