diff --git a/lib/generators/web_git/install_generator.rb b/lib/generators/web_git/install_generator.rb index 465051b..26b4dc3 100644 --- a/lib/generators/web_git/install_generator.rb +++ b/lib/generators/web_git/install_generator.rb @@ -2,24 +2,46 @@ module WebGit class InstallGenerator < Rails::Generators::Base def generate_server + filename = Rails.root.join("config.ru") + log :insert, "Updating config.ru to run apps in parallel." - - contents = <<-RUBY.gsub(/^ /, "") + if File.exists?(filename) && already_installed? + log :identical, "Skipping overrides." + else + contents = <<~RUBY - if Rails.env.development? - map '/git' do - run WebGit::Server + if Rails.env.development? + map '/git' do + run WebGit::Server + end end + + map '/' do + RUBY + + filename = "config.ru" + match_text = "run Rails.application" + + insert_into_file filename, contents, before: match_text + insert_into_file filename, "\nend", after: match_text, force: true + gsub_file filename, match_text, "\t#{match_text}" end - map '/' do\n\t - RUBY + expect_installed = run("which expect") + + unless expect_installed + log :insert, "Installing expect." + run "sudo apt install -y expect" + else + log :identical, "expect already installed." + end + end - filename = "config.ru" - match_text = "run Rails.application" + def already_installed? + filename = Rails.root.join("config.ru") + contents = open(filename).read - insert_into_file filename, contents, before: match_text - insert_into_file filename, "\nend", after: match_text, force: true + contents.match?(/if\s*Rails.env.development\?\s*map\s*'\/git'\s*do\s*run\s*WebGit::Server\s*end\s*end/) end end end diff --git a/lib/scripts/heroku_login.exp b/lib/scripts/heroku_login.exp new file mode 100755 index 0000000..b09899a --- /dev/null +++ b/lib/scripts/heroku_login.exp @@ -0,0 +1,58 @@ +#!/usr/bin/expect -f +# +# This Expect script was generated by autoexpect on Tue Jun 22 17:49:07 2021 +# Expect and autoexpect were both written by Don Libes, NIST. +# +# Note that autoexpect does not guarantee a working script. It +# necessarily has to guess about certain things. Two reasons a script +# might fail are: +# +# 1) timing - A surprising number of programs (rn, ksh, zsh, telnet, +# etc.) and devices discard or ignore keystrokes that arrive "too +# quickly" after prompts. If you find your new script hanging up at +# one spot, try adding a short sleep just before the previous send. +# Setting "force_conservative" to 1 (see below) makes Expect do this +# automatically - pausing briefly before sending each character. This +# pacifies every program I know of. The -c flag makes the script do +# this in the first place. The -C flag allows you to define a +# character to toggle this mode off and on. + +set force_conservative 0 ;# set to 1 to force conservative mode even if + ;# script wasn't run conservatively originally +if {$force_conservative} { + set send_slow {1 .1} + proc send {ignore arg} { + sleep .1 + exp_send -s -- $arg + } +} + +# +# 2) differing output - Some programs produce different output each time +# they run. The "date" command is an obvious example. Another is +# ftp, if it produces throughput statistics at the end of a file +# transfer. If this causes a problem, delete these patterns or replace +# them with wildcards. An alternative is to use the -p flag (for +# "prompt") which makes Expect only look for the last line of output +# (i.e., the prompt). The -P flag allows you to define a character to +# toggle this mode off and on. +# +# Read the man page for more info. +# +# -Don + +set email [lindex $argv 0]; +set password [lindex $argv 1]; + +set timeout -1 +spawn heroku login --interactive +match_max 100000 +expect -re {(.|\n)*Enter your login credentials\r} +send -- "$email" +expect -exact "$email" +send -- "\r" +expect -re {(.|\n)*Password:} +send -- "$password" +expect -re {\*.*} +send -- "\r" +expect eof diff --git a/lib/views/status.erb b/lib/views/status.erb index 48bf557..3ce149b 100644 --- a/lib/views/status.erb +++ b/lib/views/status.erb @@ -16,6 +16,29 @@ .commit:hover { color: red; } + .heroku { + background-color: #7952b3; + } + + .btn-heroku { + color: #fff; + background-color: #7952b3; + border-color: #7952b3; + } + + .btn-heroku:hover { + color: #fff; + background-color: #614092; + border-color: #6d48a4; + } + .btn-outline-heroku { + color: #7952b3; + border-color: #7952b3; + background-color: #fff; + } + .border-heroku { + border-color: #7952b3 !important; + }
<%= @current_branch %>
- <% else %>
- git status
- <% end %>
- - You have changes -
- <% @statuses.each do |status| %> - <% filelist = status[:file_list].join("\n") %> - <% if filelist.length > 0 %> - <%= status[:name] %> -<%= filelist.strip %>+
<%= @current_branch %>
+ <% else %>
+ git status
<% end %>
- <% end %>
-
- <% if !@diff.nil? %>
- <%= @diff %>
- <% end %>
-
- - What do you want to do? -
+ -+ What do you want to do? +
-<%= @status %>- - <% if @current_branch != "master" %> - - <% else %> - - <% end %> - -
- The last thing you did was: -
+<%= @status %>+ <%# TODO why is this here? %> + <% if @current_branch != "master" %> + + <% else %> + + <% end %> + +
+ The last thing you did was: +
-- <%= @last_commit_message %> -- - - Show last commit - +
+ <%= @last_commit_message %> ++ + + Show last commit + -
Do you want to jump back in time and go down a different path?
-<%= @cli_graph_interactive %>