xref: /aosp_15_r20/external/bazelbuild-rules_go/third_party/sanitize_patch_dates.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1// Copyright 2019 The Bazel Authors. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//    http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package main
16
17import (
18	"bufio"
19	"fmt"
20	"log"
21	"os"
22	"regexp"
23	"strings"
24)
25
26func main() {
27	log.SetFlags(0)
28	log.SetPrefix("sanitize_patch_dates: ")
29	if len(os.Args) == 1 {
30		log.Fatalf("usage: sanitize_patch_dates *.patch")
31	}
32	for _, arg := range os.Args[1:] {
33		if err := sanitize(arg); err != nil {
34			log.Fatal(err)
35		}
36	}
37}
38
39var dateRegexp = regexp.MustCompile("20..-..-.. .*")
40
41func sanitize(filename string) (err error) {
42	r, err := os.Open(filename)
43	if err != nil {
44		return err
45	}
46	defer r.Close()
47
48	tempFilename := filename + "~"
49	w, err := os.Create(tempFilename)
50	if err != nil {
51		return err
52	}
53	defer func() {
54		if w == nil {
55			return
56		}
57		if cerr := w.Close(); err == nil && cerr != nil {
58			err = cerr
59		}
60	}()
61
62	s := bufio.NewScanner(r)
63	for s.Scan() {
64		line := s.Text()
65		if strings.HasPrefix(line, "+++") || strings.HasPrefix(line, "---") {
66			line = dateRegexp.ReplaceAllLiteralString(line, "2000-01-01 00:00:00.000000000 -0000")
67		}
68		if _, err := fmt.Fprintln(w, line); err != nil {
69			return err
70		}
71	}
72	if err := s.Err(); err != nil {
73		return err
74	}
75
76	if err := w.Close(); err != nil {
77		return err
78	}
79	w = nil
80	if err := os.Rename(tempFilename, filename); err != nil {
81		return err
82	}
83	return nil
84}
85