Use 'git fetch' followed by 'git reset' to update the source tree. This is better than 'git pull' because it can handle a rewritten upstream branch and does not leave local modifications. After fetch, parse FETCH_HEAD to find the merge head that 'git pull' would choose to track the upstream branch. Then reset to the selected head. In the normal fast-forward case the behavior remains unchanged. However, now local modifications and commits will be erased, and upstream rewrites are handled smoothly. This ensures that the upstream branch is tested as expected.
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc.
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#ifndef cmCTestGIT_h
|
|
#define cmCTestGIT_h
|
|
|
|
#include "cmCTestGlobalVC.h"
|
|
|
|
/** \class cmCTestGIT
|
|
* \brief Interaction with git command-line tool
|
|
*
|
|
*/
|
|
class cmCTestGIT: public cmCTestGlobalVC
|
|
{
|
|
public:
|
|
/** Construct with a CTest instance and update log stream. */
|
|
cmCTestGIT(cmCTest* ctest, std::ostream& log);
|
|
|
|
virtual ~cmCTestGIT();
|
|
|
|
private:
|
|
std::string GetWorkingRevision();
|
|
virtual void NoteOldRevision();
|
|
virtual void NoteNewRevision();
|
|
virtual bool UpdateImpl();
|
|
|
|
bool UpdateByFetchAndReset();
|
|
bool UpdateByCustom(std::string const& custom);
|
|
bool UpdateInternal();
|
|
|
|
void LoadRevisions();
|
|
void LoadModifications();
|
|
|
|
public: // needed by older Sun compilers
|
|
// Parsing helper classes.
|
|
class OneLineParser;
|
|
class DiffParser;
|
|
class CommitParser;
|
|
friend class OneLineParser;
|
|
friend class DiffParser;
|
|
friend class CommitParser;
|
|
};
|
|
|
|
#endif
|