Class: Utopia::Command::Server::Update

Inherits:
Samovar::Command
  • Object
show all
Defined in:
lib/utopia/command/server.rb

Overview

Update a server.

Instance Method Summary collapse

Instance Method Details

#invoke(parent) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/utopia/command/server.rb', line 49

def invoke(parent)
  destination_root = parent.root
  
  Dir.chdir(destination_root) do
    # It's okay to call this on an existing repo, it will only update config as required to enable --shared.
    # --shared allows multiple users to access the site with the same group.
    system("git", "init", "--shared") or fail "could not initialize repository"
    
    system("git", "config", "receive.denyCurrentBranch", "ignore") or fail "could not set configuration"
    system("git", "config", "core.worktree", destination_root) or fail "could not set configuration"
    
    # In theory, to convert from non-shared to shared:
    # chgrp -R <group-name> .                   # Change files and directories' group
    # chmod -R g+w .                            # Change permissions
    # chmod g-w .git/objects/pack/*             # Git pack files should be immutable
    # chmod g+s `find . -type d`                # New files get group id of directory
  end
  
  Setup::Server.update_default_environment(destination_root)
  
  # Copy git hooks:
  system("cp", "-r", File.join(Setup::Server::ROOT, 'git', 'hooks'), File.join(destination_root, '.git')) or fail "could not copy git hooks"
  # finally set everything in the .git directory to be group writable
  system("chmod", "-Rf", "g+w", File.join(destination_root, '.git')) or fail "could not update permissions of .git directory"
end