jbf - тонкости при неправильном регистре букв в именах файлов

 

ivse

втянувшийся
дано - свежий датапак l2j, в котором все работает.
если кто-то пересобрал дистрибут на винде и у него изменился регистр букв - то как
это влияет на сервер.

меняем data/jbforth/jbf/main.f на Main.f

получаем:

L2World: Setting up World Regions
JBForth instance load: Abort: Unknown word 'jbf' in file /opt/la2/la2balancer/da
ta/jbforth/Main.f

- не очень понятная ошибка.. я так и не понял как она относится
к тому, что data/jbforth/jbf/main.f поменялся на data/jbforth/jbf/Main.f

ну и дальше куча ругани:


......


java.lang.Exception: 'VALUE' word 'doors-table' not found for word 'TO'
at net.sf.l2j.gameserver.lib.jbf.words.Memory$to_value.exec(Memory.java:
275)
at net.sf.l2j.gameserver.lib.jbf.JBCore.do_word(JBCore.java:147)
at net.sf.l2j.gameserver.lib.jbf.JBCore.exec(JBCore.java:190)
at net.sf.l2j.gameserver.lib.JBForth.exec(JBForth.java:43)
at net.sf.l2j.gameserver.GameServer.<init>(GameServer.java:458)
at net.sf.l2j.Server.main(Server.java:70)
java.lang.Exception: 'VALUE' word 'world' not found for word 'TO'
at net.sf.l2j.gameserver.lib.jbf.words.Memory$to_value.exec(Memory.java:
275)
at net.sf.l2j.gameserver.lib.jbf.JBCore.do_word(JBCore.java:147)
at net.sf.l2j.gameserver.lib.jbf.JBCore.exec(JBCore.java:190)
at net.sf.l2j.gameserver.lib.JBForth.exec(JBForth.java:43)
at net.sf.l2j.gameserver.GameServer.<init>(GameServer.java:459)
at net.sf.l2j.Server.main(Server.java:70)
GameServer Started, free memory 312 Mb of 383 Mb


............



DB connections busy:1 idle:3
LoginServer: Client terminated the connection.
java.lang.Exception: 'VALUE' word 'self' not found for word 'TO'
at net.sf.l2j.gameserver.lib.jbf.words.Memory$to_value.exec(Memory.java:
275)
at net.sf.l2j.gameserver.lib.jbf.JBCore.do_word(JBCore.java:147)
at net.sf.l2j.gameserver.lib.jbf.JBCore.exec(JBCore.java:190)
at java.lang.Thread.run(Thread.java:595)
at net.sf.l2j.gameserver.lib.jbf.JBData.<init>(JBData.java:49)
at net.sf.l2j.gameserver.lib.JBForth.<init>(JBForth.java:24)
at net.sf.l2j.gameserver.model.L2PcInstance.setOnlineStatus(L2PcInstance
.java:3744)
at net.sf.l2j.gameserver.ClientThread.loadCharFromDisk(ClientThread.java
:262)
at net.sf.l2j.gameserver.clientpackets.CharacterSelected.runImpl(Charact
erSelected.java:72)
at net.sf.l2j.gameserver.clientpackets.ClientBasePacket.run(ClientBasePa
cket.java:56)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:41
7)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
access$301(ScheduledThreadPoolExecutor.java:65)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
run(ScheduledThreadPoolExecutor.java:168)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:675)
at java.lang.Thread.run(Thread.java:595)



......
 
+
-
edit
 

Balancer

администратор
★★★★★
Ты что-то путаешь. Если дистрибутив на винде пересобирать, то регистр букв никак влиять не должен в именах файлов.

Под Linux - да, может влиять. Но я с этим не сталкивался ни разу. Не смотря на то, что на Linux работаю именно с SVN-репозиторием.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

Balancer

администратор
★★★★★
Кстати:

>меняем data/jbforth/jbf/main.f на Main.f
>получаем:
> Abort: Unknown word 'jbf' in file /opt/la2/la2balancer/data/jbforth/Main.f

Всё предельно точно. заглядываем в jbforth/Main.f
Видим:
code text
  1. jbf
  2. constants
  3.  
  4. l2j
  5. ...


Всё точно, слова jbf он не знает. Куда точнее-то? Телепатии движок учить?
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

ivse

втянувшийся
нет, если под виндой он пересобран, а запускается под *nix.

когда в каталоге data/jbforth/jbf/main.f - тогда он получается это слово знает...
когда в каталоге data/jbforth/jbf/Main.f - тогда он получается это слово незнает... а ругается при этом на data/jbforth/Main.f
 
+
-
edit
 

Balancer

администратор
★★★★★
>нет, если под виндой он пересобран, а запускается под *nix.

Хочешь сказать, что от того, под какой платформой идёт сборка, зависит то, какой регистр букв будет в исходниках?? :D

>когда в каталоге data/jbforth/jbf/main.f - тогда он получается это слово знает...
>когда в каталоге data/jbforth/jbf/Main.f - тогда он получается это слово незнает...

Одна тонкость. В исходниках сервера записано использовать имена "main.f". И хоть ты под виндой собирай, хоть под Linux, искать он будет всё равно main.f Код сам, самопроизвольно,не изменится на использование Main.f от того, что его под другой платформой собирать :)

>а ругается при этом на data/jbforth/Main.f

Вот даже не представляю, как такое может быть. Ибо при смене регистра имени файла в SVN, процедура состоит из двух этапов. Так что SVN тут - не при чём. А при деле - /dev/hands некоторых горе-дистрибьютеров :)

Кстати, повторюсь, что регистр имён файлов менял не только я и не только в JBF :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

ivse

втянувшийся
не в исходниках, а в именах файлов форт скриптов

ну сам попробуй
$ cd ~la2
$ mv data/jbforth/jbf/main.f data/jbforth/jbf/Main.f
$ ./startServer.sh

пользуюсь дистрибутом от l2custom - Encountered a 404 error
они его собирают под виндой и соответственно форт у меня по дефолту не работает.
естественно не на винде - солярис у меня.
 
+
-
edit
 

Balancer

администратор
★★★★★
Нет, человек не понимает...

...

По буквам!

Да, если я переименую (под Linux!) main.f в Main.f, то работать перестанет.

Но в датапаке в SVN сейчас лежит не Main.f, а main.f

При чём при корректном обычном стандартном "svn co ...", регистр этот должен смениться. И меняется.

А если кто-то собирает кривые сборки, то обратитесь, наконец, к сборкам прямым. В том же Файлы L2J /Бесплатный Lineage II Interlude (C6) сервер Balancer'а/ - всегда лежат утренние l2j.sf + L2J Datapack. В которых таких, вот, бяк с регистром букв просто не может быть :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

ivse

втянувшийся
это все понятно, речь то про другое - диагностика ошибки просто никакая.
наверняка не я один на это натыкался, и это вряд-ли прибавляет популярности
форту, поскольку ошибки выдает именно он. а сторонние дистрибуты
достаточно популярны.

собственно и предложение - сделать внятное ошибочное сообщение,
что-б любому понятно стало.
ну или находить его под тем-же именем другого регистра, хотя это сложнее и не факт что нужно.
 
+
-
edit
 

Balancer

администратор
★★★★★
>это все понятно, речь то про другое - диагностика ошибки просто никакая.

Я, ведь, и на это отвечал выше. В тексте программы написано - "jbf". Система такого слова не находит. На число оно не похоже. Это не строка. Пытаемся искать такой файл - не найден. То же самое для каталога - нету. Значит, выдаём сообщение об ошибке, мол, такого слова не знаем.

Ты предлагаешь, чтобы система выдавала "вижу незнакомое мне сочетание jbf, которое может быть числом, а котором вы ошиблись, неверно написанным словом, непонятным именем файла или каталога"? А чат твой не лопнет от перегрузки?

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

Или у нас l2j уже взял курс на полных идиотов?

>собственно и предложение - сделать внятное ошибочное сообщение,
>что-б любому понятно стало.

Что конкретно писать?? Как система должна выдавать разную реакцию на, скажем, "jbf" и "jbb"? Где первое может быть именем каталога, а второе - обычным словом? Если ты знаешь телепатические алгоритмы - поделись. Все тебе спасибо скажут.

>ну или находить его под тем-же именем другого регистра, хотя это сложнее и не факт что нужно.

Конечно, не нужно. Всё, что нужно, это не быть полным идиотом при работе с SVN и хотя бы просматривать изменившиеся файлы. Это прекрасно видно на любом трекере.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
AD Реклама Google — средство выживания форумов :)

ivse

втянувшийся
> Я, ведь, и на это отвечал выше. В тексте программы написано - "jbf". Система такого слова не находит. На число оно не похоже. Это не строка. Пытаемся искать такой файл - не найден. То же самое для каталога - нету. > Значит, выдаём сообщение об ошибке, мол, такого слова не знаем.

цепочка мыслей:

- jbf незнакомое слово
- делаю grep jbf * */* - ничего явного
- вижу каталог jbf, думаю наверное это его там вызывают
- захожу внутрь - тоже вроде все нормально.

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

а насчет как - видим jbf, мы его не знаем, но видим
каталог jbf - уже можно при ругани про каталог сказать.

или просто unknown word or error in data/jbforth/слово/main.f execution.

понятными сообщения об ошибках все-ж не стоит пренебрегать.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru