mirror of https://github.com/docker/docs.git
commit
c8f885a4d0
|
@ -14,7 +14,6 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"os/user"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -802,7 +801,7 @@ func StripComments(input []byte, commentMarker []byte) []byte {
|
||||||
var output []byte
|
var output []byte
|
||||||
for _, currentLine := range lines {
|
for _, currentLine := range lines {
|
||||||
var commentIndex = bytes.Index(currentLine, commentMarker)
|
var commentIndex = bytes.Index(currentLine, commentMarker)
|
||||||
if ( commentIndex == -1 ) {
|
if commentIndex == -1 {
|
||||||
output = append(output, currentLine...)
|
output = append(output, currentLine...)
|
||||||
} else {
|
} else {
|
||||||
output = append(output, currentLine[:commentIndex]...)
|
output = append(output, currentLine[:commentIndex]...)
|
||||||
|
@ -867,10 +866,18 @@ func ParseRepositoryTag(repos string) (string, string) {
|
||||||
return repos, ""
|
return repos, ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
Uid string // user id
|
||||||
|
Gid string // primary group id
|
||||||
|
Username string
|
||||||
|
Name string
|
||||||
|
HomeDir string
|
||||||
|
}
|
||||||
|
|
||||||
// UserLookup check if the given username or uid is present in /etc/passwd
|
// UserLookup check if the given username or uid is present in /etc/passwd
|
||||||
// and returns the user struct.
|
// and returns the user struct.
|
||||||
// If the username is not found, an error is returned.
|
// If the username is not found, an error is returned.
|
||||||
func UserLookup(uid string) (*user.User, error) {
|
func UserLookup(uid string) (*User, error) {
|
||||||
file, err := ioutil.ReadFile("/etc/passwd")
|
file, err := ioutil.ReadFile("/etc/passwd")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -878,7 +885,7 @@ func UserLookup(uid string) (*user.User, error) {
|
||||||
for _, line := range strings.Split(string(file), "\n") {
|
for _, line := range strings.Split(string(file), "\n") {
|
||||||
data := strings.Split(line, ":")
|
data := strings.Split(line, ":")
|
||||||
if len(data) > 5 && (data[0] == uid || data[2] == uid) {
|
if len(data) > 5 && (data[0] == uid || data[2] == uid) {
|
||||||
return &user.User{
|
return &User{
|
||||||
Uid: data[2],
|
Uid: data[2],
|
||||||
Gid: data[3],
|
Gid: data[3],
|
||||||
Username: data[0],
|
Username: data[0],
|
||||||
|
@ -890,13 +897,13 @@ func UserLookup(uid string) (*user.User, error) {
|
||||||
return nil, fmt.Errorf("User not found in /etc/passwd")
|
return nil, fmt.Errorf("User not found in /etc/passwd")
|
||||||
}
|
}
|
||||||
|
|
||||||
type DependencyGraph struct{
|
type DependencyGraph struct {
|
||||||
nodes map[string]*DependencyNode
|
nodes map[string]*DependencyNode
|
||||||
}
|
}
|
||||||
|
|
||||||
type DependencyNode struct{
|
type DependencyNode struct {
|
||||||
id string
|
id string
|
||||||
deps map[*DependencyNode]bool
|
deps map[*DependencyNode]bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDependencyGraph() DependencyGraph {
|
func NewDependencyGraph() DependencyGraph {
|
||||||
|
@ -917,7 +924,7 @@ func (graph *DependencyGraph) NewNode(id string) string {
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
nd := &DependencyNode{
|
nd := &DependencyNode{
|
||||||
id: id,
|
id: id,
|
||||||
deps: map[*DependencyNode]bool{},
|
deps: map[*DependencyNode]bool{},
|
||||||
}
|
}
|
||||||
graph.addNode(nd)
|
graph.addNode(nd)
|
||||||
|
@ -979,7 +986,7 @@ func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) {
|
||||||
// If at least one dep hasn't been processed yet, we can't
|
// If at least one dep hasn't been processed yet, we can't
|
||||||
// add it.
|
// add it.
|
||||||
ok := true
|
ok := true
|
||||||
for dep, _ := range node.deps {
|
for dep := range node.deps {
|
||||||
if !processed[dep] {
|
if !processed[dep] {
|
||||||
ok = false
|
ok = false
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in New Issue