Ignore MPEG transport stream ".ts" files.

PiperOrigin-RevId: 225438754
diff --git a/ts_auto_deps/platform/file.go b/ts_auto_deps/platform/file.go
index 493b35e..7df93d0 100644
--- a/ts_auto_deps/platform/file.go
+++ b/ts_auto_deps/platform/file.go
@@ -19,6 +19,19 @@
 	return ioutil.ReadFile(name)
 }
 
+// ReadBytesFromFile reads bytes into the buffer provided, stopping when the
+// buffer is full.
+func ReadBytesFromFile(ctx context.Context, name string, buffer []byte) (int, error) {
+	f, err := os.Open(name)
+	if err != nil {
+		return 0, err
+	}
+	defer f.Close()
+
+	n, err := f.Read(buffer)
+	return n, err
+}
+
 // WriteFile writes data to filename.
 func WriteFile(ctx context.Context, filename string, data []byte) error {
 	return ioutil.WriteFile(filename, data, filePerms)
diff --git a/ts_auto_deps/updater/updater.go b/ts_auto_deps/updater/updater.go
index c559236..cb80b50 100644
--- a/ts_auto_deps/updater/updater.go
+++ b/ts_auto_deps/updater/updater.go
@@ -7,6 +7,7 @@
 	"bytes"
 	"context"
 	"fmt"
+	"io"
 	"os"
 	"path/filepath"
 	"regexp"
@@ -249,6 +250,13 @@
 		if err != nil {
 			return nil, fmt.Errorf("cannot stat platform.Glob result %q: %v", p, err)
 		}
+		isMpeg, err := isMpegTS(ctx, p)
+		if err != nil {
+			return nil, err
+		}
+		if isMpeg {
+			continue
+		}
 		p, err := filepath.Rel(path, p)
 		if err != nil {
 			return nil, fmt.Errorf("filepath.Rel(%s, %s): %v", path, p, err)
@@ -258,6 +266,20 @@
 	return srcs, nil
 }
 
+// isMpegTS checks if a ".ts" file is an MPEG transport stream.  Taze shouldn't
+// treat them as TypeScript files.
+func isMpegTS(ctx context.Context, path string) (bool, error) {
+	var content [200]byte
+	n, err := platform.ReadBytesFromFile(ctx, path, content[:])
+	if err != nil && err != io.EOF {
+		return false, err
+	}
+
+	// MPEG TS' frame format starts with 0x47 every 189 bytes - detect that and return.
+	isMpeg := n > 188 && content[0] == 0x47 && content[188] == 0x47
+	return isMpeg, nil
+}
+
 func isTempFile(fileName string) bool {
 	return strings.HasPrefix(fileName, ".") || strings.HasSuffix(fileName, ".swp") ||
 		strings.HasSuffix(fileName, "~")