tag v0.155.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.155.0 ---------------- * Fedora 43: add shadow-utils when LockRoot is enabled, update cloud-init service name (osbuild/images#1618) * Author: Achilleas Koutsou, Reviewers: Gianluca Zuccarelli, Michael Vogt * Update osbuild dependency commit ID to latest (osbuild/images#1609) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger, Tomáš Hozza * Update snapshots to 20250626 (osbuild/images#1623) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro/rhel9: xz compress azure-cvm image type [HMS-8587] (osbuild/images#1620) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * distro/rhel: introduce new image type: Azure SAP Apps [HMS-8738] (osbuild/images#1612) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * distro/rhel: move ansible-core to sap_extras_pkgset (osbuild/images#1624) * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Tomáš Hozza * github/create-tag: allow passing the version when run manually (osbuild/images#1621) * Author: Achilleas Koutsou, Reviewers: Lukáš Zapletal, Tomáš Hozza * rhel9: move image-config into pure YAML (HMS-8593) (osbuild/images#1616) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * test: split manifest checksums into separate files (osbuild/images#1625) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza — Somewhere on the Internet, 2025-06-30 --- tag v0.156.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.156.0 ---------------- * Many: delete repositories for EOL distributions (HMS-7044) (osbuild/images#1607) * Author: Tomáš Hozza, Reviewers: Michael Vogt, Simon de Vlieger * RHSM/facts: add 'image-builder CLI' API type (osbuild/images#1640) * Author: Tomáš Hozza, Reviewers: Brian C. Lane, Simon de Vlieger * Update dependencies 2025-06-29 (osbuild/images#1628) * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza * Update osbuild dependency commit ID to latest (osbuild/images#1627) * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza * [RFC] image: drop `InstallWeakDeps` from image.DiskImage (osbuild/images#1642) * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger, Tomáš Hozza * build(deps): bump the go-deps group across 1 directory with 3 updates (osbuild/images#1632) * Author: dependabot[bot], Reviewers: SchutzBot, Tomáš Hozza * distro/rhel10: xz compress azure-cvm image type (osbuild/images#1638) * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Simon de Vlieger * distro: cleanup/refactor distro/{defs,generic} (HMS-8744) (osbuild/images#1570) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: remove some hardcoded values from generic/images.go (osbuild/images#1636) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: small tweaks for the YAML based imagetypes (osbuild/images#1622) * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger * fedora/wsl: packages and locale (osbuild/images#1635) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza * image/many: make compression more generic (osbuild/images#1634) * Author: Simon de Vlieger, Reviewers: Brian C. Lane, Michael Vogt * manifest: handle content template name with spaces (osbuild/images#1641) * Author: Bryttanie, Reviewers: Brian C. Lane, Michael Vogt, Tomáš Hozza * many: implement gzip (osbuild/images#1633) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza * rhel/azure: set GRUB_TERMINAL based on architecture [RHEL-91383] (osbuild/images#1626) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza — Somewhere on the Internet, 2025-07-07 ---
202 lines
4.9 KiB
Go
202 lines
4.9 KiB
Go
package mpb
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
|
|
"github.com/vbauerster/mpb/v8/decor"
|
|
)
|
|
|
|
// BarOption is a func option to alter default behavior of a bar.
|
|
type BarOption func(*bState)
|
|
|
|
// PrependDecorators let you inject decorators to the bar's left side.
|
|
func PrependDecorators(decorators ...decor.Decorator) BarOption {
|
|
var group []decor.Decorator
|
|
for _, decorator := range decorators {
|
|
if decorator != nil {
|
|
group = append(group, decorator)
|
|
}
|
|
}
|
|
return func(s *bState) {
|
|
s.decorGroups[0] = group
|
|
}
|
|
}
|
|
|
|
// AppendDecorators let you inject decorators to the bar's right side.
|
|
func AppendDecorators(decorators ...decor.Decorator) BarOption {
|
|
var group []decor.Decorator
|
|
for _, decorator := range decorators {
|
|
if decorator != nil {
|
|
group = append(group, decorator)
|
|
}
|
|
}
|
|
return func(s *bState) {
|
|
s.decorGroups[1] = group
|
|
}
|
|
}
|
|
|
|
// BarID sets bar id.
|
|
func BarID(id int) BarOption {
|
|
return func(s *bState) {
|
|
s.id = id
|
|
}
|
|
}
|
|
|
|
// BarWidth sets bar width independent of the container.
|
|
func BarWidth(width int) BarOption {
|
|
return func(s *bState) {
|
|
s.reqWidth = width
|
|
}
|
|
}
|
|
|
|
// BarQueueAfter puts this (being constructed) bar into the queue.
|
|
// BarPriority will be inherited from the argument bar.
|
|
// When argument bar completes or aborts queued bar replaces its place.
|
|
func BarQueueAfter(bar *Bar) BarOption {
|
|
return func(s *bState) {
|
|
s.waitBar = bar
|
|
}
|
|
}
|
|
|
|
// BarRemoveOnComplete removes both bar's filler and its decorators
|
|
// on complete event.
|
|
func BarRemoveOnComplete() BarOption {
|
|
return func(s *bState) {
|
|
s.rmOnComplete = true
|
|
}
|
|
}
|
|
|
|
// BarFillerClearOnComplete clears bar's filler on complete event.
|
|
// It's shortcut for BarFillerOnComplete("").
|
|
func BarFillerClearOnComplete() BarOption {
|
|
return BarFillerOnComplete("")
|
|
}
|
|
|
|
// BarFillerOnComplete replaces bar's filler with message, on complete event.
|
|
func BarFillerOnComplete(message string) BarOption {
|
|
return BarFillerMiddleware(func(base BarFiller) BarFiller {
|
|
return BarFillerFunc(func(w io.Writer, st decor.Statistics) error {
|
|
if st.Completed {
|
|
_, err := io.WriteString(w, message)
|
|
return err
|
|
}
|
|
return base.Fill(w, st)
|
|
})
|
|
})
|
|
}
|
|
|
|
// BarFillerMiddleware provides a way to augment the underlying BarFiller.
|
|
func BarFillerMiddleware(middle func(BarFiller) BarFiller) BarOption {
|
|
if middle == nil {
|
|
return nil
|
|
}
|
|
return func(s *bState) {
|
|
s.filler = middle(s.filler)
|
|
}
|
|
}
|
|
|
|
// BarPriority sets bar's priority. Zero is highest priority, i.e. bar
|
|
// will be on top. This option isn't effective with `BarQueueAfter` option.
|
|
func BarPriority(priority int) BarOption {
|
|
return func(s *bState) {
|
|
s.priority = priority
|
|
}
|
|
}
|
|
|
|
// BarExtender extends bar with arbitrary lines. Provided BarFiller will be
|
|
// called at each render/flush cycle. Any lines written to the underlying
|
|
// io.Writer will extend the bar either in above (rev = true) or below
|
|
// (rev = false) direction.
|
|
func BarExtender(filler BarFiller, rev bool) BarOption {
|
|
if filler == nil {
|
|
return nil
|
|
}
|
|
if f, ok := filler.(BarFillerFunc); ok && f == nil {
|
|
return nil
|
|
}
|
|
fn := makeExtenderFunc(filler, rev)
|
|
return func(s *bState) {
|
|
s.extender = fn
|
|
}
|
|
}
|
|
|
|
func makeExtenderFunc(filler BarFiller, rev bool) extenderFunc {
|
|
buf := new(bytes.Buffer)
|
|
base := func(stat decor.Statistics, rows ...io.Reader) ([]io.Reader, error) {
|
|
err := filler.Fill(buf, stat)
|
|
if err != nil {
|
|
buf.Reset()
|
|
return rows, err
|
|
}
|
|
for {
|
|
line, err := buf.ReadBytes('\n')
|
|
if err != nil {
|
|
buf.Reset()
|
|
break
|
|
}
|
|
rows = append(rows, bytes.NewReader(line))
|
|
}
|
|
return rows, err
|
|
}
|
|
if !rev {
|
|
return base
|
|
}
|
|
return func(stat decor.Statistics, rows ...io.Reader) ([]io.Reader, error) {
|
|
rows, err := base(stat, rows...)
|
|
if err != nil {
|
|
return rows, err
|
|
}
|
|
for left, right := 0, len(rows)-1; left < right; left, right = left+1, right-1 {
|
|
rows[left], rows[right] = rows[right], rows[left]
|
|
}
|
|
return rows, err
|
|
}
|
|
}
|
|
|
|
// BarFillerTrim removes leading and trailing space around the underlying BarFiller.
|
|
func BarFillerTrim() BarOption {
|
|
return func(s *bState) {
|
|
s.trimSpace = true
|
|
}
|
|
}
|
|
|
|
// BarNoPop disables bar pop out of container. Effective when
|
|
// PopCompletedMode of container is enabled.
|
|
func BarNoPop() BarOption {
|
|
return func(s *bState) {
|
|
s.noPop = true
|
|
}
|
|
}
|
|
|
|
// BarOptional will return provided option only when cond is true.
|
|
func BarOptional(option BarOption, cond bool) BarOption {
|
|
if cond {
|
|
return option
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BarOptOn will return provided option only when predicate evaluates to true.
|
|
func BarOptOn(option BarOption, predicate func() bool) BarOption {
|
|
if predicate() {
|
|
return option
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BarFuncOptional will call option and return its value only when cond is true.
|
|
func BarFuncOptional(option func() BarOption, cond bool) BarOption {
|
|
if cond {
|
|
return option()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BarFuncOptOn will call option and return its value only when predicate evaluates to true.
|
|
func BarFuncOptOn(option func() BarOption, predicate func() bool) BarOption {
|
|
if predicate() {
|
|
return option()
|
|
}
|
|
return nil
|
|
}
|