github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/cmd/distpack/archive.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "github.com/shogo82148/std/io/fs" 9 "github.com/shogo82148/std/time" 10 ) 11 12 // Archiveは、書き込むためのアーカイブを表します:ファイルの集合体です。 13 // ディレクトリはファイルに含まれており、明示的にリストされていません。 14 type Archive struct { 15 Files []File 16 } 17 18 // Fileはアーカイブに書き込む単一のファイルを表します。 19 type File struct { 20 Name string 21 Time time.Time 22 Mode fs.FileMode 23 Size int64 24 Src string 25 } 26 27 // Infoはファイルに関するFileInfoを返します。tar.FileInfoHeaderやzip.FileInfoHeaderと組み合わせて使用します。 28 func (f *File) Info() fs.FileInfo 29 30 // NewArchiveはディレクトリdirに含まれるすべてのファイルを含む新しいアーカイブを返します。 31 // アーカイブはAddやFilterなどのメソッドを使って後から修正することができます。 32 func NewArchive(dir string) (*Archive, error) 33 34 // Addは指定された名前と情報を持つファイルをアーカイブに追加します。 35 // ファイルの内容はオペレーティングシステムのファイルsrcから取得します。 36 // 1回以上Addを呼び出した後、アーカイブのファイルを再ソートするためにSortを呼び出す必要があります。 37 func (a *Archive) Add(name, src string, info fs.FileInfo) 38 39 // Sort sorts the files in the archive. 40 // It is only necessary to call Sort after calling Add or RenameGoMod. 41 // NewArchive returns a sorted archive, and the other methods 42 // preserve the sorting of the archive. 43 func (a *Archive) Sort() 44 45 // CloneはArchiveのコピーを返します。 46 // コピーに対して行われるAddやFilterなどのメソッド呼び出しは、元のデータに影響を与えません。 47 // また、元のデータに対する呼び出しも、コピーには影響しません。 48 func (a *Archive) Clone() *Archive 49 50 // AddPrefixはアーカイブ内のすべてのファイル名に接頭辞を追加します。 51 func (a *Archive) AddPrefix(prefix string) 52 53 // Filterはkeep(name)がfalseを返すアーカイブからファイルを除外します。 54 func (a *Archive) Filter(keep func(name string) bool) 55 56 // SetModeはアーカイブ内のすべてのファイルのモードを変更します 57 // モードは(name, m)になります。ここで、mはファイルの現在のモードです。 58 func (a *Archive) SetMode(mode func(name string, m fs.FileMode) fs.FileMode) 59 60 // Removeはアーカイブから任意のパターンにマッチするファイルを削除します。 61 // パターンはpath.Matchの文法を使用しており、**/で始まるか/**で終わることができます。 62 // これにより、メインのマッチングの前や後に任意のパス要素(パス要素がない場合も含む)がマッチします。 63 func (a *Archive) Remove(patterns ...string) 64 65 // SetTimeはアーカイブ内のすべてのファイルの変更時刻をtに設定します。 66 func (a *Archive) SetTime(t time.Time) 67 68 // RenameGoModはアーカイブ内のgo.modファイルを_go.modに名前変更します。 69 // モジュール形式では、他のgo.modファイルを含むことができないため、この名前変更が必要です。 70 func (a *Archive) RenameGoMod()