From: Junio C Hamano Date: Mon, 26 Feb 2024 16:16:34 GMT Subject: Re: [Question] How to parse range-diff output Message-ID: In-Reply-To: <11783b8e-472d-4b75-bb48-88138daf16ae@app.fastmail.com> "Kristoffer Haugsbakk" writes: > On Mon, Feb 26, 2024, at 08:25, ZheNing Hu wrote: >> Hi, >> >> I am currently looking to implement a service that provides a version >> range comparison based on git range-diff. I can easily parse out >> commit pair headers like "3: 0bf6289 ! 3: a076e88 dev5," but I am >> unsure how to parse the details in the subsequent diff patch body. >> >> It is not a standard diff output where one can parse out the filename >> from the diff header, It should be called a diff of diffs. We can see >> various headers with file names such as "@@ File1 (new)", "## File2 >> (new) ##", or "@@ File3: function3" in different formats. This is >> confusing. How should we correctly parse a range-diff patch, and do >> you have any good suggestions? >> >> Thanks for any help. >> -- >> ZheNing Hu > > Hi > > Note that “Output Stability” says that this output is not meant to be > machine-readable. It’s for human consumption. It’s not textually stable. > > So a new version of Git might break your implementation without warning. Good point. In fact, those "##" things came long after the command was introduced for exactly the purpose of helping human users to locate which part of a "diff" the "diff of diff" is talking about, and the output from the command has been unstable for the exact reason.