Add --print-changes to print all changed lines (useful in dry-run mode) + Return the number of formatted files in this mode

This commit is contained in:
Peter Vingelmann 2016-09-14 20:19:13 +02:00
parent 91bff90bf2
commit 8458be2f70
2 changed files with 57 additions and 10 deletions

View File

@ -540,6 +540,13 @@ void ASConsole::formatFile(const string& fileName_)
ASStreamIterator<stringstream> streamIterator(&in);
formatter.init(&streamIterator);
// remove targetDirectory from filename if required by print
string displayName;
if (hasWildcard)
displayName = fileName_.substr(targetDirectory.length() + 1);
else
displayName = fileName_;
// format the file
while (formatter.hasMoreLines())
{
@ -566,15 +573,23 @@ void ASConsole::formatFile(const string& fileName_)
}
}
if (filesAreIdentical)
if (filesAreIdentical || printChanges)
{
if (streamIterator.checkForEmptyLine)
{
if (nextLine.find_first_not_of(" \t") != string::npos)
{
if (printChanges)
printChangedLine(displayName, nextLine, linesOut);
filesAreIdentical = false;
}
}
else if (!streamIterator.compareToInputBuffer(nextLine))
filesAreIdentical = false;
{
if (printChanges)
printChangedLine(displayName, nextLine, linesOut);
filesAreIdentical = false;
}
streamIterator.checkForEmptyLine = false;
}
}
@ -585,19 +600,14 @@ void ASConsole::formatFile(const string& fileName_)
filesAreIdentical = false;
}
// remove targetDirectory from filename if required by print
string displayName;
if (hasWildcard)
displayName = fileName_.substr(targetDirectory.length() + 1);
else
displayName = fileName_;
// if file has changed, write the new file
if (!filesAreIdentical || streamIterator.getLineEndChange(lineEndFormat))
{
if (!isDryRun)
writeFile(fileName_, encoding, out);
printMsg(_("Formatted %s\n"), displayName);
if (printChanges)
printSeparatingLine();
filesFormatted++;
}
else
@ -610,6 +620,20 @@ void ASConsole::formatFile(const string& fileName_)
assert(formatter.getChecksumDiff() == 0);
}
void ASConsole::printChangedLine(const string& fileName, const string& line, int lineNumber)
{
if (printChanges && !isQuiet)
{
// Print the filename, as this is the first change for file
if (filesAreIdentical)
{
printSeparatingLine();
printf("Changes in %s\n", fileName.c_str());
}
printf("Line %5d: %s\n", lineNumber, line.c_str());
}
}
// build a vector of argv options
// the program path argv[0] is excluded
vector<string> ASConsole::getArgvOptions(int argc, char** argv) const
@ -662,6 +686,10 @@ bool ASConsole::getIgnoreExcludeErrorsDisplay() const
bool ASConsole::getIsDryRun() const
{ return isDryRun; }
// for unit testing
bool ASConsole::getPrintChanges() const
{ return printChanges; }
// for unit testing
bool ASConsole::getIsFormattedOnly() const
{ return isFormattedOnly; }
@ -800,6 +828,9 @@ void ASConsole::setIsRecursive(bool state)
void ASConsole::setIsDryRun(bool state)
{ isDryRun = state; }
void ASConsole::setPrintChanges(bool state)
{ printChanges = state; }
void ASConsole::setIsVerbose(bool state)
{ isVerbose = state; }
@ -3137,6 +3168,10 @@ void ASOptions::parseOption(const string& arg, const string& errorInfo)
{
g_console->setIsDryRun(true);
}
else if (isOption(arg, "print-changes"))
{
g_console->setPrintChanges(true);
}
else if ( isOption(arg, "Z", "preserve-date") )
{
g_console->setPreserveDate(true);
@ -3806,8 +3841,16 @@ int main(int argc, char** argv)
// process entries in the fileNameVector
g_console->processFiles();
int return_code = EXIT_SUCCESS;
if (g_console->getPrintChanges() && g_console->getFilesFormatted() > 0)
{
// Use the number of formatted files as a return code with the
// --print-changes option
return_code = g_console->getFilesFormatted();
}
delete g_console;
return EXIT_SUCCESS;
return return_code;
}
#endif // ASTYLE_LIB

View File

@ -232,6 +232,7 @@ private: // variables
// command line options
bool isRecursive; // recursive option
bool isDryRun; // dry-run option
bool printChanges; // print-changes option
bool noBackup; // suffix=none option
bool preserveDate; // preserve-date option
bool isVerbose; // verbose option
@ -307,6 +308,7 @@ public: // functions
bool getIgnoreExcludeErrors() const;
bool getIgnoreExcludeErrorsDisplay() const;
bool getIsDryRun() const;
bool getPrintChanges() const;
bool getIsFormattedOnly() const;
bool getIsQuiet() const;
bool getIsRecursive() const;
@ -325,6 +327,7 @@ public: // functions
void setIgnoreExcludeErrors(bool state);
void setIgnoreExcludeErrorsAndDisplay(bool state);
void setIsDryRun(bool state);
void setPrintChanges(bool state);
void setIsFormattedOnly(bool state);
void setIsQuiet(bool state);
void setIsRecursive(bool state);
@ -347,6 +350,7 @@ private: // functions
ASConsole& operator=(ASConsole&); // not to be implemented
void correctMixedLineEnds(ostringstream& out);
void formatFile(const string& fileName_);
void printChangedLine(const string& fileName, const string& line, int lineNumber);
string getCurrentDirectory(const string& fileName_) const;
void getFileNames(const string& directory, const string& wildcard);
void getFilePaths(string& filePath);