智慧书仓 / golang / go study

分享

   

go study

2019-04-29  智慧书仓

func IsURL(str string) bool {
    return strings.HasPrefix(str, "http://") || strings.HasPrefix(str, "https://")
}

func (b *buildFile) BuildStep(name, expression string) error {
    fmt.Fprintf(b.outStream, "Step %s : %s\n", name, expression)
    tmp := strings.SplitN(expression, " ", 2)
    if len(tmp) != 2 {
        return fmt.Errorf("Invalid Dockerfile format")
    }
    instruction := strings.ToLower(strings.Trim(tmp[0], " "))
    arguments := strings.Trim(tmp[1], " ")

    method, exists := reflect.TypeOf(b).MethodByName("Cmd" + strings.ToUpper(instruction[:1]) + strings.ToLower(instruction[1:]))
    if !exists {
        fmt.Fprintf(b.errStream, "# Skipping unknown instruction %s\n", strings.ToUpper(instruction))
        return nil
    }

    ret := method.Func.Call([]reflect.Value{reflect.ValueOf(b), reflect.ValueOf(arguments)})[0].Interface()
    if ret != nil {
        return ret.(error)
    }

    fmt.Fprintf(b.outStream, " ---> %s\n", utils.TruncateID(b.image))
    return nil
}

func IsGIT(str string) bool {
    return strings.HasPrefix(str, "git://") || strings.HasPrefix(str, "github.com/") || strings.HasPrefix(str, "git@github.com:") || (strings.HasSuffix(str, ".git") && IsURL(str))
}

func stripComments(raw []byte) string {
    var (
        out   []string
        lines = strings.Split(string(raw), "\n")
    )
    for _, l := range lines {
        if len(l) == 0 || l[0] == '#' {
            continue
        }
        out = append(out, l)
    }
    return strings.Join(out, "\n")
}


    for _, line := range strings.Split(dockerfile, "\n") {
        line = strings.Trim(strings.Replace(line, "\t", " ", -1), " \t\r\n")
        if len(line) == 0 {
            continue
        }
        if err := b.BuildStep(fmt.Sprintf("%d", stepN), line); err != nil {
            if b.forceRm {
                b.clearTmp(b.tmpContainers)
            }
            return "", err
        } else if b.rm {
            b.clearTmp(b.tmpContainers)
        }
        stepN += 1
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>