2017-03-15 18:11:26 +03:00
// +build ignore
2017-03-15 15:30:16 +03:00
package main
import (
"archive/tar"
"compress/gzip"
"flag"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"os"
"path"
"path/filepath"
"strings"
)
2017-03-15 18:11:26 +03:00
func main ( ) {
var (
prefix = "gitea-licenses"
2018-02-12 21:20:30 +03:00
url = "https://api.github.com/repos/spdx/license-list-data/tarball"
2017-03-15 18:11:26 +03:00
destination = ""
)
2017-03-15 15:30:16 +03:00
flag . StringVar ( & destination , "dest" , "options/license/" , "destination for the licenses" )
flag . Parse ( )
file , err := ioutil . TempFile ( os . TempDir ( ) , prefix )
if err != nil {
log . Fatalf ( "Failed to create temp file. %s" , err )
}
defer os . Remove ( file . Name ( ) )
resp , err := http . Get ( url )
if err != nil {
log . Fatalf ( "Failed to download archive. %s" , err )
}
defer resp . Body . Close ( )
if _ , err := io . Copy ( file , resp . Body ) ; err != nil {
log . Fatalf ( "Failed to copy archive to file. %s" , err )
}
if _ , err := file . Seek ( 0 , 0 ) ; err != nil {
log . Fatalf ( "Failed to reset seek on archive. %s" , err )
}
gz , err := gzip . NewReader ( file )
if err != nil {
log . Fatalf ( "Failed to gunzip the archive. %s" , err )
}
tr := tar . NewReader ( gz )
for {
hdr , err := tr . Next ( )
if err == io . EOF {
break
}
if err != nil {
log . Fatalf ( "Failed to iterate archive. %s" , err )
}
2018-02-12 21:20:30 +03:00
if ! strings . Contains ( hdr . Name , "/text/" ) {
continue
}
2017-03-15 15:30:16 +03:00
if filepath . Ext ( hdr . Name ) != ".txt" {
continue
}
if strings . HasPrefix ( filepath . Base ( hdr . Name ) , "README" ) {
continue
}
if strings . HasPrefix ( filepath . Base ( hdr . Name ) , "deprecated_" ) {
continue
}
out , err := os . Create ( path . Join ( destination , strings . TrimSuffix ( filepath . Base ( hdr . Name ) , ".txt" ) ) )
if err != nil {
log . Fatalf ( "Failed to create new file. %s" , err )
}
defer out . Close ( )
if _ , err := io . Copy ( out , tr ) ; err != nil {
log . Fatalf ( "Failed to write new file. %s" , err )
} else {
fmt . Printf ( "Written %s\n" , out . Name ( ) )
}
}
fmt . Println ( "Done" )
}