From: Stefan Sperling Subject: Re: got diff chomps trailing \r To: Christian Weisgerber Cc: gameoftrees@openbsd.org Date: Wed, 10 May 2023 17:44:48 +0200 On Wed, May 10, 2023 at 05:29:31PM +0200, Christian Weisgerber wrote: > Last night I tried to generate a diff between OpenBSD src "master" and > an updated "llvm15" branch. Unfortunately, the output of "got diff" > would not apply to a checked-out src tree and I had to resort to git. > > Some of the LLVM files have \r\n line endings. The problem is that > got diff simply drops the \r from all context, - and + lines. > > ===> got diff | cat -v > > --- gnu/llvm/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp > +++ gnu/llvm/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp > @@ -91,12 +91,8 @@ int main(int argc, const char **argv) {^M > llvm::transform(Args, Argv.begin(), > [](const std::string &Arg) { return Arg.c_str(); }); > > - IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); > - unsigned MissingArgIndex, MissingArgCount; > - auto Opts = driver::getDriverOptTable(); > - auto ParsedArgs = Opts.ParseArgs(llvm::makeArrayRef(Argv).slice(1), > - MissingArgIndex, MissingArgCount); > - ParseDiagnosticArgs(*DiagOpts, ParsedArgs); > + IntrusiveRefCntPtr DiagOpts = > + CreateAndPopulateDiagOpts(Argv); > > // Don't output diagnostics, because common scenarios such as > // cross-compiling fail with diagnostics. This is not fatal, but > > ===> git diff | cat -v > > --- a/gnu/llvm/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp > +++ b/gnu/llvm/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp > @@ -91,12 +91,8 @@ int main(int argc, const char **argv) { > llvm::transform(Args, Argv.begin(),^M > [](const std::string &Arg) { return Arg.c_str(); });^M > ^M > - IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions();^M > - unsigned MissingArgIndex, MissingArgCount;^M > - auto Opts = driver::getDriverOptTable();^M > - auto ParsedArgs = Opts.ParseArgs(llvm::makeArrayRef(Argv).slice(1),^M > - MissingArgIndex, MissingArgCount);^M > - ParseDiagnosticArgs(*DiagOpts, ParsedArgs);^M > + IntrusiveRefCntPtr DiagOpts =^M > + CreateAndPopulateDiagOpts(Argv);^M > ^M > // Don't output diagnostics, because common scenarios such as^M > // cross-compiling fail with diagnostics. This is not fatal, but^M > > > Ironically, got preserves the \r for the function name line, but > git doesn't. Thanks! This should not be too hard to fix. As a first step it would be nice to have is a regression test. The fix will probably require work in diff.git which has its own set of tests. But I would be happy with a test for 'got diff' just the same. Does anyone want to write a test? I am short on time now but could look into fixing this during the next few days.