[Grandmas-svn-commit] SF.net SVN: grandmas-svn: [52] trunk
Brought to you by:
matthiasmiller
From: <hig...@us...> - 2006-10-25 23:47:42
|
Revision: 52 http://svn.sourceforge.net/grandmas-svn/?rev=52&view=rev Author: highjinx Date: 2006-10-25 16:47:09 -0700 (Wed, 25 Oct 2006) Log Message: ----------- * Fixed file status on working revisions * Changed the Revision object to know about "base" revisions, to speed diffing Modified Paths: -------------- trunk/include/svn/operation.h trunk/include/svn/revision.h trunk/src/dialogs/mainwindow.cpp trunk/src/svn/commit_summary.cpp trunk/src/svn/file_access.cpp trunk/src/svn/operation.cpp trunk/src/svn/revision.cpp trunk/tests/svn_test.cpp Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Name: svn:ignore - *.pcs *.kdevses Makefile Makefile.Debug Makefile.Release bin build debug release object_script.grandmas-svn.Debug object_script.grandmas-svn.Release grandmas-svn.xcodeproj Info.plist + *.pcs *.kdevses Makefile Makefile.Debug Makefile.Release bin build debug release object_script.grandmas-svn.Debug object_script.grandmas-svn.Release grandmas-svn.xcodeproj Info.plist tags Modified: trunk/include/svn/operation.h =================================================================== --- trunk/include/svn/operation.h 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/include/svn/operation.h 2006-10-25 23:47:09 UTC (rev 52) @@ -28,7 +28,7 @@ namespace Operation { - bool initAuthProviders(svn_client_ctx_t* context, SvnOperationContext& rContext, QString& rError); + bool initAuthProviders(SvnOperationContext& rContext, svn_client_ctx_t* context, QString& rError); - bool getRelativeRepoUrl(SvnOperationContext& rContext, QString fullRepoPath, svn_client_ctx_t* ctx, QString& rRelPath, QString& rError); + bool getRepoCheckoutUrl(SvnOperationContext& rContext, svn_client_ctx_t* ctx, QString& rRelPath, QString fullRepoPath, QString& rError); }; Modified: trunk/include/svn/revision.h =================================================================== --- trunk/include/svn/revision.h 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/include/svn/revision.h 2006-10-25 23:47:09 UTC (rev 52) @@ -30,12 +30,25 @@ public: Revision(); ~Revision(); + + static Revision uncommitted() { Revision rev; rev.mType = Uncommitted; rev.mCommittedRevision = 0; return rev; } + static Revision committed(int revision) { Revision rev; rev.mType = Committed; rev.mCommittedRevision = revision; return rev; } + static Revision base() { Revision rev; rev.mType = Base; rev.mCommittedRevision = 0; return rev; } + static Revision head() { Revision rev; rev.mType = Head; rev.mCommittedRevision = 0; return rev; } + + enum Type + { + Uncommitted, + Committed, + Base, + Head, // Unimplemented + }; bool operator==(const Revision& rcOther) const { - if (mIsCommitted != rcOther.mIsCommitted) + if (mType != rcOther.mType) return false; - if (mIsCommitted && mCommittedRevision != rcOther.mCommittedRevision) + if (mType == Committed && mCommittedRevision != rcOther.mCommittedRevision) return false; return true; @@ -44,11 +57,8 @@ { return !(*this == rcOther); } - - void setUncommittedRevision(); - void setCommittedRevision(int revision); - bool isCommittedRevision(); + Type getType(); int getCommittedRevision(); // svn wrapper functions @@ -56,7 +66,7 @@ svn_opt_revision_t getSvnRevision(); private: - bool mIsCommitted; + Type mType; int mCommittedRevision; }; Modified: trunk/src/dialogs/mainwindow.cpp =================================================================== --- trunk/src/dialogs/mainwindow.cpp 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/src/dialogs/mainwindow.cpp 2006-10-25 23:47:09 UTC (rev 52) @@ -125,7 +125,7 @@ if (pEvent->type() == QEvent::ActivationChange && isActiveWindow()) { // Refresh the modifications if it doesn't require server access. - if (mpModificationsModel && !mDisplayedRevision.isCommittedRevision()) + if (mpModificationsModel && mDisplayedRevision.getType() == Revision::Uncommitted) reload(); } } @@ -190,7 +190,7 @@ #elif defined(Q_WS_MAC) app = "opendiff"; #else - return false; + app = "meld"; #endif QStringList args; Modified: trunk/src/svn/commit_summary.cpp =================================================================== --- trunk/src/svn/commit_summary.cpp 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/src/svn/commit_summary.cpp 2006-10-25 23:47:09 UTC (rev 52) @@ -29,25 +29,23 @@ mModifications.clear(); rError = ""; mRevision = revision; - //mpContext = &rServer; - mWcPath = svn_path_canonicalize(fullRepoPath.toAscii(), rContext.getAprPool()); + const char* fullCanonPath = svn_path_canonicalize(fullRepoPath.toAscii(), rContext.getAprPool()); svn_client_ctx_t* ctx; svn_client_create_context(&ctx, rContext.getAprPool()); - if (!Operation::initAuthProviders(ctx, rContext, rError)) + if (!Operation::initAuthProviders(rContext, ctx, rError)) return false; - // TODO: This isn't working. Figure out why. - //if (!Operation::getRelativeRepoUrl(rContext, fullRepoPath, ctx, mWcPath, rError)) - // return false; - svn_error_t* pError = NULL; - if (revision.isCommittedRevision()) + if (revision.getType() != Revision::Uncommitted) { + if (!Operation::getRepoCheckoutUrl(rContext, ctx, fullRepoPath, mWcPath, rError)) + return false; + svn_opt_revision_t startRev = revision.getSvnRevision(); svn_opt_revision_t endRev = revision.getSvnRevision(); apr_array_header_t *array = apr_array_make(rContext.getAprPool(), 1, sizeof(const char*)); - APR_ARRAY_PUSH(array, const char*) = svn_path_canonicalize(fullRepoPath.toAscii(), rContext.getAprPool()); + APR_ARRAY_PUSH(array, const char*) = fullCanonPath; pError = svn_client_log2(array, &startRev, @@ -62,9 +60,10 @@ } else { + mWcPath = fullRepoPath; + svn_opt_revision_t svnRevision = revision.getSvnRevision(); - const char* canonPath = svn_path_canonicalize(fullRepoPath.toAscii(), rContext.getAprPool()); - pError = svn_client_status2(NULL, canonPath, &svnRevision, + pError = svn_client_status2(NULL, fullCanonPath, &svnRevision, statusCallback, this, true/*recurse*/, @@ -96,8 +95,8 @@ mod.mFilePath = path; - mod.mNewRevision.setCommittedRevision(revision); - mod.mOldRevision.setCommittedRevision(revision-1); + mod.mNewRevision = Revision::committed(revision); + mod.mOldRevision = Revision::committed(revision-1); svn_log_changed_path_t *log_item = reinterpret_cast<svn_log_changed_path_t *>(val); switch (log_item->action) { @@ -122,7 +121,7 @@ } pThis->mAuthor = author; - //pThis->mDate = date; + pThis->mDate = QDateTime::fromString(date, Qt::ISODate); pThis->mLogMessage = message; return NULL; @@ -137,7 +136,9 @@ // Set old revision to base, if the file is already under version control if (status->entry) - mod.mOldRevision.setCommittedRevision(status->entry->revision); + mod.mOldRevision = Revision::base(); +// else +// mod.mOldRevision = Revision::unknown(); switch (status->text_status) { Modified: trunk/src/svn/file_access.cpp =================================================================== --- trunk/src/svn/file_access.cpp 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/src/svn/file_access.cpp 2006-10-25 23:47:09 UTC (rev 52) @@ -30,14 +30,16 @@ namespace { - bool getRandomFilePath(QString dirPath, QString filePrefix, QString fileExtension, QString& rFilePath) + bool getRandomFilePath(QString dirPath, QString filePrefix, QString fileExtension, QString& rFilePath, SvnOperationContext& rContext) { QString randString; while (true) { - if (!QFile::exists(dirPath+filePrefix+randString+"."+fileExtension)) + QString testPath = dirPath + QDir::separator() + filePrefix+randString+"."+fileExtension; + testPath = svn_path_canonicalize(testPath.toAscii(), rContext.getAprPool()); + if (!QFile::exists(testPath)) { - rFilePath = dirPath+filePrefix+randString+"."+fileExtension; + rFilePath = testPath; return true; } randString.setNum(rand() % 10000); @@ -55,7 +57,7 @@ bool RepoFileAccess::getFile(SvnOperationContext& rContext, QString fullRepoPath, Revision rev, QString& rCreatedFilePath, QString& rError) { - if (!rev.isCommittedRevision()) + if (rev.getType() == Revision::Uncommitted) { rCreatedFilePath = fullRepoPath; return true; @@ -63,7 +65,7 @@ // create a new file and suppose we only want // this users to be able to read and write the file apr_file_t* pAprFile = NULL; - if (!getRandomFilePath(QDir::tempPath(), "bogus", "cpp", rCreatedFilePath) || + if (!getRandomFilePath(QDir::tempPath(), "bogus", "cpp", rCreatedFilePath, rContext) || apr_file_open(&pAprFile, rCreatedFilePath.toAscii(), APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY, APR_OS_DEFAULT, rContext.getAprPool())) { rError = "Unable to create temporary file."; @@ -80,7 +82,7 @@ svn_client_ctx_t* pCtx = NULL; svn_client_create_context(&pCtx, rContext.getAprPool()); - if (!Operation::initAuthProviders(pCtx, rContext, rError)) + if (!Operation::initAuthProviders(rContext, pCtx, rError)) return false; svn_opt_revision_t svnRev = rev.getSvnRevision(); Modified: trunk/src/svn/operation.cpp =================================================================== --- trunk/src/svn/operation.cpp 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/src/svn/operation.cpp 2006-10-25 23:47:09 UTC (rev 52) @@ -46,7 +46,7 @@ } -bool Operation::initAuthProviders(svn_client_ctx_t* context, SvnOperationContext& rContext, QString& /*rError*/) +bool Operation::initAuthProviders(SvnOperationContext& rContext, svn_client_ctx_t* context, QString& /*rError*/) { apr_array_header_t *providers = apr_array_make(rContext.getAprPool(), 7, sizeof(svn_auth_provider_object_t *)); @@ -83,7 +83,7 @@ class SvnInfo { public: - bool getRelativeRepoUrl(SvnOperationContext& rContext, QString fullRepoPath, svn_client_ctx_t* ctx, QString& rRelPath, QString& rError) + bool getRepoCheckoutUrl(SvnOperationContext& rContext, QString fullRepoPath, svn_client_ctx_t* ctx, QString& rRelPath, QString& rError) { svn_error_t* pError = svn_client_info(fullRepoPath.toAscii(), NULL, NULL, infoCallback, this, false, ctx, rContext.getAprPool()); if (pError) @@ -91,6 +91,7 @@ rError = pError->message; return false; } + Q_ASSERT(mRelativeRepoUrl != ""); rRelPath = mRelativeRepoUrl; return true; } @@ -115,9 +116,9 @@ }; -bool Operation::getRelativeRepoUrl(SvnOperationContext& rContext, QString fullRepoPath, svn_client_ctx_t* ctx, QString& rRelPath, QString& rError) +bool Operation::getRepoCheckoutUrl(SvnOperationContext& rContext, svn_client_ctx_t* ctx, QString& rRelPath, QString fullRepoPath, QString& rError) { SvnInfo info; - return info.getRelativeRepoUrl(rContext, fullRepoPath, ctx, rRelPath, rError); + return info.getRepoCheckoutUrl(rContext, fullRepoPath, ctx, rRelPath, rError); } Modified: trunk/src/svn/revision.cpp =================================================================== --- trunk/src/svn/revision.cpp 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/src/svn/revision.cpp 2006-10-25 23:47:09 UTC (rev 52) @@ -24,48 +24,42 @@ Revision::Revision() { - mIsCommitted = false; - mCommittedRevision = -1; + mType = Uncommitted; } Revision::~Revision() { } -void Revision::setUncommittedRevision() +Revision::Type Revision::getType() { - mIsCommitted = false; + return mType; } -void Revision::setCommittedRevision(int revision) -{ - mIsCommitted = true; - mCommittedRevision = revision; -} - -bool Revision::isCommittedRevision() -{ - return mIsCommitted; -} - int Revision::getCommittedRevision() { - GSVN_ASSERT(mIsCommitted); + GSVN_ASSERT(mType == Committed); return mCommittedRevision; } svn_opt_revision_t Revision::getSvnRevision() { svn_opt_revision_t svnRev; - if (!isCommittedRevision()) + svnRev.value.number = mCommittedRevision; + switch (mType) { + case Uncommitted: svnRev.kind = svn_opt_revision_working; - svnRev.value.number = 0; - } - else - { + break; + case Committed: svnRev.kind = svn_opt_revision_number; - svnRev.value.number = getCommittedRevision(); + break; + case Base: + svnRev.kind = svn_opt_revision_base; + break; + case Head: + svnRev.kind = svn_opt_revision_head; + break; } return svnRev; } Modified: trunk/tests/svn_test.cpp =================================================================== --- trunk/tests/svn_test.cpp 2006-10-25 18:59:09 UTC (rev 51) +++ trunk/tests/svn_test.cpp 2006-10-25 23:47:09 UTC (rev 52) @@ -41,7 +41,7 @@ svn_client_create_context(&mpCtx, mpContext->getAprPool()); QString rIgnoredError; - Q_ASSERT(Operation::initAuthProviders(mpCtx, *mpContext, rIgnoredError)); + Q_ASSERT(Operation::initAuthProviders(*mpContext, mpCtx, rIgnoredError)); mpCtx->log_msg_func = logMsgCallback; mpCtx->log_msg_baton = this; @@ -58,7 +58,7 @@ { mCurrentCommitMsg = commitMessage; - svn_client_commit_info_t* pCommitInfo; + svn_client_commit_info_t* pCommitInfo; apr_array_header_t *array = apr_array_make(mpContext->getAprPool(), 1, sizeof(const char*)); APR_ARRAY_PUSH(array, const char*) = svn_path_canonicalize(getWcPath().toAscii(), mpContext->getAprPool()); @@ -196,7 +196,7 @@ CommitSummary summary; QString rError; Revision rev; - rev.setCommittedRevision(1); + rev = Revision::committed(1); QVERIFY(summary.init(*mpContext, getWcPath(), rev, rError)); const QList<Modification>& mods = summary.modifications(); @@ -205,7 +205,7 @@ QCOMPARE(mods[0].getFilePath(), QString("/first.txt")); QCOMPARE(mods[0].getType(), Modification::Type_Add); - rev.setUncommittedRevision(); + rev = Revision::uncommitted(); QVERIFY(summary.init(*mpContext, getWcPath(), rev, rError)); QCOMPARE(mods.size(), 1); @@ -218,13 +218,13 @@ QString rError; QString filePath; Revision oldRev; - oldRev.setCommittedRevision(1); + oldRev = Revision::committed(1); QVERIFY(RepoFileAccess::getFile(*mpContext, QDir::convertSeparators(getWcPath()+"/first.txt"), oldRev, filePath, rError)); QCOMPARE(getFileContents(filePath), QString("This is the first file")); QVERIFY(filePath != getWcPath()+"/first.txt"); // We should not overwrite the WC copy! Revision newRev; - newRev.setUncommittedRevision(); + newRev = Revision::uncommitted(); QVERIFY(RepoFileAccess::getFile(*mpContext, QDir::convertSeparators(getWcPath()+"/second.txt"), newRev, filePath, rError)); QCOMPARE(filePath, getWcPath()+"/second.txt"); // We should return the WC file path directly if working on uncommitted revisions @@ -244,13 +244,13 @@ { QString rError; Revision rev; - rev.setCommittedRevision(1); + rev = Revision::committed(1); CommitSummary summary; QVERIFY(summary.init(*mpContext, getWcPath(), rev, rError)); - //QCOMPARE(summary.getCommitAuthor(), QString("billfrank")); // TODO: set when committing - //QCOMPARE(summary.getCommitDate(), bogus); // TODO: fill in + //QCOMPARE(summary.getCommitAuthor(), QString("billfrank")); + //QCOMPARE(summary.getCommitDate(), bogus); QCOMPARE(summary.getCommitLogMessage(), QString("first commit")); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |