代码拉取完成,页面将自动刷新
#!/bin/bash
source common/common.sh common
OP_MAIN_GIT_ROOT=http://git.openwrt.org/openwrt.git
function check_wrtoy_sys_paths()
{
local rootdir=$op_wrtoy_dir
if [ ! -d $rootdir ]; then
chk_mkdir $rootdir
fi
chk_mkdir $rootdir/works
chk_mkdir $rootdir/backup
chk_mkdir $rootdir/dl
#chk_mkdir $rootdir/staging_dir
#chk_mkdir $rootdir/build_dir
chk_mkdir $rootdir/tftproot
chk_mkdir $rootdir/feeds
chk_mkdir $rootdir/feeds/rep
chk_mkdir $rootdir/feeds.git
chk_mkdir $rootdir/boards
chk_mkdir $rootdir/hosts
}
function upgrade_wrtoy_git_project()
{
local rootdir=$op_wrtoy_dir
local project=$1
local giturl=$2
local gitbranch=$3
if [ -d "$rootdir" ]; then
if [ "$project" == "openwrt" ]; then
cd $rootdir
if [ ! -d $rootdir/$project.git -a ! -d $rootdir/$project.git/.git -a ! -f $rootdir/README ]; then
show i $(lang "clone $project." "克隆 $project")
git clone $giturl $project.git
[ -z "$gitbranch" ] && gitbranch=master
cd $project.git
git checkout $gitbranch
else
show i $(lang "upgrade $project." "更新 $project")
cd $project.git
[ -z "$gitbranch" ] && gitbranch=master
git checkout $gitbranch
git pull
fi
else
cd $rootdir/feeds.git
if [ ! -d $rootdir/feeds.git/$project.git -a ! -d $rootdir/feeds.git/$project.git/.git ]; then
show i $(lang "clone $project." "克隆 $project")
git clone $giturl $project.git
cd $project.git
[ -n "$gitbranch" ] && git checkout $gitbranch
else
show i $(lang "upgrade $project." "更新 $project")
cd $project.git
[ -n "$gitbranch" ] && git checkout $gitbranch
git pull
fi
fi
fi
}
function export_wrtoy_git_project()
{
local rootdir=$op_wrtoy_dir
local project=$1
local githash=$2
local gitbranch=$3
local gitmode=$4
local ppath
local pfix
local pbak
local dstpath
local dstpathp
[ "$project" == "openwrt" ] && ppath=$rootdir/$project.git || ppath=$rootdir/feeds.git/$project.git
[ "$project" == "openwrt" ] && pfix="" || pfix="feeds_"
[ "$project" == "openwrt" ] && psub="works/" || psub="feeds/rep/"
[ "$project" == "openwrt" ] && dstpath=$rootdir/$project || dstpath=$rootdir/feeds/$project
[ "$project" == "openwrt" ] && {
mkdir -p "$rootdir/projreps/${projname}"
dstpathp="$rootdir/projreps/${projname}/${project}"
} || {
mkdir -p "$rootdir/projreps/${projname}/feeds"
dstpathp="$rootdir/projreps/${projname}/feeds/${project}"
}
cd $op_root
local proj_name=$(./hardware_manage -gv pn)
pbak=$rootdir/backup
cd $ppath
if [ -z "$githash" -o "$githash" == " " -o "$githash" == "HEAD" ]; then
[ -z "$githash" -o "$githash" == " " ] && githash="HEAD"
fi
#exit 0
local git_prefix=$(git log $githash -1 --format="${psub}${project}_${proj_name}_%ad_%h" --date=short)
local git_targz=$(git log $githash -1 --format="${pfix}${project}_${proj_name}_%ad_%h.tar.gz" --date=short)
local proj_link=$(git log $githash -1 --format="${psub}${project}_${proj_name}_%ad_%h" --date=short)
local current_hash=$([ "$githash" == "HEAD" ] && echo $(git log -1 --format="%H") || echo "$githash")
#echo "git_prefix: $git_prefix"
#echo "git_targz : $git_targz"
#echo "proj_link : $proj_link"
#echo "current_hash : $current_hash"
if [ ! -f $pbak/$git_targz -o ! -L $rootdir/$proj_link ]; then
show -i $(lang "export $project to tar.gz" "导出 $project")
#echo $githash
git archive --format=tar --prefix=$git_prefix/ $githash | gzip > $pbak/$git_targz
#echo "git archive --format=tar --prefix=$git_prefix/ $githash | gzip > $pbak/$git_targz"
#echo "$git_prefix" > $pbak/lastgit
fi
echo "$rootdir/$proj_link" "$git_targz"
cd $pbak
[ -d $rootdir/$proj_link -a "$gitmode" == "reset" ] && rm -rf $rootdir/$proj_link
if [ ! -d $rootdir/$proj_link -a -f $git_targz ]; then
show -i $(lang "untar $project" "解压$project")
tar zxf $git_targz -C $rootdir
[ -d $rootdir/$proj_link -a ! -d $rootdir/$proj_link.orig ] && cp -rf $rootdir/$proj_link $rootdir/$proj_link.orig
#echo "tar zxvf $git_targz -C $rootdir/$proj_link"
fi
if [ -L $dstpath ]; then
rm -f $dstpath
fi
if [ -L $dstpathp ]; then
rm -f $dstpathp
fi
show -i $(lang "link $pfix$project" "链接项目$pfix$project")
if [ ! -L $dstpath -a -d $rootdir/$proj_link ]; then
ln -s $rootdir/$proj_link $dstpath
ln -s $rootdir/$proj_link $dstpathp
fi
[ -d $dstpath ] && cd $dstpath
if [ "$project" == "openwrt" ]; then
if [ -d $dstpath ]; then
if [ -d $rootdir/dl -a ! -L $dstpath/dl ]; then
show -i $(lang "link 'dl' directory" "链接dl目录")
[ -e $dstpath/dl ] && rm -f $dstpath/dl -
ln -s $rootdir/dl $dstpath/dl
fi
[ ! -d $dstpath/staging_dir ] && mkdir -p $dstpath/staging_dir
[ -e $rootdir/staging_dir ] && rm $rootdir/staging_dir
[ ! -f $rootdir/staging_dir ] && {
show -i $(lang "link 'staging_dir' directory" "链接staging_dir目录")
ln -s $dstpath/staging_dir $rootdir/staging_dir
}
[ ! -d $dstpath/build_dir ] && mkdir -p $dstpath/build_dir
[ -e $rootdir/build_dir ] && rm $rootdir/build_dir
[ ! -f $rootdir/build_dir ] && {
show -i $(lang "link 'build_dir' directory" "链接build_dir目录")
ln -s $dstpath/staging_dir $rootdir/build_dir
}
#if [ -d $rootdir/staging_dir -a ! -L $dstpath/staging_dir ]; then
# show -i $(lang "link 'staging_dir' directory" "链接staging_dir目录")
# [ -e $dstpath/staging_dir ] && rm -f $dstpath/staging_dir
# ln -s $rootdir/staging_dir $dstpath/staging_dir
#fi
#if [ -d $rootdir/build_dir -a ! -L $dstpath/build_dir ]; then
# show -i $(lang "link 'build_dir' directory" "链接build_dir目录")
# [ -e $dstpath/build_dir ] && rm -f $dstpath/build_dir
# ln -s $rootdir/build_dir $dstpath/build_dir
#fi
cd $op_root
./hardware_manage -ch "$current_hash"
#if [ ! -f feeds.conf ]; then
# show -i $(lang "复制feeds.conf文件")
# cp feeds.conf.default feeds.conf
#fi
fi
if [ -d $dstpathp ]; then
if [ -d $rootdir/dl -a ! -L $dstpathp/dl ]; then
show -i $(lang "link 'dl' directory" "链接dl目录")
[ -e $dstpathp/dl ] && rm -f $dstpathp/dl -
ln -s $rootdir/dl $dstpathp/dl
fi
[ ! -d $dstpathp/staging_dir ] && mkdir -p $dstpathp/staging_dir
[ -e $rootdir/staging_dir ] && rm $rootdir/staging_dir
[ ! -f $rootdir/staging_dir ] && {
show -i $(lang "link 'staging_dir' directory" "链接staging_dir目录")
ln -s $dstpathp/staging_dir $rootdir/staging_dir
}
[ ! -d $dstpathp/build_dir ] && mkdir -p $dstpathp/build_dir
[ -e $rootdir/build_dir ] && rm $rootdir/build_dir
[ ! -f $rootdir/build_dir ] && {
show -i $(lang "link 'build_dir' directory" "链接build_dir目录")
ln -s $dstpathp/staging_dir $rootdir/build_dir
}
#if [ -d $rootdir/staging_dir -a ! -L $dstpathp/staging_dir ]; then
# show -i $(lang "link 'staging_dir' directory" "链接staging_dir目录")
# [ -e $dstpathp/staging_dir ] && rm -f $dstpathp/staging_dir
# ln -s $rootdir/staging_dir $dstpathp/staging_dir
#fi
#if [ -d $rootdir/build_dir -a ! -L $dstpathp/build_dir ]; then
# show -i $(lang "link 'build_dir' directory" "链接build_dir目录")
# [ -e $dstpathp/build_dir ] && rm -f $dstpathp/build_dir
# ln -s $rootdir/build_dir $dstpathp/build_dir
#fi
cd $op_root
./hardware_manage -ch "$current_hash"
#if [ ! -f feeds.conf ]; then
# show -i $(lang "复制feeds.conf文件")
# cp feeds.conf.default feeds.conf
#fi
fi
else
echo "src-link $project $dstpath" >> $rootdir/openwrt/feeds.conf
fi
}
function get_hard_config()
{
local ppath=$op_root/.hardware
local cfg
if [ -L "$ppath" ]; then
[ -f $ppath ] && cfg=$(cat $ppath) || cfg="{}"
[ -z "$cfg" ] && cfg="{}"
echo '$cfg'
else
echo "{}"
fi
}
function upgrade_openwrt_source()
{
#local cfg=$(get_hard_config)
local ppath=$op_root/.hardware
local cfg
if [ -L "$ppath" ]; then
[ -f $ppath ] && cfg=$(cat $ppath) || cfg="{}"
[ -z "$cfg" ] && cfg="{}"
else
echo "{}"
fi
local mode=$1
local pub=$2
local br=
if [ "$mode" == "release" -o "$mode" == "rh" -o "$mode" == "r" ]; then
mode="release.hash"
br="release.branch"
elif [ "$mode" == "beta" -o "$mode" == "bh" -o "$mode" == "b" ]; then
mode="beta.hash"
br="beta.branch"
elif [ "$mode" == "current" -o "$mode" == "ch" -o "$mode" == "c" ]; then
mode="current.hash"
br="current.branch"
else
mode="lastgit"
br="last.branch"
fi
#$(echo "$cfg" | jq ".$mode" -r)
local hash=$(tmp=$(echo "$cfg" | jq ".$mode" -r);[ "$tmp" != "null" ] && echo "$tmp" || echo "")
local branch=
[ -n "$br" ] && branch=$(tmp=$(echo "$cfg" | jq ".$br" -r);[ "$tmp" != "null" ] && echo "$tmp" || echo "")
upgrade_wrtoy_git_project openwrt "$OP_MAIN_GIT_ROOT" $branch $br
export_wrtoy_git_project openwrt "$hash" "$br" "$pub"
#export_wrtoy_git_project openwrt "006d662b38c42749ec0feb4b8bd407b0fd453a74"
#export_wrtoy_git_project openwrt "d084b0cc0fecec5645c27e5482d4adcf193d1ab1"
}
function upgrade_feeds_source()
{
if [ ! -z "$1" -a ! -z "$2" ]; then
upgrade_wrtoy_git_project "$1" "$2" "$4"
export_wrtoy_git_project "$1" "$3"
fi
}
function upgrade_all_feeds_source()
{
#local cfg=$(get_hard_config)
local ppath=$op_root/.hardware
local cfg
if [ -L "$ppath" ]; then
[ -f $ppath ] && cfg=$(cat $ppath) || cfg="{}"
[ -z "$cfg" ] && cfg="{}"
else
echo "{}"
fi
local flen=$(echo "$cfg" | jq ".feeds | length" -r)
local feed_name
local feed_src
local feed_hash
local feed_branch
local feed_force
show l
for((i=0;i<$flen;i++))
do
feed_name=$(echo "$cfg" | jq ".feeds | keys | .[$i]" -r)
feed_src=$(echo "$cfg" | jq ".feeds.$feed_name.source" -r)
feed_hash=$(echo "$cfg" | jq ".feeds.$feed_name.hash" -r)
feed_branch=$(echo "$cfg" | jq ".feeds.$feed_name.branch" -r)
feed_force=$(echo "$cfg" | jq ".feeds.$feed_name.force" -r)
[ "$feed_hash" == "null" ] && feed_hash=""
[ "$feed_branch" == "null" ] && feed_branch="master"
[ "$feed_force" == "null" ] && feed_force="0"
echo " $i.[$feed_name] $feed_src $feed_hash $feed_branch $feed_force"
upgrade_feeds_source "$feed_name" "$feed_src" "$feed_hash" "$feed_branch"
show l
done
}
function action_all_feeds_upgrade()
{
#local cfg=$(get_hard_config)
local ppath=$op_root/.hardware
local cfg
if [ -L "$ppath" ]; then
[ -f $ppath ] && cfg=$(cat $ppath) || cfg="{}"
[ -z "$cfg" ] && cfg="{}"
else
echo "{}"
fi
local flen=$(echo "$cfg" | jq ".feeds | length" -r)
local feed_name
local feed_src
local feed_hash
local feed_branch
local feed_force
show l
for((i=0;i<$flen;i++))
do
feed_name=$(echo "$cfg" | jq ".feeds | keys | .[$i]" -r)
feed_src=$(echo "$cfg" | jq ".feeds.$feed_name.source" -r)
feed_hash=$(echo "$cfg" | jq ".feeds.$feed_name.hash" -r)
feed_branch=$(echo "$cfg" | jq ".feeds.$feed_name.branch" -r)
feed_force=$(echo "$cfg" | jq ".feeds.$feed_name.force" -r)
[ "$feed_hash" == "null" ] && feed_hash=""
[ "$feed_branch" == "null" ] && feed_branch="master"
[ "$feed_force" == "null" ] && feed_force="0"
echo " $i.[$feed_name] $feed_src $feed_hash $feed_branch $feed_force"
if [ "$feed_force" == "1" ]; then
./scripts/feeds install -f -a -p $feed_name
else
./scripts/feeds install -a -p $feed_name
fi
show l
done
}
function clear_feeds_conf()
{
[ -f "$op_wrtoy_dir/openwrt/feeds.conf" ] && rm -f $op_wrtoy_dir/openwrt/feeds.conf
}
function action_feeds_upgrade()
{
cd $op_dir
./scripts/feeds update -a
#./scripts/feeds install -a
action_all_feeds_upgrade
}
function show_tips()
{
echo "==========================="
echo " 现在可以编译openwrt 最新版了"
echo " cd $rootdir/openwrt"
echo " [option] ./scripts/feeds update -a"
echo " [option] ./scripts/feeds install -a"
echo " make defconfig"
echo " make menuconfig"
echo " [option] make download"
echo " [screen] make V=99"
echo " [screen] make -j 4 V=99"
echo "==========================="
}
function action_run()
{
check_wrtoy_sys_paths
upgrade_openwrt_source "$upgarde_name" "reset"
[ $upgarde_feeds -a $upgarde_feeds == true ] && clear_feeds_conf
[ $upgarde_feeds -a $upgarde_feeds == true ] && upgrade_all_feeds_source
[ $upgarde_install -a $upgarde_install == true ] && action_feeds_upgrade
show_tips
}
projname=$(./hardware_manage -gv pn)
op_root=$(get_wrtoy_path)
op_wrtoy_dir=$(get_wrtoy_path ..)
op_hp_dir=$(get_wrtoy_path profiles)
op_tl_dir=$(get_wrtoy_path ../tftproot)
op_dir=$(get_wrtoy_path ../openwrt)
#======================================================
help_mode=$(lang \
"Use Openwrt git source mode(release/beta/current)" \
"Openwrt项目git源模式(release/beta/current)")
addOption -m --mode \
dest=upgarde_name \
help="$help_mode"
#======================================================
help_feeds=$(lang \
"upgrade feeds source" \
"更新feeds源")
addOption -f --feeds \
flagTrue dest=upgarde_feeds \
help="$help_feeds"
#======================================================
help_install=$(lang \
"install feeds source" \
"安装feeds源")
addOption -i --install \
flagTrue dest=upgarde_install \
help="$help_install"
parseOptions "$@"
action_run
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。