github.com/noironetworks/cilium-net@v1.6.12/contrib/shell/util.sh (about)

     1  #!/bin/bash
     2  # Copyright 2016 The Kubernetes Authors All rights reserved.
     3  # Copyright 2018-2019 Authors of Cilium
     4  #
     5  # Licensed under the Apache License, Version 2.0 (the "License");
     6  # you may not use this file except in compliance with the License.
     7  # You may obtain a copy of the License at
     8  #
     9  #     http://www.apache.org/licenses/LICENSE-2.0
    10  #
    11  # Unless required by applicable law or agreed to in writing, software
    12  # distributed under the License is distributed on an "AS IS" BASIS,
    13  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  # See the License for the specific language governing permissions and
    15  # limitations under the License.
    16  
    17  readonly  reset=$(tput sgr0)
    18  readonly  green=$(tput bold; tput setaf 2)
    19  readonly yellow=$(tput bold; tput setaf 3)
    20  readonly   blue=$(tput bold; tput setaf 6)
    21  readonly timeout=$(if [ "$(uname)" == "Darwin" ]; then echo "1"; else echo "0.1"; fi)
    22  readonly ipv6regex='(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))'
    23  
    24  function desc() {
    25      maybe_first_prompt
    26      echo "$blue# $@$reset"
    27      prompt
    28  }
    29  
    30  function desc_rate() {
    31      maybe_first_prompt
    32      rate=30
    33      if [ -n "$DEMO_RUN_FAST" ]; then
    34        rate=1000
    35      fi
    36      echo "$blue# $@$reset" | pv -qL $rate
    37      prompt
    38  }
    39  
    40  function prompt() {
    41      echo -n "$yellow\$ $reset"
    42  }
    43  
    44  started=""
    45  function maybe_first_prompt() {
    46      if [ -z "$started" ]; then
    47          prompt
    48          started=true
    49      fi
    50  }
    51  
    52  # After a `run` this variable will hold the stdout of the command that was run.
    53  # If the command was interactive, this will likely be garbage.
    54  DEMO_RUN_STDOUT=""
    55  
    56  function run() {
    57      maybe_first_prompt
    58      rate=50
    59      if [ -n "$DEMO_RUN_FAST" ]; then
    60        rate=1000
    61      fi
    62      echo "$green$1$reset" | pv -qL $rate
    63      if [ -n "$DEMO_RUN_FAST" ]; then
    64        sleep 0.5
    65      fi
    66      OFILE="$(mktemp -t $(basename $0).XXXXXX)"
    67      script -eq -c "$1" -f "$OFILE"
    68      r=$?
    69      read -d '' -t "${timeout}" -n 10000 # clear stdin
    70      prompt
    71      if [ -z "$DEMO_AUTO_RUN" ]; then
    72        read -s
    73      fi
    74      DEMO_RUN_STDOUT="$(tail -n +2 $OFILE | sed 's/\r//g')"
    75      return $r
    76  }
    77  
    78  function relative() {
    79      for arg; do
    80          echo "$(realpath $(dirname $(which $0)))/$arg" | sed "s|$(realpath $(pwd))|.|"
    81      done
    82  }
    83  
    84  # Continue rebasing and progressively update the daemon/bpf.sha each time there
    85  # is a merge conflict for it. If there are merge conflicts in other files, it
    86  # will stop rebasing and return for user input.
    87  #
    88  # Expected usage:
    89  #   $ git rebase origin/master
    90  #   <Merge failure on daemon/bpf.sha>
    91  #   $ rebase-bindata
    92  #   <For each conflict, your editor opens to review the commit. Save & exit>
    93  function rebase-bindata
    94  {
    95      (
    96          local dir
    97          set -x
    98          while ! git rebase --continue ; do
    99              dir=$(cd $(dirname ${BASH_SOURCE})/../.. && pwd)
   100              $dir/contrib/scripts/fix-sha.sh
   101              git add daemon/bpf.sha
   102              if [ $(git diff --diff-filter=U | wc -l) -ne 0 ]; then
   103                  echo "Files that need manual merge:"
   104                  git diff --name-only --diff-filter=U
   105                  break
   106              fi
   107          done
   108      )
   109  }
   110  
   111  trap "echo" EXIT