2016-11-04 01:16:01 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
2020-01-23 02:46:46 +03:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2016-11-04 01:16:01 +03:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package git
import (
2020-08-28 09:55:12 +03:00
"context"
2016-11-04 01:16:01 +03:00
"fmt"
"path/filepath"
"strings"
)
2016-12-22 12:30:52 +03:00
// ArchiveType archive types
2016-11-04 01:16:01 +03:00
type ArchiveType int
const (
2016-12-22 12:30:52 +03:00
// ZIP zip archive type
2016-11-04 01:16:01 +03:00
ZIP ArchiveType = iota + 1
2016-12-22 12:30:52 +03:00
// TARGZ tar gz archive type
2016-11-04 01:16:01 +03:00
TARGZ
)
2020-01-23 02:46:46 +03:00
// String converts an ArchiveType to string
func ( a ArchiveType ) String ( ) string {
switch a {
2016-11-04 01:16:01 +03:00
case ZIP :
2020-01-23 02:46:46 +03:00
return "zip"
2016-11-04 01:16:01 +03:00
case TARGZ :
2020-01-23 02:46:46 +03:00
return "tar.gz"
2016-11-04 01:16:01 +03:00
}
2020-01-23 02:46:46 +03:00
return "unknown"
}
// CreateArchiveOpts represents options for creating an archive
type CreateArchiveOpts struct {
Format ArchiveType
Prefix bool
}
// CreateArchive create archive content to the target path
2020-08-28 09:55:12 +03:00
func ( c * Commit ) CreateArchive ( ctx context . Context , target string , opts CreateArchiveOpts ) error {
2020-01-23 02:46:46 +03:00
if opts . Format . String ( ) == "unknown" {
return fmt . Errorf ( "unknown format: %v" , opts . Format )
}
args := [ ] string {
"archive" ,
}
if opts . Prefix {
args = append ( args , "--prefix=" + filepath . Base ( strings . TrimSuffix ( c . repo . Path , ".git" ) ) + "/" )
}
args = append ( args ,
"--format=" + opts . Format . String ( ) ,
"-o" ,
target ,
c . ID . String ( ) ,
)
2016-11-04 01:16:01 +03:00
2020-08-28 09:55:12 +03:00
_ , err := NewCommandContext ( ctx , args ... ) . RunInDir ( c . repo . Path )
2016-11-04 01:16:01 +03:00
return err
}