Thanks to visit codestin.com
Credit goes to github.com

Skip to content

In compiler.Compile, files should be sorted to ensure reproducible output #743

Open
@dave

Description

@dave

I noticed that the order of files in compiler.Compile must be identical to ensure reproducible output. Would sorting them be a good idea?

// Files must be in the same order to get reproducible JS
sort.Slice(files, func(i, j int) bool {
	return fileSet.File(files[i].Pos()).Name() > fileSet.File(files[j].Pos()).Name()
})

This causes problems in parseAndAugment... In the fileSet, the additional files added are named as if they are not in the same directory as the other files... you'll get something like this:

/my_go_root/src/time/format.go
/my_go_root/src/time/sleep.go
/my_go_root/src/time/sys_unix.go
/my_go_root/src/time/tick.go
/my_go_root/src/time/time.go
/my_go_root/src/time/zoneinfo.go
/my_go_root/src/time/zoneinfo_read.go
/src/time/time.go

The order of the additional file would be dependent on the goroot of the user running the command, so not ideal again. I propose a small change to fix this:

...
// Files should be uniquely named and in the original package directory in order to be
// ordered correctly
newPath := path.Join(pkg.Dir, "__"+name)
file, err := parser.ParseFile(fileSet, newPath, r, parser.ParseComments)
...

Just fixing the directory isn't quite enough, because it then appears there are two files with identical names. We can fix this by making the filename unique.

I've created a quick PR for this: #742 - let me know what you think!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions