Module: GitHandler::GitCommand

Included in:
Session
Defined in:
lib/git_handler/git_command.rb

Constant Summary collapse

GIT_COMMAND =
/\A(git[-|\s]upload-pack|git[-|\s]upload-archive|git[-|\s]receive-pack) '(.*)'\z/
GIT_REPO =
/\A[a-z\d\-\_\.]{1,128}.git?\z/i
COMMANDS_READONLY =
[
  'git-upload-pack',
  'git upload-pack',
  'git-upload-archive',
  'git upload-archive'
]
COMMANDS_WRITE =
[
  'git-receive-pack',
  'git receive-pack'
]

Instance Method Summary collapse

Instance Method Details

#parse_command(cmd) ⇒ Hash

Parse original git command

Parameters:

  • cmd (String)

    git command string

Returns:

  • (Hash)

    parse result



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/git_handler/git_command.rb', line 21

def parse_command(cmd)
  unless valid_command?(cmd)
    raise ParseError, "Invalid command: #{cmd}"
  end

  match  = cmd.scan(GIT_COMMAND).flatten
  action = match.first
  repo   = match.last

  unless valid_repository?(repo)
    raise ParseError, "Invalid repository: #{repo}"
  end

  {
    :action => action,
    :repo   => repo,
    :read   => read_command?(action),
    :write  => write_command?(action)
  }
end

#read_command?(str) ⇒ Boolean

Check if read command

Parameters:

  • str (String)

    command string

Returns:

  • (Boolean)


52
53
54
# File 'lib/git_handler/git_command.rb', line 52

def read_command?(str)
  COMMANDS_READONLY.include?(str)
end

#valid_command?(str) ⇒ Boolean

Check if valid git command

Parameters:

  • str (String)

    command string

Returns:

  • (Boolean)


45
46
47
# File 'lib/git_handler/git_command.rb', line 45

def valid_command?(str)
  str =~ GIT_COMMAND ? true : false
end

#valid_repository?(name) ⇒ Boolean

Check if repository name is valid

Parameters:

  • name (String)

    repository name

Returns:

  • (Boolean)


66
67
68
# File 'lib/git_handler/git_command.rb', line 66

def valid_repository?(name)
  name =~ GIT_REPO ? true : false
end

#write_command?(str) ⇒ Boolean

Check if write command

Parameters:

  • str (String)

    command string

Returns:

  • (Boolean)


59
60
61
# File 'lib/git_handler/git_command.rb', line 59

def write_command?(str)
  COMMANDS_WRITE.include?(str)
end