Проверка наличия нескольких каталогов в соответствующих ветвях - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно создать новый Makefile, который получает исходный Makefile, а затем использует переменные, определенные внутри, чтобы проверить, существуют ли каталоги в соответствующих локальных ветвях.Я прочитал много сообщений в StackOverflow о проверке наличия каталогов, но я застрял на том, как узнать, есть ли их в соответствующих ветках.

#!bin/ksh
DIRLOC=/var/tmp
DIRNAMES="SchemaExtract SQL Count SchExtArchive"
for DIRNAME in ${DIRNAMES}
do
if [ -d ${DIRLOC}/${DIRNAME} ]
then
    echo ${DIRLOC}/${DIRNAME} already exists
else
    echo ${DIRLOC}/${DIRNAME} Creating ...
    mkdir ${DIRLOC}/${DIRNAME}
    chmod 755 ${DIRLOC}/${DIRNAME}
fi
done

Любая помощь будет оценена!

Разъяснение- Я хочу указать в моем новом файле Makefile, в какой ветке git должен находиться каждый каталог. Поэтому мне нужен код, который читает каталоги из основного файла Makefile, проверяет,существует, и если да, сравните местоположение найденных каталогов с местами, которые я указал в новом файле Makefile, чтобы определить, что все находится в правильной ветке git.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Так что я просматривал и наткнулся на этот пост .Разве это не работает немного лучше для того, что мне нужно сделать в долгосрочной перспективе, поскольку мне нужно, чтобы оно работало с верхнего уровня вниз?

MY_DIRNAME=../External
ifneq "$(wildcard $(MY_DIRNAME) )" ""
  # if directory MY_DIRNAME exists:
  INCLUDES += -I../External
else
  # if it doesn't:
  INCLUDES += -I$(HOME)/Code/External
endif
0 голосов
/ 07 июня 2018

Вы можете использовать команду git ls-tree для проверки существования каталогов в данной ветви.

В качестве примера рассмотрим следующий репозиторий:

# There are 3 branches.
$ git branch
  branch1
  branch2
* master

# master contains master_dir
$ ls
master_dir

# branch1 contains master_dir and branch1_dir
$ git checkout branch1
Switched to branch 'branch1'
$ ls
branch1_dir  master_dir

# branch2 contains master_dir and branch2_dir
$ git checkout branch2
Switched to branch 'branch2'
$ ls
branch2_dir  master_dir

# switch back to the master branch
$ git checkout master
Switched to branch 'master'
$ ls
master_dir

Следующие командызапустить из главной ветви.

Для ветви 1:

$ git ls-tree -d branch1:branch1_dir
$ git ls-tree -d branch1:branch2_dir
fatal: Not a valid object name branch1:branch2_dir

Для ветви 2:

$ git ls-tree -d branch2:branch2_dir
$ git ls-tree -d branch2:branch1_dir
fatal: Not a valid object name branch2:branch1_dir

В вашем сценарии оболочки вы можете использовать возвращаемое значение командыв вашем условии:

$ git ls-tree -d branch1:branch1_dir 2&> /dev/null; \
> if [[ $? -eq 0 ]]; then echo "Exists"; else echo "Does not exist"; fi
Exists

$ git ls-tree -d branch1:branch2_dir 2&> /dev/null; \
> if [[ $? -eq 0 ]]; then echo "Exists"; else echo "Does not exist"; fi
Does not exist

РЕДАКТИРОВАТЬ: Пример сценария оболочки, используя определения каталогов во внешнем файле.

$ cat branch-dirs.txt
branch1:branch1_dir
branch2:branch2_dir
branch2:non_existent_dir

$ cat check_dirs.sh
#!/bin/bash

readonly BRANCH_DIR_FILE="./branch-dirs.txt"

for dir_to_check in $(cat "$BRANCH_DIR_FILE"); do
  git ls-tree -d "${dir_to_check}" 2&> /dev/null
  if [[ $? -eq 0 ]]; then
    echo "${dir_to_check} exists."
  else
    echo "${dir_to_check} does not exist."
  fi
done

$ ./check_dirs.sh
branch1:branch1_dir exists.
branch2:branch2_dir exists.
branch2:non_existent_dir does not exist.
...